全文検索のあいまい検索でダイアクリティカル文字がヒットしない原因と対処
バックエンド
設計
検索
OpenSearch/Lucene で多言語のあいまい検索を行う際、インデックス側 analyzer は asciifolding + lowercase でダイアクリティカルマーク付き文字(ベトナム語の Công→cong 等)を正規化して格納する。しかし analyzer を通らないクエリ種別(span_term/span_near 等)を使うと、クエリ側がダイアクリティカル付きのまま照合され、必須条件を満たせずヒットしない。対処はクエリ文字列をインデックス側 analyzer と等価に正規化してから span_term に渡すこと。match/match_phrase など analyzer を通る経路には正規化済み値を渡さず生の値を渡す(二重正規化で逆に壊れるため)。クエリ種別ごとに analyzer を通るか通らないかを意識して正規化適用範囲を切り分けるのが肝。