LoginSignup
15
2

More than 3 years have passed since last update.

AWS Elasticsearch service ではユーザー辞書の登録ができない

Last updated at Posted at 2019-11-25

タイトルの通りです。
サービスで AWS Elasticsearch service の利用を検討している方は注意してください。

ユーザー辞書ってなに?

Elasticsearchをあまり知らない人向けに説明しますと、文章を検索可能にする際には形態素解析を行います。
ElasticsearchにおいてはKuromojiというアナライザーを用いてこれを行いますが、これには辞書データが必要なのです。

例えば、

すもももももももものうち

上記の文章は次のように分解できます。

すもも も もも も もも の うち

アナライザーがすももももを認識して分解するためには、これらの単語を知っている必要があります。
このデータソースが辞書データと呼ばれる物です。

あなたが考えている検索が、インターネット上に散らばる最新の単語を含むような場合、
あなたは最新の辞書データを作りつづけ、それをアナライザーの辞書データとして登録する必要があります。

AWS Elasticsearch service はこれができません

じゃあどうすればいいの?

選択肢1: 自分でクラスターを構成する

AWSのマネージドElasticsearch serviceを使わず、EC2でElastciseachを構成します。
マネージドではない分管理が大変になりますが、その分対応していないElasticsearchのバージョンが利用できたり、ユーザー辞書の登録ができたりと自由を得られます。

選択肢2: N-gramを併用する

辞書データを作成することはそもそも大変です。
次々に生まれる日本語の造語に対応しようとすると、N-gramが選択肢に挙がってきます。
N-gramとは、文章をn個の文字で分割する方法です。必ずしも目的の単語で分割できるとは限りませんが、辞書にない単語でも検索できることがあります。

マッピングの設定では次のように設定することで、KuromojiとN-gramで分割したデータを定義できます。

textforsearch:
    type: text
    analyzer: kuromoji
    copy_to: textforseach_ng
textforsearch_ng:
    type: text
    analyzer: ja_ngram

検索の際はtextforsearchtextforsearch_ngを検索対象に設定することで、ある程度検索を改善できるでしょう。
私が過去に開発に参加したサービスでは、この方法を用いてSNSサービスのインデックスを作成しています。
感想としては、特に問題ない印象です。

終わりに

Elasticsearch service でユーザー辞書が使えない件については、いろんな解説記事でわずかに書かれている程度でしたので、思いっきり啓蒙のために書いておきました。

AWSの人にも確認しましたが、申し訳ないが辞書登録出来ないんですごめんなさい! って言ってました。
散々利用できるようにしてほしいという声はあるようなので、いつか対応することを願います。

利用を検討している人に届くことを願う。

参考資料

Elasticsearch の Kuromoji でユーザー辞書を使う
https://qiita.com/kijtra/items/d391179e1ea0be65e3f5

N-gramを作る
https://qiita.com/kazmaw/items/4df328cba6429ec210fb

Elasticsearchの辞書・同義語を調整して『築地銀だこ』の検索をカスタマイズした
https://blog.rista.jp/entry/2018/03/27/100100

15
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
2