# Dec 2nd, 2018: \[JP\]\[Elasticsearch\] Analyze UIプラグインでAnalyzerの動きを理解する

**URL:** <https://discuss.elastic.co/t/dec-2nd-2018-jp-elasticsearch-analyze-ui-analyzer/158286>\
**Category:** Advent Calendar\
**Created:** [December 2, 2018, 12:00am UTC](https://discuss.elastic.co/t/dec-2nd-2018-jp-elasticsearch-analyze-ui-analyzer/158286 "2018-12-02T00:00:01Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![johtani](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/johtani/32/44956_2.png) [@johtani](https://discuss.elastic.co/u/johtani)\
**Post date:** [December 2, 2018, 12:00am UTC](https://discuss.elastic.co/t/dec-2nd-2018-jp-elasticsearch-analyze-ui-analyzer/158286/1 "2018-12-02T00:00:01Z")

</div>

Analyzerの動きを理解することが、Elasticsearchの検索をよりよくする、検索にヒットしない理由を解析する近道だったりします。  
素晴らしいことに、Elasticsearchには[`_analyze` API](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-analyze.html)という便利なAPIが存在します。  
既存のAnalyzerやカスタムAnalyzer（自分で定義したAnalyzer）を使用して、入力した文字列がどのようにTokenizeされて、転置インデックスのキーなるかというのを見ることができます。

ただ、便利なのですが、やはりREST APIでJSONでデータが返ってきます。  
長い文章や多くの単語を含むような場合には、JSONを追いかけるのは少し大変になることもあります。

そこで、今回紹介するのが私が作成している[Analyze UIプラグイン](https://github.com/johtani/analyze-api-ui-plugin)です。

**インストール**

Kibanaのプラグインと開発しており、現時点で6.1.2から6.5.1までをサポートしています。  
インストールは次のように行います。バージョン番号が2箇所（ディレクトリとZIPファイル名）に含まれますので、使用するバージョンに合わせて変更してからKibanaのディレクトリで実行してください。

```auto
./bin/kibana-plugin install https://github.com/johtani/analyze-api-ui-plugin/releases/download/6.5.0/analyze-api-ui-plugin-6.5.0.zip

```

インストールして、Kibanaを起動すると、メニューに「Analyze UI」（アイコンがないので、「A」という文字がアイコン）が追加されています。  
「Analyze UI」メニューをクリックすると次のような画面が出てきます。

 ![Screen_Shot_2018-11-27_at_16_00_24|Screen_Shot_2018-11-27_at_16_00_24|690x457](https://us1.discourse-cdn.com/elastic/original/3X/b/c/bcd59a12843e19ceca8d193659634210cc623e86.jpeg)

**最も簡単な使い方**

最も簡単な利用方法は、上記の2箇所に文字列とAnalyzerの名前を入力することです。  
試しに、`These are not the droids you are looking for.`という文字列を`english` Analyzerでトークナイズしたらどうなるかをみてみましょう。「Analyze!」ボタンをクリックすると実行結果が現れます。

 ![Kibana](https://us1.discourse-cdn.com/elastic/original/3X/d/9/d9eefed304d3711888dfb0e6626caa64ded1264b.jpeg)

最初に出てくるのはAnalyzerがTokenizerした結果が表形式で出てきます。  
その下には、KibanaのDevToolsのConsoleで実行できる形式も表示しています。  
このプラグインがインストールされていない環境でも手軽に実行できるようになっています。

**カスタムAnalyzer（自分でAnalyzerを組み立てる）**

では次に、カスタムAnalyzerの結果を見てみるようにしましょう。  
カスタムAnalyzerを使用するには、Textの入力ボックスの下にある「custom\_analyzer」というタブをクリックします。

 ![57](https://us1.discourse-cdn.com/elastic/original/3X/d/5/d5a0cfd1313c092f2aab2dae8f8dfc68aa25d245.png)

まずは、いくつか入力します。カスタムAnalyzer用の入力欄では、`char_filter`、`filter` の入力欄を、入力欄横の`+`または`-`ボタンで増減させることが可能です。  
先ほどの`english` Analyzerと同じ挙動にする組み合わせを入力として設定してあります。  
入力できたら「Analyze!」ボタンをクリックします。

 ![Kibana-3](https://us1.discourse-cdn.com/elastic/original/3X/1/c/1cebfd55e3ed30ce402f91f77de7248113b9f9c8.jpeg)

出力結果が先ほどとは異なる、複数段になっています。`custom_analyzer`のタブでは、指定された`char_filter`、`tokenizer`、`filter`の順番でそれぞれの処理結果を結果に順次表示するような仕組みになっています。  
1段目は`html_strip` char filterの出力結果です。`<em>`タグが除去されているのがわかります。  
2段目は`standard` tokenizerの出力結果です。この段階では、まだ、`lowercase`や`stop` filterなどが適用されていないので、大文字やストップワードが残っています。  
最後の`snowball` filterの出力結果を見ると、先ほどの`english` analyzerと同じ結果になっているのがわかります。  
このように、自分で設定したカスタムAnalyzerについては、それぞれの処理の後にどのようにトークンが変更されているのかというのがわかりやすく表示されます。  
この仕組みを使用することで、皆さんが設定しているAnalyzerが自分が望んだ挙動になっているかが簡単に確認できるわけです。

**トークンの属性情報の表示**

最後に、もう1つだけ便利な機能を紹介します。  
特に`kuromoji` tokenizerやanalyzerを使用するときに便利な機能になります。  
「Analyze!」ボタン横のスイッチ（Show all Token Attrs?）になります。Analyze後にこのスイッチをクリックすると、様々な情報がトークンに付随していることが見て取れる仕組みになります。

 ![Kibana-4](https://us1.discourse-cdn.com/elastic/original/3X/6/0/608fcbcf7ddac2ef0a08173e02292ba82b689b24.jpeg)

スイッチがオフの状態の場合は、「token」（実際の単語）と「position」（何単語目に出現したか？）の2種類のみが表示されていました。  
スイッチをオンにすると、トークンに付随する様々な情報が全て表示されます。  
この属性情報は、TokenizerやFilterによって追加される情報です。  
Kuromojiでは、`baseForm`（基本形の単語。例では、「食べ」という単語の辞書にある基本形は「食べる」であることがわかる）や、`partOfSpeech`（品詞情報）、`reading`（読み）などがあることがわかります。  
これらの情報を利用して、品詞による不要な単語の除去や、基本形を採用して表記揺れに対応するなどの検索の改善が行えます。

**まとめ**

簡単ですが、[Analyze API](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-analyze.html)の紹介と[Analyze UI プラグイン](https://github.com/johtani/analyze-api-ui-plugin/blob/master/docs/GETTING_STARTED.md)の紹介でした。  
UI自体はAnalyze APIが持っている機能をGUIでわかりやすくしたものです。  
うまく検索文字列がデータに対してヒットしない場合などに、Analyzerがどのように単語に区切っているかを理解していただくための助けになればと思います（ゆくゆくはKibana本体のDevToolsなどに取り込む予定です）。

バグなどを見つけた際は、GitHubへIssue登録をお願いいたします！

---

<div class="post-metadata">

**Author:** ![warkolm](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/warkolm/32/39224_2.png) [@warkolm](https://discuss.elastic.co/u/warkolm)\
**Post date:** [December 1, 2019, 10:36pm UTC](https://discuss.elastic.co/t/dec-2nd-2018-jp-elasticsearch-analyze-ui-analyzer/158286/2 "2019-12-01T22:36:17Z")

</div>


