全文検索でヒットしないケースについて

Elasticsearch v7 を利用しています。

kuromoji を使った日本語の全文検索を使っているのですが、特定のキーワードだとヒットしない状況です。なにか改善方法があるかアドバイス頂けると嬉しいです。

登録テキスト : 新松戸 (実際はこのワードを含む長文)
データ型 : text
kuromoji 設定 : デフォルトのまま
形態素解析 : 新松戸 (分割されない)

検索キーワード

  • 新松戸 :white_check_mark:
  • 松戸 :ng:

クエリ例

GET index_name/_search
{
  "query": {
    "bool": { 
      "must": [
        {
          "match": {
            "content" : "松戸"
          }
        }
      ]
    } 
  } 
}

形態素解析で / 松戸 と分割されないので 松戸 で検索をしてもヒットしないと理解しています。このようなケースが他のワードでも発生している状況です。

RDB の LIKE 検索のような挙動を期待しているのですが、Elasticsearch にある Wildcard クエリを使うのが良いのか、形態素解析のオプションなどで対応が可能なのかが分かっていません。

部分一致が目的であれば、kuromojiではなくN-gram tokenizerを使ってみてはいかがですか。

N-gram であれば確かに 新松 / 松戸 など細かく分割されますね。インデックスサイズの肥大化を懸念していますが、どの程度なのか検証してみます。ありがとうございます。

1 Like