白话Elasticsearch13-深度探秘搜索技术之基于multi_match+most fields策略进行multi-field搜索
文章目錄
- 概述
- 官網(wǎng)
- 示例
- 構(gòu)造模擬數(shù)據(jù)
- 普通查詢
- 使用 multi_match + most fileds查詢
- best fields VS most fields
概述
繼續(xù)跟中華石杉老師學(xué)習(xí)ES,第十三篇
課程地址: https://www.roncoo.com/view/55
官網(wǎng)
https://www.elastic.co/guide/en/elasticsearch/reference/7.2/query-dsl-multi-match-query.html
示例
上一節(jié) 我們演示了best_fileds的用法 白話Elasticsearch12-基于multi_match + bestfields語(yǔ)法實(shí)現(xiàn)dis_max+tie_breaker ,這里我們繼續(xù)來(lái)看下 most fields 的用法
構(gòu)造模擬數(shù)據(jù)
POST /forum/_mapping/article {"properties": {"sub_title": {"type": "text","analyzer": "english","fields": {"std": {"type": "text","analyzer": "standard"}}}} }增加一個(gè)字段sub_title,使用english分詞器(會(huì)進(jìn)行stemmer), 然后在這對(duì)sub_title增加一個(gè)子field ,使用standard分詞器(不會(huì)進(jìn)行stemmer).
批量更新數(shù)據(jù)
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,所以還原了單詞.
因?yàn)槿绻覀冇玫氖穷愃朴趀nglish analyzer這種分詞器的話,就會(huì)將單詞還原為其最基本的形態(tài),stemmer
learning --> learn learned --> learn courses --> coursesub_titile: learning coureses 就變成了 learn course
返回結(jié)果
使用 multi_match + most fileds查詢
GET /forum/article/_search {"query": {"multi_match": {"query": "learning courses","type": "most_fields","fields": ["sub_title","sub_title.std"]}} }結(jié)果
best fields VS most fields
-
best-fields策略,主要是說(shuō)將某一個(gè)field匹配盡可能多的關(guān)鍵詞的doc優(yōu)先返回回來(lái)
-
most-fields策略,主要是說(shuō)盡可能返回更多field匹配到某個(gè)關(guān)鍵詞的doc,優(yōu)先返回回來(lái)
best_fields,是對(duì)多個(gè)field進(jìn)行搜索,挑選某個(gè)field匹配度最高的那個(gè)分?jǐn)?shù),同時(shí)在多個(gè)query最高分相同的情況下,在一定程度上考慮其他query的分?jǐn)?shù)。簡(jiǎn)單來(lái)說(shuō),你對(duì)多個(gè)field進(jìn)行搜索,就想搜索到某一個(gè)field盡可能包含更多關(guān)鍵字的數(shù)據(jù)
- 優(yōu)點(diǎn):通過(guò)best_fields策略,以及綜合考慮其他field,還有minimum_should_match支持,可以盡可能精準(zhǔn)地將匹配的結(jié)果推送到最前面
- 缺點(diǎn):除了那些精準(zhǔn)匹配的結(jié)果,其他差不多大的結(jié)果,排序結(jié)果不是太均勻,沒有什么區(qū)分度了
實(shí)際的例子:百度之類的搜索引擎,最匹配的到最前面,但是其他的就沒什么區(qū)分度了
most_fields,綜合多個(gè)field一起進(jìn)行搜索,盡可能多地讓所有field的query參與到總分?jǐn)?shù)的計(jì)算中來(lái),此時(shí)就會(huì)是個(gè)大雜燴,出現(xiàn)類似best_fields案例最開始的那個(gè)結(jié)果,結(jié)果不一定精準(zhǔn),某一個(gè)document的一個(gè)field包含更多的關(guān)鍵字,但是因?yàn)槠渌鹍ocument有更多field匹配到了,所以排在了前面;所以需要建立類似sub_title.std這樣的field,盡可能讓某一個(gè)field精準(zhǔn)匹配query string,貢獻(xiàn)更高的分?jǐn)?shù),將更精準(zhǔn)匹配的數(shù)據(jù)排到前面
- 優(yōu)點(diǎn):將盡可能匹配更多field的結(jié)果推送到最前面,整個(gè)排序結(jié)果是比較均勻的
- 缺點(diǎn):可能那些精準(zhǔn)匹配的結(jié)果,無(wú)法推送到最前面
實(shí)際的例子:wiki,明顯的most_fields策略,搜索結(jié)果比較均勻,但是的確要翻好幾頁(yè)才能找到最匹配的結(jié)果
總結(jié)
以上是生活随笔為你收集整理的白话Elasticsearch13-深度探秘搜索技术之基于multi_match+most fields策略进行multi-field搜索的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 白话Elasticsearch12-深度
- 下一篇: 白话Elasticsearch14-深度