ore88ore memo

プログラミング関連のTipsをメインに書いていきます。どなたかのお役に立てれば幸いです。

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フィールドに一致するドキュメントが取得される。