2015-07-02 124 views
0

我的使用情況是這樣的: 爲查詢iphone charger,我得到較高的相關成果,有nameiphone charger coupons比名iphone charger,可能是因爲在description其他領域更好地匹配和。提升name領域沒有什麼幫助,除非我大大偏離重要性。我真正需要的是tf/idf升壓內nameTF/IDF領域內促進

引述elasticsearch blog

在一個領域術語的頻率由字段的長度偏差。然而,實際評分功能以相同的方式處理所有領域。它會將所有標題字段(因爲它們很短)視爲比所有字段更重要(因爲它們很長)。

我需要提高此more important值的特定字段。我們可以用功能分數或其他方式來做到這一點嗎?

+1

我想你是從錯誤的角度思考這個問題。想想你的要求是什麼。 ''iphone充電器「'比其他文字短。這是你想要贊成這個文本的規則嗎?您需要考慮匹配規則,然後考慮如何實現這一點。搞不清'tf/idf'是不是需要的,imo。 –

+0

@AndreiStefan對我來說名字領域自然比任何其他領域都重要。但在名義上,即使在比賽之後,相關性也不是完全可以接受的,因爲一個額外的單詞會改變一切。如此少的話+更多的匹配給我想要的結果 –

+0

你見過[this](https://www.elastic.co/guide/en/elasticsearch/guide/current/ignoring-tfidf.html)嗎? –

回答

0

一個長度的長度差異是而不是與評分算法有很大不同(事實上,由於長度標準的不精確性,完全消失)。如果在其他領域有點擊,你會有很多得分的元素來對抗。

A dis_max可能是一個合理的方法。而不是所有的添加分數和座標,以及您試圖克服的問題,它只會選擇最匹配子查詢的分數。如果您針對標題增強查詢,則可以確保強烈首選匹配。

然後,您可以分配一個「tie_breaker」,這樣只有當「標題」分數相關時,才能將與分數查詢相對應的分數計算在內。

{ 
    "dis_max" : { 
     "tie_breaker" : 0.2, 
     "queries" : [ 
      { 
       "terms" : { 
        "age" : ["iphone", "charger"], 
        "boost" : 10 
       } 
      }, 
      { 
       "terms" : { 
        "description" : ["iphone", "charger"] 
       } 
      } 
     ] 
    } 
} 

另一種方法來這樣的事情,如果你絕對知道,當你對整個領域的精確匹配,是單獨索引字段的非記號化版本,並查詢該場以及。任何與非域名版本匹配的字段都將與整個字段內容完全匹配。這將阻止你需要依靠長度規範來做出決定。

+0

謝謝我會嘗試打破平局。這是否意味着「短田地具有高權重」中提到的權重設置得如此之低以至於需要10倍的提升才能擊敗其他競爭領域? –