国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Elasticsearch】 10-DSL語法詳解-復合查詢bool(must、should、must_not、filter)

這篇具有很好參考價值的文章主要介紹了【Elasticsearch】 10-DSL語法詳解-復合查詢bool(must、should、must_not、filter)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Elasticsearch中的bool查詢詳解

Elasticsearch是一個強大的搜索引擎,它提供了豐富的查詢功能,以幫助你從大規(guī)模數(shù)據(jù)集中檢索相關的文檔。在Elasticsearch中,bool查詢是一個非常重要和強大的工具,它允許組合多個查詢子句,以構建復雜的查詢邏輯。在本篇文章中,我們將深入探討bool查詢,包括其概述、參數(shù)、各個子句的詳解以及多子句嵌套的示例。

1. bool語法概述

bool查詢是Elasticsearch中的布爾查詢,它允許組合多個查詢條件以過濾和排序文檔。bool查詢有四個主要子句:

  • must:所有的查詢子句都必須匹配,類似于"AND"操作。
  • should:至少一個查詢子句必須匹配,類似于"OR"操作。
  • must_not:查詢子句不應該匹配,類似于"NOT"操作。
  • filter:與must相似,但不會影響查詢的相關性得分。

bool查詢具有以下特點

  • 內部可以包含多個全文檢索和精確查詢語法
  • 子查詢可以任意順序出現(xiàn)
  • 可以嵌套多個查詢,包括bool查詢
  • 如果bool查詢中沒有must條件,should中必須至少滿足一條才會返回結果。

2. bool參數(shù)說明及示例

在使用bool查詢時,有一些重要的參數(shù)可以用來進一步控制查詢的行為,包括:

  • minimum_should_match:指定在should查詢子句中至少要匹配多少條件才算查詢成功。
  • disable_coord:控制是否計算每個條件的坐標因子以調整查詢的相關性得分。
  • adjust_pure_negative:控制是否調整純負面條件的得分。
  • boost:為整個bool查詢指定一個權重,以影響其在整個查詢中的相關性得分。

2.1. minimum_should_match參數(shù)

minimum_should_match參數(shù)用于指定在should查詢子句中至少要匹配多少條件才算查詢成功。這個參數(shù)非常有用,因為它可以幫助我們平衡查詢的精確性和寬容度。

{
  "query": {
    "bool": {
      "should": [
        { "match": { "title": "Elasticsearch" } },
        { "match": { "content": "Kibana" } }
      ],
      "minimum_should_match": 1
    }
  }
}

在上面的查詢中,我們要求至少要匹配一個should條件才算查詢成功。

補充說明

參數(shù)有以下形式:N表示需要滿足的條件數(shù)量,S表示條件總數(shù) (1)正整數(shù) N = X,比如給定值為3,那么 N=3。
(2)負整數(shù) N = S |X|,比如給定值為-2,那么 N= S - 2。
(3)正百分比 N = min 取整(S * X),比如 S=5,X = 25% ,那么 N= 1
(4)負百分比 N =S - min 取整(|S * X|),比如 S=5,X = -25% ,那么 N= 5 - 1 = 4。
(5)組合,比如 3<90% 當 S <= 3,則全部都是必需的;當 S > 3,則僅需要90%,按上面的正百分比計算。
(6)多種組合,比如:2<-25% 9<3 多個條件規(guī)范可以用空格分隔。每個條件規(guī)范僅對大于其前一個的數(shù)字有效。
在此示例中:如果有1或2個子句,則都需要;如果有3-9個子句,則需要-25%(按負百分數(shù)計算);如果有9個以上的子句,則需要3個。
(7)注意:
當minimum_should_match的值大于子句數(shù)量數(shù),DSL將檢索不到值;
當minimum_should_match為0時,should子句失效。

2.2. disable_coord參數(shù)

disable_coord參數(shù)是一個布爾值,用于控制是否計算每個條件的坐標因子以調整查詢的相關性得分。將其設置為true可以禁用坐標因子的計算。

{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "Elasticsearch" } }
      ],
      "disable_coord": true
    }
  }
}

2.3. adjust_pure_negative參數(shù)

adjust_pure_negative參數(shù)也是一個布爾值,用于控制是否調整純負面條件的得分。默認情況下,Elasticsearch會為純負面條件的查詢調整得分,以避免它們對整體相關性得分的影響。將其設置為false可以禁用此行為。

{
  "query": {
    "bool": {
      "must_not": [
        { "match": { "status": "deprecated" } }
      ],
      "adjust_pure_negative": false
    }
  }
}

