es7.x(6)—minimum_should_match最低匹配度

  1. minimum_should_match的使用
    1.1 數(shù)據(jù)準(zhǔn)備
    1.2 實(shí)戰(zhàn)分析
    --1.2.1 在match中的應(yīng)用
    --1.2.2 在should中的應(yīng)用
    --1.2.3 should關(guān)鍵字失去or的功能解決方案
  2. minimum_should_match參數(shù)說明
    2.1 傳入?yún)?shù)為數(shù)字
    2.2 傳入的參數(shù)為百分比
    2.3 組合方式
    2.4 多種組合條件

minimum_should_match顧名思義:最低匹配度,即條件在倒排索引中最低的匹配度。

1. minimum_should_match的使用

1.1 數(shù)據(jù)準(zhǔn)備

# 創(chuàng)建索引
PUT test_match
# 創(chuàng)建映射
PUT test_match/_mapping
{
  "properties":{
    "price":{
      "type":"double"
    },
    "name":{
      "type":"text"
    }
  }
}
# 批量導(dǎo)入數(shù)據(jù)
PUT _bulk
{"create":{"_index":"test_match","_type":"_doc"}}
{"name":"ES,rabbitmq,SPRING,REDIS","price":90.00}
{"create":{"_index":"test_match","_type":"_doc"}}
{"name":"PHP,JAVA,redis,JSP,kafaka,rabbitmq","price":80.00}
{"create":{"_index":"test_match","_type":"_doc"}}
{"name":"PHP,JAVA,C++,C,python,go","price":99.00}
{"create":{"_index":"test_match","_type":"_doc"}}
{"name":"hadoop,es","price":50.00}
{"create":{"_index":"test_match","_type":"_doc"}}
{"name":"hello,pool,mq","price":100.00}

1.2 實(shí)戰(zhàn)分析

1.2.1 在match中的應(yīng)用

minnum_should_match:當(dāng)operator參數(shù)設(shè)置為or時(shí)如捅,該參數(shù)用來控制匹配的分詞的最少數(shù)量草则。

如上例中旺遮,name字段的類型為text陨界。例如第一條數(shù)據(jù)中倒排索引存儲(chǔ)的數(shù)據(jù)為:

image.png

match的查詢條件也會(huì)進(jìn)行分詞顿痪,minnum_should_match便是用于控制分詞條件在倒排索引中最少的數(shù)量镊辕。

# 復(fù)雜查詢
GET test_match/_search
{
  "query": {
    "match": {
      "name": {
        "query": "java,es",
        "minimum_should_match": 2
      }
    }
  }
}
image.png

1.2.2 在should中的應(yīng)用

match操作,在es的底層會(huì)被轉(zhuǎn)換為如下的term操作蚁袭。

GET test_match/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": {
          "name": {
            "value": "rabbitmq"
          }
        }},
        {
          "term": {
            "name": {
              "value": "es"
            }
          }
        }
      ],
      "minimum_should_match": 2
    }
  }
}
image.png

1.3 should關(guān)鍵字失去or的功能解決方案

image.png

照片出處... elasticsearch should實(shí)現(xiàn)or功能征懈,設(shè)置minimum_should_match

圖1.3.1.png

minimum_should_match用于控制bool中should列表,至少匹配幾個(gè)條件才召回doc揩悄。

當(dāng)默認(rèn)不傳minimum_should_match的情況下卖哎,查詢分為兩個(gè)情況

  • 當(dāng)bool處在query上下文時(shí),若must或者filter匹配了doc删性,那么should即使一條都不滿足也可以召回doc(如圖1.3.1)亏娜;
  • 當(dāng)bool處于filter上下文時(shí),或者bool處于query上下文蹬挺,但沒有must或者filter子句照藻,should至少匹配一個(gè)才會(huì)召回doc(如圖1.3.2);
圖1.3.2.png
GET test_match/_search
{
  "query": {
    "bool": {
      "filter": [
      {
        "bool":{
          "should":[
            {"term":{"name":"es"}},
            {"term":{"name":"rabbitmq"}}
          ]
        }
      },
      {
        "range":{
          "price":{
            "gte":80.00
          }
        } 
      }
      ]
    }
  }
}

