decochのブログ

フリーランスのiOSエンジニア decoch のブログです

Elasticsaerchでサジェスト検索を作ってみよう

目次

  • Elasticsearch の説明
  • 検索の基礎知識
  • サジェスト検索をやってみる
  • まとめ

Elasticsearchとは

Elastic社が開発している全文検索エンジンで、リアルタイムデータ分析、ログ解析、全文検索など様々な用途に使われています。

検索の基礎知識

Elasticsearchでは保存されている文書の文字と、検索ワードで与えられた文字列がマッチしたら検索結果に含まれます

たとえば、

this is a test

というデータがあった場合、

this / is / a / test

と分解されるので、 thisisatest で検索するとこのデータが返ってきます。

サジェスト検索をやってみる

上の設定のままだと tth という検索ワードではデータが返ってこないためサジェスト検索を実現することができません。

そこで文章の解析方法を指定するTokenizerの設定を変更します。

今回は、thist th のように単語をより詳細に分割をする必要があります。 そのためには、ngramedge_ngram という Tokenizer があるので見ていきましょう。

ngram は、以下の様に単語を1~2文字に分割してくれます。

t th h hi i is s / i is s / a / t te e es s st t

edge_ngram は、以下の様に文字を分割してくれます。

t  th thi this / i is / a / t te tes test

こうすることで、tth と入力したタイミングで結果を返すサジェスト検索を実現することができます。

www.elastic.co

www.elastic.co

まとめ

  • Elasticsearch は様々な用途に使われている検索エンジン
  • Tokenizerが分割したTokenに当てはまる文字とInputが一致すると検索結果に含まれる
  • サジェスト検索をするためには単語単位ではなく、文字数ベースで文章の分割をする必要がある