2.4. boost參數(shù)

boost參數(shù)允許你為整個bool查詢指定一個權重,以影響其在整個查詢中的相關性得分。

{
  "query": {
    "bool": {
      "should": [
        { "match": { "title": "Elasticsearch" } }
      ],
      "boost": 2.0
    }
  }
}

在上面的示例中,should查詢子句的權重被設置為2.0,從而增加了它在整個查詢中的重要性。

3. must、should、must_not和filter詳解及示例

3.1.must

must查詢子句用于要求所有的查詢條件都必須匹配。

{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "Elasticsearch" } },
        { "range": { "price": { "gte": 50 } } }
      ]
    }
  }
}

在上面的查詢中,我們要求文檔的title必須包含"Elasticsearch",而且price必須大于或等于50。

3.2.should

should查詢子句用于指定多個條件中至少一個必須匹配。

{
  "query": {
    "bool": {
      "should": [
        { "match": { "title": "Elasticsearch" } },
        { "match": { "content": "Kibana" } }
      ]
    }
  }
}

在上面的查詢中,文檔可以包含"Elasticsearch"或者"Kibana",或者同時包含兩者。

should不同情況使用的注意事項

  • 如果bool查詢在must里,并且bool查詢中具有must或
    filter子句,那么bool中的should查詢即使沒有匹配到,文檔也將與查詢匹配。在這種情況下,should的子句僅用于影響得分
  • 如果bool查詢在filter里,則文檔至少滿足should的查詢一個條件
  • 如果bool查詢既沒有在must也沒在filter,則文檔至少滿足should的查詢一個條件

3.3.must_not

must_not查詢子句用于排除匹配某些條件的文檔。

{
  "query": {
    "bool": {
      "must_not": [
        { "match": { "category": "Deprecated" } }
      ]
    }
  }
}

在上面的查詢中,我們排除了所有category字段包含"Deprecated"的文檔。

3.4.filter

filter查詢子句用于過濾文檔,但不會影響查詢的相關性得分。

{
  "query": {
    "bool": {
      "filter": [
        { "term": { "status": "published" } },
        { "range": { "date": { "gte": "2023-01-01" } } }
      ]
    }
  }
}

在上面的查詢中,我們過濾了status為"published"且date大于或等于"2023-01-01"的文檔,但不會改變它們的相關性得分。

4. 多子句嵌套bool查詢示例

有時可能需要更復雜的查詢,例如組合多個bool查詢。以下示例展示了不同語法的多子句嵌套bool查詢:

{
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              { "match": { "title": "Elasticsearch" } },
              { "match": { "content": "Kibana" } }
            ]
          }
        }
      ],
      "filter": [
        { "range": { "date": { "gte": "2023-01-01" } } }
      ],
      "must_not": [
        { "match": { "status": "deprecated" } }
      ]
    }
  }
}

5. 結論

本次介紹了Elasticsearch中的bool查詢,包括其基本概念、重要參數(shù)以及各個查詢子句的詳解和示例。希望本文對你理解和使用bool查詢有所幫助,同時也能夠提高你在Elasticsearch中構建復雜查詢的能力。如果你有任何問題或需要進一步的幫助,請隨時在評論中提出。文章來源地址http://www.zghlxwxcb.cn/news/detail-752203.html

