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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

06.full_text multi_match查询

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

文章目錄

    • 1. multi_match 簡介
    • 2. multi_match 查詢類型
      • 1. best_fields
      • 2. most_fields
      • 3. phrase和phrase_prefix
      • 4. cross_fields
      • 5. bool_prefix

1. multi_match 簡介

這個multi_match實際上算是類似一個組合查詢,他把dis_max query, phrase query, phrase_prefix,bool_prefix等給打包到一起了,使用的時候按照需要選用就可以了,這樣的話就更加簡單易用了。
但是在使用的時候又不想純粹的只做組合的query(bool query,dis_max query等),哪些只做組合的query沒有自己的查詢語法,只是組合別的查詢query,multi_match有自己的查詢語法,是對多個查詢類型的封裝,暴露給外面的是一個新的api,不是bool那種還是使用子query的查詢方式。而且他允許多字段查詢。

一個簡單的樣例

GET /_search {"query": {"multi_match" : {"query": "this is a test", "fields": [ "subject", "message" ] }} }GET /_search {"query": {"multi_match" : {"query": "Will Smith","fields": [ "title", "*_name" ] #filed 的name可以使用通配符}} }GET /_search {"query": {"multi_match" : {"query" : "this is a test","fields" : [ "subject^3", "message" ] # subject會被提升權重}} }

field的數量不能超過1024

2. multi_match 查詢類型

multi_match 是如何支持dis_max,phrase,phrase_prefix等等查詢的呢,在這里引入了一個參數叫 type,type的取值如下

best_fields:(默認)查找與任何字段匹配的文檔,但使用最佳字段中的_score。請參閱best_fields。

most_fields: 查找與任何字段匹配的文檔,并組合每個字段的_score。請參閱most_fields。

cross_fields: 使用相同的分析器將多個字段內容視為一個大字段。在大字段中查找每個單詞。參見cross_fields。

phrase: 在每個字段上運行match_phrase查詢,并使用最佳字段中的_score。參見詞組和詞組前綴。

phrase_prefix: 在每個字段上運行match_phrase_prefix查詢,并使用最佳字段中的_score。參見詞組和詞組前綴。

bool_prefix: 在每個字段上創建一個match_bool_prefix查詢,并組合每個字段中的_score。請參閱bool_prefix。

1. best_fields

當您在同一字段中search多個單詞時,best_fields類型最有用。例如,搜索“brown fox”的時候,單個字段中的“brown fox”比一個字段中的“brown”和另一字段中的“ fox”更有意義。

best_fields類型為每個字段生成一個匹配查詢,并將它們包裝在dis_max查詢中,以查找單個最佳匹配字段。例如,此查詢:

GET /_search {"query": {"multi_match" : {"query": "brown fox","type": "best_fields","fields": [ "subject", "message" ],"tie_breaker": 0.3}} } GET /_search {"query": {"dis_max": {"queries": [{ "match": { "subject": "brown fox" }},{ "match": { "message": "brown fox" }}],"tie_breaker": 0.3}} }

其中的tie_breaker和dis_max的查詢是一樣的含義

因為best_fields and most_fields 的multi_match是以field為中心進行查詢的,所以operator和minimum_should_match參數會單獨的對每個field起作用

GET /_search {"query": {"multi_match" : {"query": "Will Smith","type": "best_fields","fields": [ "first_name", "last_name" ],"operator": "and" }} }

這個對應的語義是

(+first_name:will +first_name:smith) | (+last_name:will +last_name:smith)

2. most_fields

當多個field對相同內容采用不用的analyze進行存儲,如果想對這多個字段進行搜索從而獲得更加準確的結果的話,使用most_fields更加合適。比如,main field可能包含synonums,stemming , terms without diacritic(變音符),
second field 包含了原有的terms, third field 包含了shingles。這樣的話就可以使用三個field的score來計算final score進而得到更好的排序效果。

GET /_search {"query": {"multi_match" : {"query": "quick brown fox","type": "most_fields","fields": [ "title", "title.original", "title.shingles" ]}} } GET /_search {"query": {"bool": {"should": [{ "match": { "title": "quick brown fox" }},{ "match": { "title.original": "quick brown fox" }},{ "match": { "title.shingles": "quick brown fox" }}]}} }

3. phrase和phrase_prefix

phrase_prefix 和phrase和 best_fields類似
也可以使用tie_breaker參數,同時還可以使用boost,lenient,slop等在match_phase中使用的參數

GET /_search {"query": {"multi_match" : {"query": "quick brown f","type": "phrase_prefix","fields": [ "subject", "message" ]}} }

等同于

GET /_search {"query": {"dis_max": {"queries": [{ "match_phrase_prefix": { "subject": "quick brown f" }},{ "match_phrase_prefix": { "message": "quick brown f" }}]}} }

4. cross_fields

cross_fields類型對于結構化文檔(其中多個字段應匹配)特別有用。例如,當在first_name和last_name字段中查詢“ Will Smith”時,最匹配的一個字段中可能有“ Will”,而另一個字段中有“ Smith”。

GET /_search {"query": {"multi_match" : {"query": "Will Smith","type": "cross_fields","fields": [ "first_name", "last_name" ],"operator": "and"}} }

執行的邏輯是

+(first_name:will last_name:will) +(first_name:smith last_name:smith)

5. bool_prefix

GET /_search {"query": {"multi_match" : {"query": "quick brown f","type": "bool_prefix","fields": [ "subject", "message" ]}} }

總結

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

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