在对某个字段应用提升值时,我的分数在弹性搜索中不受影响,有时甚至会降低分数。有谁能提出建议?
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))
提升(50)不会提高分数。
答案 0 :(得分:0)
应用提升并没有真正完成任何事情。 Boost用于增强整个查询中子查询的影响。所以它会是这样的:
QueryBuilders.boolQuery
.should(mltQuery.boost(50))
.should(someOtherQueryBuilder);
在那里,你的mlt查询将被提升到相对于其他子查询的正常分数的50倍。
更改提升的特殊原因甚至可能导致得分较低是因为queryNorm得分因素。总分乘以:
1 /(q.getBoost() 2 ·Σ(idf(t)·t.getBoost()) 2 ) 1/2
这旨在使结果集的总分非常可比。有关详情,请查看Lucene's documentation of the scoring algorithm和Elasticsearch provides an explanation as well.
要记住的是,分数实际上只在特定查询的上下文中有用。尝试保存分数和/或将它们与其他查询的结果进行比较并不是一个好主意(即使使用queryNorm)。我得到的印象是你想要将分数标准化。请看这个问题: