LoginSignup
21
18

More than 5 years have passed since last update.

よく使うElasticSearchのクエリ(データ取得)

Last updated at Posted at 2017-10-27

ElasticSearchは、マニュアル(英語)がしっかりしてるので、そっちを参考にしてください。
マニュアル(本家):https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

とりあえず、理解しやすく、MySQLのSQL文と比較しながら、まとめます。

環境

  • CentOS 7.1
  • ElasticSearch 5.6.2
    ※ElasticSearch 6.xでは、curlに「 -H 'Content-Type: application/json'」を付ける必要があります。

目次

データ取得

タイプだけを削除することができないので、ElasticSearchとしては、インデックスとタイプは1対1にする方が良い(?)。
基本、クエリを投げるときは、タイプを省略する。

※下記のクエリについては、タイプを「hoge_type」とする。

■ Bool Queryについて

Elasticsearch 2.0からandクエリとorクエリは全部非推奨になり、その代わりにboolクエリの方が推奨されます。Boolクエリは複数のクエリを組み合わせる(つまりAND、OR、NOTで結合)のに使います。

クエリ 説明
must ANDとして使います。小クエリは総合スコアに影響を与えます。
filter mustと同じくANDです。ただし、スコアは無視されます(総合スコアに影響を与えません)。
should ORとして使えます。 minimum_should_matchパラメータで最低マッチする条項の数が指定できます。
must_not NOTです。

■ レスポンスの体裁を整える

通常、レスポンスは、inlineのJSONで出力されるが、prettyパラメータを付けると、体裁を整えて出力される。

  • prettyパラメータを付けない場合
elasticsearch
$ curl -XGET http://localhost:9200/hoge_index/_search
{"took":0,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":0,"max_score":null,"hits":[]}}
  • prettyパラメータを付けた場合
elasticsearch
$ curl -XGET http://localhost:9200/hoge_index/_search?pretty
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 0,
    "max_score" : null,
    "hits" : [ ]
  }
}

■ 条件指定しないでデータ取得

全件取得するが、デフォルト30件しかとってこない。

elasticsearch
curl -XGET http://localhost:9200/hoge_index/_search
MySQL
SELECT * FROM `hoge_index` . `hoge_type`

■ 開始位置(offset)と取得件数(limit)の指定

elasticsearch
curl -XGET http://localhost:9200/hoge_index/_search?from=5&size=1
MySQL
SELECT * FROM `hoge_index` . `hoge_type`
LIMIT 5, 1, 

■ ランダムで取得する

elasticsearch
curl -XGET 'http://localhost:9200/hoge_index/_search?size=1' -d '{
  "query": {
    "function_score" : {
      "query" : { 
        "match_all": {}
      },
      "random_score" : {}
    }
  }
}'
MySQL
SELECT * FROM `hoge_index` . `hoge_type`
ORDER BY rand()
LIMIT 0, 1, 

■ 複雑な条件を指定してデータ取得(その1)

ごめんなさい。あとで記述します。

elasticsearch

MySQL

参考

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