1 回答

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) 的索引中,這是默認設置。那么所有文檔的索引統計信息都是相同的,并且分數將是一致的。
- 1 回答
- 0 關注
- 413 瀏覽
添加回答
舉報