Posted at

Elasticsearch&kuromoji で、kuromoji_part_of_speechを設定するときの注意

More than 3 years have passed since last update.

https://medium.com/hello-elasticsearch/elasticsearch-833a0704e44b


TokenFilter : kuromoji_part_of_speech

このフィルターは指定された品詞を除外するためのフィルターです。

NOTE:

デフォルトは、lucene-analyzer-kuromoji.jar に含まれる stoptags.txt に設定されている品詞が除外されます。※ 特殊な場合をのぞいてデフォルトのままで良さそうです。

個別に設定するには、次のようにします。


設定サンプル: 助詞-格助詞-一般、助詞-終助詞 を除外

index:

analysis:

filter:

pos_filter:

type: kuromoji_part_of_speech

stoptags: [助詞-格助詞-一般, 助詞-終助詞]

tokenizer:

ja_tokenizer:

type: kuromoji_tokenizer

mode: search

analyzer:

ja:

type: custom

tokenizer: ja_tokenizer

filter: [pos_filter]


という記述を見て、サンプルコードそのまま「stoptags: [助詞-格助詞-一般, 助詞-終助詞]」を設定してしまった人居ませんか?(自社のプロジェクトで居ました)。こうするとデフォルトの除外品詞の設定を上書きしてしまうため、検索結果に微妙なテキストが混入する可能性があります。

今回は、「だ」で検索するとなぜか「だ」を含まずに「な」を含むテキストがヒットしたため判明しました。

用言の活用を終止形に直して格納するフィルタも同時にセットしてあったため、「な」が、助動詞「だ」の連体形「な」として解釈され、インデックスに格納されていたのが原因だったようです。

本来デフォルトのままでよかったところを、「個別に設定する」ためのサンプルを使ってしまったということで。

結論としてはよく読めと。