探究ES中的must和should

一、must查詢

使用must查詢可以篩選出同時符合多個條件的文檔,相當於邏輯上的“與”操作。下面是一個例子:

POST /_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "elasticsearch" }},
        { "match": { "content": "search" }}
      ]
    }
  }
}

上述查詢的意思是,要同時匹配”title”字段中包含”elasticsearch”和”content”字段中包含”search”的文檔,才會被返回。

此外,must查詢還可以用於排除一些文檔。例如,我們可以使用must_not來篩選出不包含指定關鍵詞的文檔:

POST /_search
{
  "query": {
    "bool": {
      "must": {
        "match": { "content": "elasticsearch" }
      },
      "must_not": {
        "match": { "title": "logstash" }
      }
    }
  }
}

上述查詢的意思是,要匹配”content”字段中包含”elasticsearch”並且”title”字段中不包含”logstash”的文檔才會被返回。

二、should查詢

使用should查詢可以查找同時符合多個條件之一的文檔,即邏輯上的“或”操作。下面是一個例子:

POST /_search
{
  "query": {
    "bool": {
      "should": [
        { "match": { "title": "elasticsearch" }},
        { "match": { "content": "search" }}
      ]
    }
  }
}

上述查詢的意思是,要匹配”title”字段中包含”elasticsearch”或”content”字段中包含”search”的文檔,都會被返回。

在should查詢中,我們也可以指定一個minimum_should_match參數,表示至少要匹配多少個查詢條件才會被返回。例如:

POST /_search
{
  "query": {
    "bool": {
      "should": [
        { "match": { "title": "elasticsearch" }},
        { "match": { "content": "search" }}
      ],
      "minimum_should_match": 1
    }
  }
}

上述查詢的意思是,要匹配”title”字段中包含”elasticsearch”或”content”字段中包含”search”的文檔,但至少要滿足一個條件才會被返回。

三、must和should聯合查詢

在實際應用場景中,我們經常需要同時篩選出滿足多個條件之一的文檔,同時排除一些不符合要求的文檔。這時候,就可以使用must和should聯合查詢,如下所示:

POST /_search
{
  "query": {
    "bool": {
      "must": {
        "match": { "content": "elasticsearch" }
      },
      "should": [
        { "match": { "title": "logstash" }},
        { "match": { "title": "kibana" }}
      ],
      "must_not": [
        { "match": { "title": "redis" }}
      ]
    }
  }
}

上述查詢的意思是,要匹配”content”字段中包含”elasticsearch”並且”title”字段中至少滿足一個條件,同時不匹配”title”字段中包含”redis”的文檔才會被返回。

四、總結

在ES中,使用must查詢可以篩選出同時符合多個條件的文檔,而使用should查詢可以查找同時符合多個條件之一的文檔。兩者結合使用,可以更加精細地組合查詢條件,滿足不同的實際需求。

原創文章,作者:KDNMA,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/361166.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
KDNMA的頭像KDNMA
上一篇 2025-02-24 00:34
下一篇 2025-02-24 00:34

相關推薦

  • Spark集成ES開發

    本文將介紹如何使用Spark集成ES進行數據開發和分析。 一、系統概述 Spark是一個基於內存的分布式計算系統,可以快速地處理大量數據。而ES(ElasticSearch)則是一…

    編程 2025-04-28
  • Helm部署ES CrashLoopBackOff

    如果你在使用Helm部署ES時遇到CrashLoopBackOff問題,那麼本文將對這一問題進行詳細解答。我們將從以下方面進行闡述: 一、問題分析與定位 在使用Helm部署ES時,…

    編程 2025-04-27
  • 深入理解ES updateByQuery

    近年來,ElasticSearch已成為許多公司進行數據處理、存儲和查詢的首選。updateByQuery就是其中一個非常重要的API之一。updateByQuery,作為ES提供…

    編程 2025-04-25
  • ES 聚合查詢詳解

    一、聚合查詢基礎概念 ES 聚合查詢是一種統計、分組和過濾數據的方式,通過對文檔中的字段進行聚合操作,實現對數據的統計分析。在 ES 中,聚合查詢主要有以下幾個概念: 聚合:對文檔…

    編程 2025-04-23
  • ES詳解

    一、變量 在ES中,使用var / let / const定義變量。其中,var是定義變量的一種方式,它有着很多缺陷。let語句聲明一個塊級作用域的本地變量,var語句聲明一個函數…

    編程 2025-04-23
  • ES修改字段類型詳解

    一、需求概述 ES修改字段類型是指在已有的索引中,通過特定的操作方式將某個字段的類型修改為其它類型。當ES在建立索引的時候,已經確定好了每個字段的類型,而如果在建立後發現類型不符需…

    編程 2025-04-13
  • 查看ES集群狀態

    ES(Elasticsearch)是一個基於Lucene搜索引擎的分布式開源搜索和分析引擎。ES集群狀態是指集群的健康狀況、節點狀態、分片狀態等。在運維過程中,了解ES集群狀態是必…

    編程 2025-04-12
  • ES中添加字段的方法

    在使用ES過程中,添加字段是一項常見的操作。本文將就ES添加字段,從以下幾個方面詳細闡述: 一、通過PUT命令添加字段 PUT命令是ES中的索引API,可以用來創建、修改索引,也可…

    編程 2025-04-12
  • OpenSL ES在多媒體應用開發中的應用

    一、OpenSL ES介紹 OpenSL ES是指Open Sound System for Embedded Systems,是一種開放式、跨平台的、低延遲的音頻編程接口,主要用…

    編程 2025-02-25
  • 深入了解ES字段類型

    ES(Elasticsearch)是一個基於Apache Lucene的分布式、RESTful的開源搜索引擎。在使用ES處理數據時,字段類型是一個至關重要的概念。字段類型決定了如何…

    編程 2025-02-24

發表回復

登錄後才能評論