注意:當(dāng)傳入minimum_should_match的情況下汗侵,只會(huì)將滿足should匹配條件的文檔召回幸缕。

2. minimum_should_match參數(shù)說明

2.1 傳入?yún)?shù)為數(shù)字

傳入?yún)?shù)為數(shù)字表示最低匹配的個(gè)數(shù)。也可以傳入負(fù)數(shù)晰韵。

例如:

GET test_match/_search
{
  "query": {
    "match": {
      "name": {
        "query": "php,java,jsp",
        "minimum_should_match": "-1"
      }
    }
  }
}

上面的意思表示:3個(gè)條件最低滿足2個(gè)(最多不匹配的個(gè)數(shù)為一個(gè))

2.2 傳入的參數(shù)為百分比

傳入正的百分比時(shí):如圖2.2-1

圖2.2-1.png

3個(gè)參數(shù)发乔,當(dāng)最少匹配一個(gè)百分比34%,最少匹配2個(gè)百分比67%雪猪。
由于我們傳入的參數(shù)為50%栏尚,那么轉(zhuǎn)換成最少匹配一個(gè)

傳入負(fù)的百分比時(shí):如圖2.2-2

image.png

負(fù)數(shù)表示最多不匹配的百分比50%只恨,向下取整為最多不匹配的個(gè)數(shù)為1個(gè)译仗。即最少匹配個(gè)數(shù)為2個(gè)。

2.3 組合方式

一個(gè)有條件的規(guī)范是一個(gè)正整數(shù)官觅,后跟小于號纵菌,后跟任何前面提到的說明符。它表示如果可選子句的數(shù)量等于(或小于)整數(shù)休涤,則全部都是必需的咱圆,但如果可選子句的數(shù)量大于整數(shù)笛辟,則適用規(guī)范。

官網(wǎng)描述.png
image.png
image.png

2.4 多種組合條件

多個(gè)條件規(guī)范可以用空格分隔序苏,每個(gè)條件規(guī)范僅對大于其前一個(gè)的數(shù)字有效手幢。在此示例中:如果有1個(gè)或2個(gè)子句,則都需要忱详,如果有3-9個(gè)子句围来,則需要除25%之外的所有子句;如果有9個(gè)以上的子句匈睁,則需要除3個(gè)之外的所有子句监透。

官網(wǎng)描述.png
image.png

推薦閱讀

elasticsearch中minimum_should_match的一些理解

官方文檔 elasticsearch 7.x/minimum-should-match

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市软舌,隨后出現(xiàn)的幾起案子才漆,更是在濱河造成了極大的恐慌牛曹,老刑警劉巖佛点,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異黎比,居然都是意外死亡超营,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門阅虫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來演闭,“玉大人,你說我怎么就攤上這事颓帝∶着觯” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵购城,是天一觀的道長吕座。 經(jīng)常有香客問我,道長瘪板,這世上最難降的妖魔是什么吴趴? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮侮攀,結(jié)果婚禮上锣枝,老公的妹妹穿的比我還像新娘。我一直安慰自己兰英,他們只是感情好撇叁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著畦贸,像睡著了一般税朴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天正林,我揣著相機(jī)與錄音泡一,去河邊找鬼。 笑死觅廓,一個(gè)胖子當(dāng)著我的面吹牛鼻忠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杈绸,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼帖蔓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瞳脓?” 一聲冷哼從身側(cè)響起塑娇,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎劫侧,沒想到半個(gè)月后埋酬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烧栋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年写妥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片审姓。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡珍特,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出魔吐,到底是詐尸還是另有隱情扎筒,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布酬姆,位于F島的核電站嗜桌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏轴踱。R本人自食惡果不足惜症脂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淫僻。 院中可真熱鬧诱篷,春花似錦、人聲如沸雳灵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悯辙。三九已至琳省,卻和暖如春迎吵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背针贬。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工击费, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桦他。 一個(gè)月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓蔫巩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親快压。 傳聞我的和親對象是個(gè)殘疾皇子圆仔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354