ElasticsearchでMySQLのLIKE検索ぽいものを実現
はじめに
Elasticsearchを使って全文検索システムを作る機会がありました。
そのとき、MySQLの %HOGE%
と同様の検索をすることが必要な場面がありハマってました。
色々試行錯誤して実現した結果を、自分と同じようなことを行いたい人がいるかもしれないのでメモとして残しておきます。
Elasticsearch & 検索システム初心者なので間違ったことなどあったら、教えてほしいです。
環境
- Amazon Elasticsearch Service (ver 2.3)
注意
- Amazon Elasticsearch Service と Elastic社のElasticsearch は別物です。
- あくまでLIKE検索もどきである完全に同じ検索が行えるわけではありません。
- 困ったときはElastic社のリファレンスを見てください。リファレンス
検索の仕方
N-gram analyzer
と match_phrase
を用いて検索します。
{ " query" : { "match_phrase" : {"field_name" : "keyword" } } }
N-gramのfiledを作る方法は、他の記事などで詳しく解説されているので省きます。
このように、 N-gram
と match_phrase
を組み合わせるとLIKE検索もどきが実現できます。