$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

今日のElasticsearch学び Vol.4 - Analyze結果を確認する

 Elasticsearchで自分でAnalyzerを定義した時、意図通りにAnalyzeできているか確かめたいことがある。この場合、elasticsearch-inquisitorを使う方法と、fielddata_fieldsを使う方法がある。

elasticsearch-inquisitorを使う方法

 elasticsearch-inquisitorプラグインの紹介 - @johtaniの日記 2nd に詳しいことは書かれているので参考に。

 このプラグインを使えば、自分で適当な文字列を入力して、デフォルトのAnalyzerの挙動や、自分で設定したマッピングのAnalyzerの挙動を確認できる。

 以下のスクショは、「隣の客はよく柿食う客だ」という文章に対して、デフォルトのAnalyzerはどう解釈するかや、自分で定義したja_keyword_analyzer、ja_text_analyzerがどう機能するか確認してみた例である。
f:id:shiba_yu36:20160803095530p:plain

fielddata_fields

 自分で文字列を入力する以外に、実際にElasticsearchに投入したデータがどのように解析されて、termとして登録されているか確認したいことがある。この場合はsearch APIに対して、fielddata_fieldsというオプションを渡せばいい。ドキュメントは https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-fielddata-fields.html

 例えば以下のようなクエリをsearch APIに対して発行する。

{
  "query": { "match_all": {}},
  "fielddata_fields": ["title"]
}

 すると、hitsのそれぞれの結果の中にfieldsという名前のキーが追加されて、その中にtitleフィールドがAnalyzeされてどのようなtermになったかが入っている。これで実際のドキュメントがどのようなtermを持っているのか確認することができる。