ElasticSearch - 提高特定领域的得分

时间:2015-07-23 06:58:57

标签: java elasticsearch lucene

在对某个字段应用提升值时,我的分数在弹性搜索中不受影响,有时甚至会降低分数。有谁能提出建议?

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)不会提高分数。

1 个答案:

答案 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 algorithmElasticsearch provides an explanation as well.

要记住的是,分数实际上只在特定查询的上下文中有用。尝试保存分数和/或将它们与其他查询的结果进行比较并不是一个好主意(即使使用queryNorm)。我得到的印象是你想要将分数标准化。请看这个问题:

how do I normalise a solr/lucene score?