21
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ElasticSearchでSynonymTokenFilterを設定してみる

Posted at

概要・背景

最近の若者は、本田翼をばっさーとかって略すらしい。
ホンツバとかって略したくなるのは自分だけでしょうか?

どっちでもいいですが、検索エンジン的には、
本田翼も、ホンツバも、ばっさーも、同じ結果を返して欲しいですよね?
もちろん、検索システムを含むサービスの運営側としては、同じ結果を返したいですよね?

ジョブメドレーではElasticsearchを使っているので、それをうまくチューニングしたというお話。

ElasticSearchについて理解する

Elasticsearchについて無知過ぎたので、そもそもまずは概形を学ぶところからスタート。
以下は、勉強に使った一部の資料。

わかったこと(今回はこれだけ知っていれば、行ける)

  • データからインデックスを作成して、検索時にクエリを発行して検索する
  • アナライザーは、Toknizerでパースされ、Filterで整理される
  • アナライザーは、インデックス作成用と検索用がある

Ruby on Railsに組み込む

今回、組み込むにあたり、「辞書は定期的にいれかえる必要がある」という要件があった。
そのため、辞書更新の度に、インデックスをすべて更新するのはコストが高いので検索時のanalyzerだけ設定することにした。

辞書ファイルの作成

辞書ファイルの書き方は、大まかに3種類ある。

https://www.elastic.co/guide/en/elasticsearch/reference/1.4/analysis-synonym-tokenfilter.html
を参考に

config/search.txt
# 下記の用に=>を使うとマッピングされ
# ばっさーと検索すると、本田翼の結果が引っかかる
# ※「ばっさー」の結果は引っかからない
ばっさー => 本田翼

# 下記のようにカンマ(,)でつなげると
# 本田翼やばっさーで、検索すると
# 本田翼とばっさーとほんつばで検索した結果がすべて出る
ばっさー,本田翼,ほんつば

# 複数指定もできる
ばっさー=>ほんつば,本田翼

# 上書き方式ではなく、追加方式
# 下記の例は ばっさー=>ほんつば,本田翼と同じ
ばっさー=>ほんつば
ばっさー=> 本田翼

※追加終わったら、elasticsearchを再起動する

Elasticsearch-inquisitorを使って、実際できているかを見る

http://blog.johtani.info/blog/2013/09/23/intro-elasticsearch-inquisitor/
で紹介されているElasticsearch-inquisitorを使い、実際に検索クエリの単語がうまく解釈されているかを確認する。
※Elasticsearchがきちんと再起動されていることを確認する

検索側のクエリにanalyzerを指定する

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html
を見るとanalyzer: The analyzer name used to analyze the query string.というのがあるので、

{
    'query_string' : {
        'default_field' : 'content',
        'default_operator': 'AND',
        'query' : 'ばっさー',
        'analyzer' : 'search_analyzer',
    }
}

これで検索できる

まとめ

  • elasticsearchで類似語検索する場合は、Synonym Token Filterを使う
  • 基本的には、filterを設定しanalyzerを書いて、elasticsearchを再起動する
  • query string queryを使い、analyzerを設定し検索する

以上

21
20
0

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
21
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?