到了這里,關于【Elasticsearch】 10-DSL語法詳解-復合查詢bool(must、should、must_not、filter)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • ElasticSearch - DSL查詢語法

    ElasticSearch - DSL查詢語法

    目錄 DSL查詢分類 全文檢索查詢 精確查詢 地理查詢 復合查詢 相關性算分 算分函數(shù)查詢 BooleanQuery DSL查詢分類 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)來定義查詢 常見的查詢類型包括: 查詢所有:查詢出所有的數(shù)據(jù),一般測試用;例如:match_all 全文檢索(full text)查詢

    2023年04月08日
    瀏覽(41)
  • ElasticSearch 高級查詢語法Query DSL實戰(zhàn)

    ElasticSearch 高級查詢語法Query DSL實戰(zhàn)

    ES中提供了一種強大的檢索數(shù)據(jù)方式,這種檢索方式稱之為Query DSL(Domain Specified Language 領域專用語言) , Query DSL是利用Rest API傳遞JSON格式的請求體(RequestBody)數(shù)據(jù)與ES進行交互,這種方式的豐富查詢語法讓ES檢索變得更強大,更簡潔。 官方文檔:https://www.elastic.co/guide/en/elasti

    2024年02月07日
    瀏覽(33)
  • 2.ElasticSearch 高級查詢語法Query DSL實戰(zhàn)

    2.ElasticSearch 高級查詢語法Query DSL實戰(zhàn)

    ES中提供了一種強大的檢索數(shù)據(jù)方式,這種檢索方式稱之為Query DSL (Domain Specified Language 領域專用語言 ) , Query DSL是利用Rest API傳遞JSON格式的請求體(RequestBody)數(shù)據(jù)與ES進行交互,這種方式的豐富查詢語法讓ES檢索變得更強大,更簡潔。 Query DSL | Elasticsearch Guide [7.17] | Elastic 語法

    2024年03月15日
    瀏覽(33)
  • 【ES專題】ElasticSearch 高級查詢語法Query DSL實戰(zhàn)

    【ES專題】ElasticSearch 高級查詢語法Query DSL實戰(zhàn)

    個人在學習的過程中,感覺比較吃力的地方有如下: 語法結構比較陌生 沒有中文文檔, 只能看英文 其他博客也比較少介紹語法結構。比如說,為什么查詢中會出現(xiàn) query 有ES入門基礎,且想進一步學習ES基本操作的朋友 系列上一篇文章:《【ES專題】ElasticSearch快速入

    2024年02月06日
    瀏覽(24)
  • ElasticSearch - DSL查詢文檔語法,以及深度分頁問題、解決方案

    ElasticSearch - DSL查詢文檔語法,以及深度分頁問題、解決方案

    目錄 一、DSL 查詢文檔語法 前言 1.1、DSL Query 基本語法 1.2、全文檢索查詢 1.2.1、match 查詢 1.2.2、multi_match 1.3、精確查詢 1.3.1、term 查詢 1.3.2、range 查詢 1.4、地理查詢 1.4.1、geo_bounding_box 1.4.2、geo_distance 1.5、復合查詢 1.5.1、相關性算分 1.5.2、function_score 1.5.3、boolean query 1.6、搜索

    2024年02月07日
    瀏覽(25)
  • ElasticSearch_dsl實現(xiàn)多字段查詢去重過濾詳解(script)

    ElasticSearch_dsl實現(xiàn)多字段查詢去重過濾詳解(script)

    ElasticSearch單字段去重詳見博文:ElasticSearch單字段查詢去重詳解_IT之一小佬的博客-CSDN博客 ElasticSearch多字段去重詳見博文:ElasticSearch多字段查詢去重過濾詳解_IT之一小佬的博客-CSDN博客 本博文將詳細介紹使用elasticsearch_dsl進行多字段進行去重。本文示例數(shù)據(jù)詳見上文單字段博

    2023年04月22日
    瀏覽(20)
  • 【DSL】ES+DSL 查詢語法

    一、前言 工作中遇到ES的查詢問題,由于業(yè)務方給的條件不清晰,有些查詢無法實現(xiàn),需要用到DSL語法查詢實現(xiàn),很久沒用生疏了,借此機會復習下。 二、定義 1.基本介紹 Elasticsearch(簡稱為ES ),一個開源的分布式搜索和分析引擎,主要用于處理大量數(shù)據(jù)并提供快速、實時

    2024年02月12日
    瀏覽(24)
  • Elasticsearch查詢 - Bool查詢

    在Elasticsearch中, Bool查詢 是一種 組合查詢 ,可以用于將多個查詢組合在一起,并使用 邏輯運算符 (AND、OR、NOT)對它們進行組合。與其他三種基本查詢不同,Bool查詢可以實現(xiàn)更為復雜的查詢需求。 下面對四種基本查詢和Bool查詢進行簡單對比: Term Query: 精確匹配 單個值,

    2024年02月06日
    瀏覽(16)
  • ElasticSearch DSL語法

    ElasticSearch DSL語法

    一、文檔批量操作 1.批量獲取文檔數(shù)據(jù) 批量獲取文檔數(shù)據(jù)是通過_mget的API來實現(xiàn)的 (1)在URL中不指定index和type 請求方式:GET 請求地址:_mget 功能說明 : 可以通過ID批量獲取不同index和type的數(shù)據(jù) 請求參數(shù): docs : 文檔數(shù)組參數(shù) _index : 指定index _type : 指定type(7.x的版本不推薦使

    2024年03月16日
    瀏覽(52)
  • RestClient操作文檔和DSL查詢語法

    RestClient操作文檔和DSL查詢語法

    注:一般不用上方地理查詢,用下面方法! 算法了解 4.1、Function Score Query(修改相關性算分) 4.2、Boolean Query

    2024年02月16日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包