ElasticSearch -- フィルタ クエリ

フィルタ クエリ

序章

正確には、ES クエリ操作は查询(query)との 2 つのタイプに分けられます过滤(filter)

  • クエリは、以前に使用したクエリ クエリです. これ (クエリ) は、返された各ドキュメントのスコアをデフォルトで計算し、スコアに従って並べ替えます.
  • フィルタ クエリ: 最初に条件に一致するドキュメントを除外し、スコアを計算せず、ドキュメントをキャッシュできます。

アプリケーション シナリオ:

  • フィルタリングは大規模なデータのフィルタリングに適しており、クエリはデータを正確に照合するのに適しています。
  • 通常の状況では、最初にフィルター操作を使用してデータの一部を除外し、次にクエリを使用してデータを正確に照合して、クエリの効率を向上させる必要があります。

[外部リンクの画像転送に失敗しました。ソース サイトにアンチリーチング メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-vcvkdWGm-1655972090887)(ElasticSearch.assets/image-20211101113527794.png)]

使用

  • フィルター クエリは bool クエリと一緒に使用する必要があります
GET /ems/emp/_search
{
  "query": {
    "bool": {
      "must": [
        {"match_all": {}} //查询条件
      ],
      "filter": {....} //过滤条件
  }
}

知らせ:

  • フィルタとクエリを実行するときは、最初にフィルタを実行してからクエリを実行します
  • Elasticsearch は、頻繁に使用されるフィルターを自動的にキャッシュして、パフォーマンスを高速化します。

タイプ

用語と用語

term は指定されたフィールドのキーワードをフィルタリングし、term は複数のキーワードをフィルタリングして指定できます

GET /person/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "filter": [
        {
          "term": {
            "sign": "聪明"
          }
        }
      ]
    }
  }
}
GET /person/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "filter": [
        {
          "terms": {
            "sign": [
              "聪明",
              "愚蠢"
            ]
          }
        }
      ]
    }
  }
}

範囲

指定されたフィールドの値の範囲をフィルタリングします

GET /ems/emp/_search
{
  "query": {
    "bool": {
      "must": [
        {"term": {
          "name": {
            "value": "黄凯宇"
          }
        }}
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 7,
            "lte": 20
          }
        }
      }
    }
  }
}

存在フィルター

指定されたフィールドが空でないドキュメントをフィルター処理する

GET /ems/emp/_search
{
  "query": {
    "bool": {
      "must": [
        {"term": {
          "name": {
            "value": "中国"
          }
        }}
      ],
      "filter": {
        "exists": {
          "field":"aaa"
        }
      }
    }
  }
}

ID フィルター

指定された ID 配列でドキュメントをフィルター処理します

GET /ems/emp/_search
{
  "query": {
    "bool": {
      "must": [
        {"term": {
          "name": {
            "value": "中国"
          }
        }}
      ],
      "filter": {
        "ids": {
          "values": ["1","2","3"]
        }
      }
    }
  }
}

おすすめ

転載: blog.csdn.net/qq_50596778/article/details/125429348