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
参考
- elasticsearch-php documents
- https://developers.eure.jp/tech/elasticsearch_search_query/ (search query)
- http://qiita.com/jtodo/items/be053be4aa704e6c57d0 (複雑なsearch query)
- http://qiita.com/vanhuyz/items/04a6871ae5f53ba5a97f (複雑なsearch query)
- http://qiita.com/jtodo/items/be053be4aa704e6c57d0 (Group By)
- https://qiita.com/kieaiaarh/items/5ea4e8a188bd9814000d (SQLと対比)
- http://x1.inkenkun.com/archives/487
- https://qiita.com/vanhuyz/items/04a6871ae5f53ba5a97f (bool queryについて)