Elasticsearch 基本的なQuery
KibanaのDev Tools上のconsoleから実行できます。
- Elasticsearch
- 7.4.2
- Kibana
- 7.4.2
Term-level queries
検索キーワードに完全一致するフィールドを検索する際に利用するクエリです。文字列の完全一致、日付の範囲、数値の検索などに利用できそうです。
また、文字列の完全一致に利用する場合は、keyword
型でフィールドを作成します。
text型ではアナライザによって単語の分割が行われて転置インデックスが形成されるが、keyword型では、アナライザによる単語の分割が行われません。
term
指定されたフィールドの値と完全一致するドキュメントを取得する https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-term-query.html
GET /blog_test/_search { "query": { "term": { "id": { "value": "id1" } } } }
terms
term
クエリと同様の検索で、valueを複数指定して完全一致するドキュメントを取得する。SQLのIN句のイメージでしょうか。なお、デフォルトの最大terms数は、65,536
個とのことです。
https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-terms-query.html
GET /blog_test/_search { "query": { "terms": { "id": ["id1", "id2"] } } }
range
指定された範囲内の値を持つドキュメントを取得する https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-range-query.html
GET /blog_test/_search { "query": { "range": { "age": { "gte": 10, "lte": 20 } } } }
この例だとage
が10以上20以下を取得するクエリとなる。なお、大小関係の表現としては以下を利用することができる。
- gt
- 〜より大きい
- gte
- 〜以上
- lt
- 〜より小さい
- lte
- 〜以下
ids
指定されたドキュメントIDに合致するドキュメントを取得する。 https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-ids-query.html
GET /blog_test/_search { "query": { "ids": { "values": ["1", "3"] } } }
prefix
指定されたプレフィックスを含むドキュメントを取得する
https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-prefix-query.html
GET /blog_test/_search { "query": { "prefix": { "id": { "value": "id" } } } }
wildcard
指定されたワイルドカードパターンに一致するドキュメントを取得する。SQLのLike検索のイメージでしょうか。
https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-wildcard-query.html
GET /blog_test/_search { "query": { "wildcard": { "id": { "value": "id*" } } } }
Full text queries
検索キーワードで全文検索を実行します。転置インデックスに対しての検索となるので、検索対象のフィールドはtext
型で作成します。
なお、指定されたキーワードもインデクシング時同様に分割(Analyzer)されて一致条件に利用されます。
match
指定されたキーワードに一致するドキュメントを取得する。オペレーター(ANDとかOR)を変更したり、 キーワードのAnalyzerをインデクシング時と異なるものを指定することもできる。詳細は以下のドキュメントを参照。 https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-match-query.html
GET /blog_test/_search { "query": { "match": { "name": { "query": "名前 太郎" } } } }
名前
または太郎
がname
フィールドに含まれるドキュメントが取得される。
match phrase
指定されたキーワードが、指定された語順に一致するドキュメントを取得する。
https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-match-query-phrase.html
GET /blog_test/_search { "query": { "match_phrase": { "name": { "query": "名前 太郎" } } } }
名前
、太郎
の語順でname
フィールドに一致するドキュメントが取得される。