[英]ElasticSearch - boosting the score of a particular field
在對字段應用提升值時,我的分數在彈性搜索中不會受到影響,有時甚至會降低分數。 有人可以建議嗎?
MoreLikeThisQueryBuilder mltQuery2 = QueryBuilders.moreLikeThisQuery("field1","field2")
.ids(docId)
.minTermFreq(1)
.maxQueryTerms(12);
SearchResponse searchResponse = client.prepareSearch(index).setTypes(indexType).setQuery(QueryBuilders.bolQuery()
.should(mltQuery2.boost(50))
boost(50)不會增加得分。
在那兒施加提升並不會真正完成任何事情。 Boost用於增強子查詢在整個查詢中的影響。 所以會是這樣的:
QueryBuilders.boolQuery
.should(mltQuery.boost(50))
.should(someOtherQueryBuilder);
在那里,您的mlt查詢將相對於其他子查詢提升為正常分數的50倍。
更改提升甚至可能導致得分降低的特殊原因是由於queryNorm得分因素。 總得分乘以:
1 /(q.getBoost()2·Σ(IDF(T)·t.getBoost())2)1/2
這樣做的目的是使結果集的總體得分大致可比。 有關更多信息,請查看Lucene的評分算法文檔 , Elasticsearch也提供了解釋。
要記住的是,分數僅在特定查詢的上下文中才真正有用。 嘗試保存分數和/或將其與其他查詢的結果進行比較並不是一個好主意(即使使用queryNorm)。 我給您的印象是您正在嘗試將分數標准化。 請參閱以下問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.