全文型フィールドの存在判定(EXISTS)はトークン数で決まる
データモデリング
検索基盤
Elasticsearch/OpenSearch
知識
判断
全文検索エンジン(Elasticsearch/OpenSearch)の text 型フィールドに対する「値が存在するか」の判定は、原文が空でないかではなく、アナライザ通過後にインデックス化されたトークンが1つ以上あるかで決まる。したがって文字を除去する char_filter(例: 数字以外を落とす正規化)を入れると、除去後にトークンがゼロになる値(記号のみ・数字を含まない語など)は「存在する」判定から消え、逆に「未入力」判定側にヒットする。存在判定・空判定の契約を保ちたいなら、正規化を通さない keyword サブフィールドなど raw 文字列を保持する対象で存在判定を行う。落とし穴: 既存の緩いアナライザから除去強めのアナライザへ移行すると、この経路で存在系検索の挙動が静かに反転する。検証は、除去後トークンがゼロになる代表値を用意し、存在検索と未入力検索の両方でヒット有無を確認する。