日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

04.full_text match查询

發布時間:2024/2/28 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 04.full_text match查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. match query 簡介
    • 2. 簡寫方式
    • 3. 查詢工作原理
    • 4. match查詢中的fuzzniess
      • 1. Levenshtein Edit Distance
      • 2. fuzziness 參數取值規則
    • 5. 零term的查詢
    • 6. 同義詞

1. match query 簡介

返回與提供的文本,數字,日期或布爾值match的文檔。match之前analyze提供的文本。
match查詢是用于執行全文搜索的標準查詢,其中包括模糊match的選項。

樣例

GET /_search {"query": {"match" : {"message" : {"query" : "this is a test"}}} }

match 的頂級參數是field,也就是你查詢針對的field

field內部可以有的參數

query: (必需)您希望在提供的中找到的文本,數字,布爾值或日期。這個其實可以進行簡寫,省略掉這個參數名。match查詢在執行搜索之前會analyze所有提供的文本。這意味著match查詢可以在文本field中搜索analyze的標記,而不是確切的詞。

analyzer: (可選,字符串)analyzer,用于將查詢值中的文本轉換為標記。默認為為映射的索引時間analyzer。如果未映射任何analyzer,則使用索引的默認analyzer。

auto_generate_synonyms_phrase_query: (可選,布爾值)如果為true,則會自動為多詞同義詞創建match詞組查詢。默認為true。有關示例,請參閱將同義詞與match查詢一起使用。

fuzziness: (可選,字符串)match允許的最大編輯距離,就是查詢詞和doc中的詞可以不一樣。有關有效值和更多信息,請參見fuzzniess。有關示例,請參見match查詢中的fuzzniess。

max_expansions:(可選,整數)查詢將擴展到的最大 term 數。默認為50。

prefix_length:(可選,整數)為模糊match保留的起始字符數。預設為0。

fuzzy_transpositions: (可選,布爾值)如果為true,則模糊match的編輯將包括兩個相鄰字符的轉置(ab→ba)。默認為true。

fuzzy_rewrite:(可選,字符串)用于重寫查詢的方法。有關有效值和更多信息,請參見rewrite參數。如果模糊參數不為0,則match查詢默認使用top_terms_blended_freqs _ $ {max_expansions}的重寫方法。

lenient:(可選,布爾值)如果為true,則將忽略基于格式的錯誤,例如為數字field提供文本查詢值。默認為false。

operator:(可選,字符串)布爾邏輯,用于解釋查詢值中的文本。有效值為:OR(默認值), AND

minimum_should_match: (可選,字符串)要返回的文檔必須match的最小子句數。有關有效值和更多信息,請參見minimum_should_match參數。

zero_terms_query: (可選,字符串)指示在analyzer刪除所有標記(例如使用停止 filter 時)時是否不返回文檔。有效值為:
none(默認):如果analyzer刪除了所有 token ,則不會返回任何文檔。
all: 返回所有文檔,類似于match_all查詢。

2. 簡寫方式

內部的query參數省略掉

GET /_search {"query": {"match": {"message": "this is a test"}} }

3. 查詢工作原理

match查詢的類型為布爾值。這意味著將對提供的文本進行analyze,并且analyze過程將從提供的文本中構造一個布爾查詢。可以將operator參數設置為or或and來控制布爾子句(默認為or)。可以使用minimum_should_match參數設置要match的可選should子句的最小數量。

GET /_search {"query": {"match": {"message": {"query": "this is a test","operator": "and"}}} }

可以將analyzer設置對文本執行analyze過程的analyzer。默認為field顯式mapping定義或默認的搜索analyzer。

可以將lenient參數設置為true,以忽略由數據類型不match引起的異常,例如,嘗試使用文本查詢字符串查詢數字field。默認為false。

4. match查詢中的fuzzniess

fuzzniess允許基于要查詢的field類型進行模糊match。
模糊搜索是指系統允許被搜索信息和搜索提問之間存在一定的差異,這種差異就是“模糊”在搜索中的含義。例如,查找名字Smith時,就會找出與之相似的Smithe, Smythe, Smyth, Smitt等。
es使用的模糊搜索的判斷算法是Levenshtein Edit Distance

1. Levenshtein Edit Distance

Levenshtein Edit Distance 叫做萊文斯坦距離**,是編輯距離的一種。指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數。允許的編輯操作包括將一個字符替換成另一個字符,插入一個字符,刪除一個字符。
例如,單詞 “god” 只需要插入一個 ‘o’ 字符就可以變為 “good”,因此它們之間的編輯距離為 1。

2. fuzziness 參數取值規則

了解了上面兩個概念,回過頭再來看下 fuzziness 參數。

在查詢 text 或者 keyword 類型的字段時, fuzziness 可以看做是萊文斯坦距離。

fuzziness 參數的取值如下

  • 0,1,2 表示最大可允許的萊文斯坦距離
  • AUTO: 會根據詞項的長度來產生可編輯距離,它還有兩個可選參數,形式為AUTO:[low],[high], 分別表示短距離參數和長距離參數;如果沒有指定,默認值是 AUTO:3,6 表示的意義如下
    0…2: 單詞長度為 0 到 2 之間時必須要精確匹配,這其實很好理解,單詞長度太短是沒有相似度可言的,例如 ‘a’ 和 ‘b’。
    3…5: 單詞長度 3 到 5 個字母時,最大編輯距離為 1

    5: 單詞長度大于 5 個字母時,最大編輯距離為 2

  • 最佳實踐: fuzziness 在絕大多數場合都應該設置成 AUTO
    如果不設置 fuziness 參數,查詢是精確匹配的。

    在這種情況下,可以設置prefix_length和max_expansions來控制模糊過程。如果設置了模糊選項,則查詢將使用top_terms_blended_freqs_${max_expansions}作為其重寫方法,Fuzzy_rewrite參數允許控制如何重寫查詢。

    默認情況下允許使用模糊轉置(ab→ba),但可以通過將Fuzzy_transpositions設置為false來禁用模糊轉置。

    模糊match不適用于具有同義詞的 term ,或者在analyze過程中在同一位置產生多個標記的情況。這些 term 在引擎蓋下被擴展為混合了 term 頻率的特殊同義詞查詢,該查詢不支持模糊擴展。

    GET /_search {"query": {"match": {"message": {"query": "this is a testt","fuzziness": "AUTO"}}} }

    5. 零term的查詢

    如果使用的analyzer 中有 stop filter 且查詢中的所有term都是stop token ,則默認行為是根本不match任何文檔。為了更改可以使用zero_terms_query選項,該選項默認值為none,設置為all則與match_all查詢相對應。

    GET /_search {"query": {"match": {"message": {"query": "to be or not to be","operator": "and","zero_terms_query": "all"}}} }

    6. 同義詞

    match查詢通過synonym graph token filter 支持多詞同義詞擴展。使用此 filter 時,解析器將為每個多詞同義詞創建短語查詢。例如,將產生以下同義詞:“ ny,new york”:(ny OR(“new york”))
    首先你在mapping中要定義對這個同義詞filter的使用才行。
    也可以用連接詞來match多詞同義詞:

    GET /_search {"query": {"match" : {"message": {"query" : "ny city","auto_generate_synonyms_phrase_query" : false}}} }

    上面的示例創建一個布爾查詢:

    (ny OR(new AND york))city

    與 term ny或新的AND york match的文檔。默認情況下,參數auto_generate_synonyms_phrase_query設置為true。

    總結

    以上是生活随笔為你收集整理的04.full_text match查询的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。