📝

Elastic Cloudでkuromojiを使うための設定方法

2021/09/22に公開

インデックスを作成してからでないと設定ができないようで、ポイントはインデックスを一度Closeしてからでないと400エラーが返ってきて設定できないこと。Index Management画面で「Edit Setting」でSaveを押して無反応(ブラウザコンソールに400エラーが出ている)となって保存できない。

各設定画面はこちらの案内図を参照してくれ。
https://zenn.dev/maztak/articles/a54dc9f07df59f

①ICUとKuromojiプラグインをオンに

Kibanaではなく、Elastic CloudのDeployment画面まで戻って、Edit画面のElasticsearchの右上にある「Edit user settings and plugins」からICUとKuromojiの2プラグインを追加する。

②インデックスをCloseする


インデックスがON(検索できる状態?)のままでは設定変更ができない(400エラーが返ってくる)ため、Index Management画面で一度Closeする。

You can only define new analyzers on closed indices.
To add an analyzer, you must close the index, define the analyzer, and reopen the index.
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-update-settings.html

③Kuromojiの設定をPUT

Dev Toolsから


Dev Tools(もしくはDeployment画面のAPI Console)から設定をPUT。

PUT your-index-name
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "kuromoji_normalize": {                 
            "char_filter": [
              "icu_normalizer"                    
            ],
            "tokenizer": "kuromoji_tokenizer",
            "filter": [
              "kuromoji_baseform",
              "kuromoji_part_of_speech",
              "cjk_width",
              "ja_stop",
              "kuromoji_stemmer",
              "lowercase"
            ]
          }
        }
      }
    }
  }
}

設定内容は以下の公式のもの。
https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-kuromoji-analyzer.html#kuromoji-analyzer-normalize-full-width-characters

こちらの公式ブログも参考になるかもしれない(ただし1つのユースケース用にuser_dictionary_rulesynonimの個別設定がされたJSONなので注意)
https://www.elastic.co/jp/blog/how-to-implement-japanese-full-text-search-in-elasticsearch

Index Management画面から

IndexをCloseしたあと、そのままEdit Settingsで設定する方法もある。Dev Toolsを使用した時に「already exist」とエラーで設定できない場合があったので、以下を追記するとうまくいったようだ。

"index.analysis.analyzer.kuromoji_normalize.char_filter": [
	"icu_normalizer"
],
"index.analysis.analyzer.kuromoji_normalize.tokenizer":"kuromoji_tokenizer",
"index.analysis.analyzer.kuromoji_normalize.filter": [
	"kuromoji_baseform",
	"kuromoji_part_of_speech",
	"cjk_width",
	"ja_stop",
	"kuromoji_stemmer",
	"lowercase"
]

Saveを押してもSuccessfullyと出ず何も怒らない場合は、ブラウザのConsoleにエラーメッセージが表示されている(画面上で表示してくれメンス)。

④インデックスをONに戻す


ONに戻すだけで適用される‥はず。Settingsで確かにkuromojiの設定が適用されていることが確認できる。

RefreshやFlush,Freezeなどいろんな操作があるがこれはanalyzerの設定反映には関係しないよう。
https://www.elastic.co/guide/en/elasticsearch/reference/7.14/index-mgmt.html

これでうまくいくはず。注意点としてDiscover画面で検索したものは実際の検索結果とは違うようなので、Reactivesearchなどを使って自前の検索UIを準備して確認するか、Dev Tools(API Console)でGET your-index-name/_searchを使って確かめてみるしかないみたい。

まとめ

Elasticさん、初見殺しすぎ。

Discussion