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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

白话Elasticsearch13-深度探秘搜索技术之基于multi_match+most fields策略进行multi-field搜索

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 白话Elasticsearch13-深度探秘搜索技术之基于multi_match+most fields策略进行multi-field搜索 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 概述
  • 官網
  • 示例
    • 構造模擬數據
    • 普通查詢
    • 使用 multi_match + most fileds查詢
    • best fields VS most fields

概述

繼續跟中華石杉老師學習ES,第十三篇

課程地址: https://www.roncoo.com/view/55


官網

https://www.elastic.co/guide/en/elasticsearch/reference/7.2/query-dsl-multi-match-query.html


示例

上一節 我們演示了best_fileds的用法 白話Elasticsearch12-基于multi_match + bestfields語法實現dis_max+tie_breaker ,這里我們繼續來看下 most fields 的用法


構造模擬數據

POST /forum/_mapping/article {"properties": {"sub_title": {"type": "text","analyzer": "english","fields": {"std": {"type": "text","analyzer": "standard"}}}} }

增加一個字段sub_title,使用english分詞器(會進行stemmer), 然后在這對sub_title增加一個子field ,使用standard分詞器(不會進行stemmer).

批量更新數據

POST /forum/article/_bulk { "update": { "_id": "1"} } { "doc" : {"sub_title" : "learning more courses"} } { "update": { "_id": "2"} } { "doc" : {"sub_title" : "learned a lot of course"} } { "update": { "_id": "3"} } { "doc" : {"sub_title" : "we have a lot of fun"} } { "update": { "_id": "4"} } { "doc" : {"sub_title" : "both of them are good"} } { "update": { "_id": "5"} } { "doc" : {"sub_title" : "haha, hello world"} }

普通查詢

GET /forum/article/_search {"query": {"match": {"sub_title": "learning courses"}} }

sub_title用的是enligsh analyzer,所以還原了單詞.

因為如果我們用的是類似于english analyzer這種分詞器的話,就會將單詞還原為其最基本的形態,stemmer

learning --> learn learned --> learn courses --> course

sub_titile: learning coureses 就變成了 learn course

返回結果


使用 multi_match + most fileds查詢

GET /forum/article/_search {"query": {"multi_match": {"query": "learning courses","type": "most_fields","fields": ["sub_title","sub_title.std"]}} }

結果


best fields VS most fields

  • best-fields策略,主要是說將某一個field匹配盡可能多的關鍵詞的doc優先返回回來

  • most-fields策略,主要是說盡可能返回更多field匹配到某個關鍵詞的doc,優先返回回來

best_fields,是對多個field進行搜索,挑選某個field匹配度最高的那個分數,同時在多個query最高分相同的情況下,在一定程度上考慮其他query的分數。簡單來說,你對多個field進行搜索,就想搜索到某一個field盡可能包含更多關鍵字的數據

  • 優點:通過best_fields策略,以及綜合考慮其他field,還有minimum_should_match支持,可以盡可能精準地將匹配的結果推送到最前面
  • 缺點:除了那些精準匹配的結果,其他差不多大的結果,排序結果不是太均勻,沒有什么區分度了

實際的例子:百度之類的搜索引擎,最匹配的到最前面,但是其他的就沒什么區分度了


most_fields,綜合多個field一起進行搜索,盡可能多地讓所有field的query參與到總分數的計算中來,此時就會是個大雜燴,出現類似best_fields案例最開始的那個結果,結果不一定精準,某一個document的一個field包含更多的關鍵字,但是因為其他document有更多field匹配到了,所以排在了前面;所以需要建立類似sub_title.std這樣的field,盡可能讓某一個field精準匹配query string,貢獻更高的分數,將更精準匹配的數據排到前面

  • 優點:將盡可能匹配更多field的結果推送到最前面,整個排序結果是比較均勻的
  • 缺點:可能那些精準匹配的結果,無法推送到最前面

實際的例子:wiki,明顯的most_fields策略,搜索結果比較均勻,但是的確要翻好幾頁才能找到最匹配的結果

總結

以上是生活随笔為你收集整理的白话Elasticsearch13-深度探秘搜索技术之基于multi_match+most fields策略进行multi-field搜索的全部內容,希望文章能夠幫你解決所遇到的問題。

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