簡體   English   中英

ElasticSearch-提高特定領域的分數

[英]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)。 我給您的印象是您正在嘗試將分數標准化。 請參閱以下問題:

我如何對solr / lucene分數進行歸一化?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM