ElasticSearch の検索クエリーで必要な情報を取り出す。

こんにちは yoshi です。

今回は ElasticSearch(ES)での検索クエリーについて記述します。
LessonTimeでは検索の高速化でリアルタイムな検索ができるようにESを使ってます。

Elasticsearch-kopf を使ってます。

見た目はこんなにシンプル。カスタマイズももっとできます。

ESはRESTを用いて, GET, PUT, POST, DELETEが可能です。
今回は検索をするのでGETを使うのですが、POSTメソッドを使うとより複雑な検索が可能なのでこちらを試してみます。

検索するときのURLはデフォルトで

# GET
/_search

となっているので、例えばchatの中身を探したいときはのように

# GET
/chat/_search

のようにフォルダを指定します。 このままGETをすると1143件見つかりました。

もちろんパラメーターを渡すことが可能なので

# GET
/chat/_search?q=hey

とすると、"hey"と記述されたものを見れます。8件になりました。

複雑な検索をする。

検索の仕方は公式ドキュメントにもちろん書いてあります。

試しにmessageに"hey pierre"と含まれているものを検索すると

# POST
/chat/_search
# query
{
  "query": {
    "match": {
      "message": "hey pierre"
    }
  },
  "sort": {
    "created": {
      "order": "asc"
    }
  }
}

となり9件見つかりました。

matchの代わりにmatch_phraseを使うと完全一致のものだけ取り出せます。

# query
{
  "query": {
    "match_phrase": {
      "message": "hey pierre"
    }
  },
  "sort": {
    "created": {
      "order": "asc"
    }
  }
}

1件に絞ることができました。

いろんな検索ができるので色々試してみたいですね!