🙆♀️
ElasticsearchのQueryの書き方
ElasticsearchのQueryの書き方
- 概念
-
Document
- Elasticsearchの中に保存されるJSONオブジェクト(databaseのtableの行)
-
Index
- 関連性を持つJSONオブジェクトのグループ(databaseのTable)
-
Queryの書き方
- フォーマット
GET INDEX_NAME/_search
{
"query": {
query_clauses
}
}
-
query_clauses
-
match
- 単語のマッチング、headlineのフィールドで三つの単語
Shape
of
you
の任意が出る場合はマッチングと思うわれるGET headlines/_search { "query": { "match": { "headline": "Shape of you" } } }
-
"operator": "and"
或いは"minimum_should_match": 2
を追加して、任意の単語のマッチングではなく、全ての単語のマッチング或いは2個以上の単語のマッチングができるGET headlines/_search { "query": { "match": { "headline": "Shape of you" "operator": "and" } } }
- 単語のマッチング、headlineのフィールドで三つの単語
-
multi-match
- 複数のフィールドで単語
party
,planning
の任意のマッチング / phraseのマッチング("type": "phrase"
)-
^2
のような書き方でフィールドのWeightの指定が可能、headline
のフィールドでparty
,planning
が出ると、他のフィールドで出るより、検索の結果のもっと前に並べる
GET headlines/_search { "query": { "multi_match": { "query": "party planning", "fields": ["headline^2","short_description", "authors"], "type": "phrase" } } }
-
- 複数のフィールドで単語
-
match_phrase
- フレーズのマッチング、headlineのフィールドで
Shape of you
を全て、同じ順で、連続で出ると、マッチングと思うわれる- マッチングである
- XXX shape of you XXX
- XXX shape, of you XXX
- マッチングではない
- XXX Shape of XXX you XXX
GET headlines/_search { "query": { "match_phrase": { "headline": "Shape of you" } } }
- マッチングである
- フレーズのマッチング、headlineのフィールドで
-
bool query
- bool queryを使って、以上のquery clausesを組み合わせることができる
- フォーマット
GET headlines/_search { "query": { "bool": { "must": [ { "multi_match": { "query": "Harry Potter", "fields": ["headline^2","short_description", "authors"] } } ], "must_not": [ { "match": { "category": "WEIRD NEWS" } } ], "should": [ { "match": { "category": "ARTS & CULTURE" } }, { "match_phrase": { "category": "ENTERTAINMENT" } } ], "filter": [ { "range": { "date": { "gte": "2014-03-25", "lte": "2016-03-25" } } } ] } }, "size": 200 }
- must
- 全てをマッチングする(AND)、Scoreに影響がある
- should
- 任意をマッチングする(OR)、Scoreに影響がある
- filter
- 全てをマッチングする(AND)、Scoreに影響なし
- must_not
- 全てをマッチングしない
-
-
Paging(ページング)
-
size
とfrom
を指定する、SQLのlimit
とoffset
に似てる
GET headlines/_search { "query": { "multi_match": { "query": "party planning", "fields": ["headline^2","short_description", "authors"], "type": "phrase" } }, "size": 2, "from": 2, "track_total_hits": true }
-
Discussion