Enterprise search in Japanese (kuromoji vs n-gram)

KUROMOJIで検索がおかしいと言われた話

ある案件で、

「検索結果がおかしい」

って相談を受けた。

検索文字と一致しない結果が出る、みたいなやつ。


前提

この時点で「まあ難しいやつだな」と思った。


原因はKUROMOJI

調べていくと、原因はシンプルだった。

👉 KUROMOJIを使っていた

KUROMOJIは形態素解析なので、

つまり、

👉 「検索」より「文章理解」に強い


何が起きていたか

例えば、

検索ワードと完全一致してるはずなのに

結果、

👉 「なんでこれヒットするの?」
👉 「逆にこれ出てこないの?」

みたいな状態になる。


結論:普通の検索には向いてない

KUROMOJIは強いけど、

👉 一般的な検索(部分一致・曖昧検索)には向いてない

特に業務システムだと

が求められるので、ズレる。


解決策:n-gramに変更

今回はシンプルに

👉 n-gramに変更

これで


ただし問題はここから

ElasticSearchなので、

👉 analyzerを変える = 再インデックス必須

つまり

がある。


ALIASで無停止リリース

ここで使ったのが

👉 index alias

手順はこんな感じ👇

  1. 新しいindex(n-gram)を作る
  2. データを再投入(reindex)
  3. 事前に動作確認
  4. aliasを切り替える

👉 リリースは一瞬


これめちゃくちゃ重要

この方法だと


■ まとめ


■ 一言

👉 日本語検索は「技術選定」で9割決まる


■ 余談(実務感)

KUROMOJIはちゃんと理解して使えば強い。

ただ、

「とりあえず日本語だからKUROMOJI」

で入れると、だいたい事故る。