クエリ操作
基本型
$ curl -XGET 'http://localhost:9200/<インデックス名>/_search'
パラメータ指定 (Query String)
$ curl -XGET 'http://localhost:9200/<インデックス名>/_search?q=<フィールド名>:<検索ワード>'
クエリDSL
$ curl -XGET 'http://localhost:9200/<インデックス名>/_search' -H 'Content-Type: application/json' -d '<クエリDSL>'
DSLシンタックス
{ "query": {<クエリ内容>}, "from": 0, "size": 10, "sort": [<検索結果のソート指定>], "_source": [<検索結果として返すフィールド名>] }
- query クエリ内容とするJSONオブジェクト
- from / size 所謂、offset/limit。 default 0/10
全文検索クエリ
match_all
総scan
{ "query": { "match_all": {} } }
match
フィールド名:検索ワード
で指定。検索ワードは空白で区切ることで「OR」検索となる。
{ "query": { "match": { "message": "Elasticsearch world" } } }
また、operatorを指定することで「AND」で検索することもできる。
{ "query": { "match": { "message": { "query": "Elasticsearch world", "operator": "and" } } } }
N個以上のキーワードが含まれる。という指定
{ "query": { "match": { "message": { "query": "Elasticsearch world", "minimum_should_match": 2 } } } }
match_phrase
matchに指定した語順の並び順までをチェックする
{ "query": { "match_phrase": { "message": "Elasticsearch world" } } }
Termクエリ (完全一致)
keywordフィールドに対して使用する。
{ "query": { "term": { "user_name": "John Smith" } } }
Termsクエリ いずれかが完全一致するか?の検索
{ "query": { "terms": { "user_name": ["John Smith", "Terry Man"] } } }
Rangeクエリ
日付型や数値型の範囲検索を行う。
{ "query": { "range": { "date": { "gte": "2017-10-14T15:09:45", "lte": "2017-10-16T15:09:45" } } } }
date型はシステム日付と日付計算式が使用できる。
- now
- y 年
- M 月
- w 週
- d 日
- h 時
- m 分
- s 秒
一週間前までのデータを検索
{ "query": { "range": { "date": { "gte": "now-1w" } } } }
boolクエリ
- must すべての式を満たす必要がある
- should いずれかの式、またはminimum_should_match数のを満たす必要がある。
- must_not この式を満たすドキュメントは除外する
- filter スコアに関係なく式に一致したドキュメントを返す 検索範囲を限定したり、スコアが必要ないクエリであれば高速に動作する
{ "query": { "bool": { "must":[ {"match": {"message": "elasticsearch"} }, {"term": {"user_name": "John Smith"} } ], "should":[ {"match": {"message": "world"} }, {"term": {"user_name": "Terry man"} } ], "must_not": [ {"match": {"message": "Haskell"} } ] } } }
sort
{ "query": { "match_all": {} }, "sort": [ { "date": {"order": "desc"} }, "_score" ] }
配列は集約結果でsortすることができる
{ "query": { "match_all": {} }, "sort": [ { "dayoff": {"order": "desc", "mode": "avg"} } ] }
- avg
- min
- max
- sum
- median
リンク