亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Elastic Search 對多個字段進行模糊匹配,并對多個字段組合得分進行排序

Elastic Search 對多個字段進行模糊匹配,并對多個字段組合得分進行排序

PHP
慕桂英4014372 2023-04-21 14:14:43
我在 Laravel 中使用 Elastic Search,我的索引有 3 個字段text,mood,haloha_id。首先,我想匹配"haloha_id"(將 haloha_id 視為帖子,將文本視為該帖子的評論)如果匹配,則進行進一步匹配。假設"haloha_id"匹配現在我想匹配“文本”字段中的子字符串,然后匹配“心情”(整數或者 0,1,2 等)“只有當某些“文本”匹配時才匹配心情,否則不匹配。我正在制作 Like Mine 查詢意味著與特定帖子的用戶評論匹配的評論將僅顯示。我的查詢中的問題是我自己的評論沒有出現在頂部因此它匹配 100%如果某人的“心情”和“評論”與我的 100% 匹配,那么它就不會出現在頂部。我刪除了與“心情”相關的查詢,但分數沒有影響,這意味著分數不包括心情匹配的分數。這是我的查詢。 "query"=>[          "bool"=>[                                        "should"=>[            "match"=>[                "text"=>[                    "query"=>$userHaloha->filtered_text,                    "fuzziness"=>"AUTO",                                ]            ]                                   ],        "minimum_should_match"=>1,        "must"=>[            "match"=>[                "mood"=>$userHaloha->mood,                        ],            "match"=>[                "haloha_id"=>$userHaloha->haloha_id            ]        ] 
查看完整描述

1 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

查詢是不言自明的。我添加了“haloha_id”來過濾塊(不對文檔評分),“text”添加到 must 塊(給文檔評分),“mood”添加到 should block(提升文檔)


{

? "query": {

? ? "bool": {

? ? ? "filter": [

? ? ? ? {

? ? ? ? ? "match": {

? ? ? ? ? ? "haloha_id": "5ecf6bff25a36366cd134db2"

? ? ? ? ? }

? ? ? ? }

? ? ? ],

? ? ? "must": [

? ? ? ? {

? ? ? ? ? "match": {

? ? ? ? ? ? "text": {

? ? ? ? ? ? ? "query": "chilli ",

? ? ? ? ? ? ? "fuzziness": "auto"

? ? ? ? ? ? }

? ? ? ? ? }

? ? ? ? }

? ? ? ],

? ? ? "should": [

? ? ? ? {

? ? ? ? ? "term": {

? ? ? ? ? ? "mood": {

? ? ? ? ? ? ? "value": 2

? ? ? ? ? ? }

? ? ? ? ? }

? ? ? ? }

? ? ? ]

? ? }

? }

}

mood:3 中的問題比 mood:2(should 子句中的搜索詞)排名更高是由于分片

來自文檔

如果您注意到兩個內容相同的文檔得到不同的分數,或者完全匹配的文檔沒有排在第一位,那么問題可能與分片有關。默認情況下,Elasticsearch 讓每個分片負責生成自己的分數。然而,由于索引統計信息是得分的重要貢獻者,因此這僅在分片具有相似索引統計信息時才有效。假設是因為默認情況下文檔被均勻地路由到分片,那么索引統計數據應該非常相似并且評分會按預期工作。但是,如果您:

在索引時使用路由,查詢多個索引,或者索引中的數據太少,那么搜索請求中涉及的所有分片很可能沒有相似的索引統計信息,并且相關性可能很差。

如果您有一個小數據集,解決此問題的最簡單方法是將所有內容索引到具有單個分片 (index.number_of_shards: 1) 的索引中,這是默認設置。那么所有文檔的索引統計信息都是相同的,并且分數將是一致的。


查看完整回答
反對 回復 2023-04-21
  • 1 回答
  • 0 關注
  • 413 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號