ElasticsearchでMySQLのLIKE検索ぽいものを実現

はじめに

Elasticsearchを使って全文検索システムを作る機会がありました。 そのとき、MySQL%HOGE% と同様の検索をすることが必要な場面がありハマってました。 色々試行錯誤して実現した結果を、自分と同じようなことを行いたい人がいるかもしれないのでメモとして残しておきます。 Elasticsearch & 検索システム初心者なので間違ったことなどあったら、教えてほしいです。

環境

  • Amazon Elasticsearch Service (ver 2.3)

注意

  • Amazon Elasticsearch ServiceElastic社のElasticsearch別物です。
  • あくまでLIKE検索もどきである完全に同じ検索が行えるわけではありません。
  • 困ったときはElastic社のリファレンスを見てください。リファレンス

検索の仕方

N-gram analyzermatch_phrase を用いて検索します。

{
    " query" : {
        "match_phrase" : {"field_name" : "keyword" }
    }
}

N-gramのfiledを作る方法は、他の記事などで詳しく解説されているので省きます。 このように、 N-grammatch_phrase を組み合わせるとLIKE検索もどきが実現できます。