java - ElasticSearch - 提高特定领域的分数

标签 java elasticsearch lucene

在对字段应用提升值时,我的分数在 Elasticsearch 中保持不变,有时分数甚至会降低。有人可以提出建议吗?

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) 不会增加分数。

最佳答案

在那里应用提升并没有真正完成任何事情。提升用于增强子查询在整个查询中的影响。所以它会是这样的:

QueryBuilders.boolQuery
    .should(mltQuery.boost(50))
    .should(someOtherQueryBuilder);

在那里,相对于其他子查询,您的 mlt 查询将提升至正常分数的 50 倍。

更改 boost 甚至可能导致分数降低的具体原因是 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)。我的印象是你正试图标准化分数。请看这个问题:

how do I normalise a solr/lucene score?

关于java - ElasticSearch - 提高特定领域的分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31580260/

相关文章:

lucene 查询大小 - 这个规模吗?查询 '1 OR 2 OR 3 .. OR N'

elasticsearch - kibana 更改日期时间字段

amazon-web-services - AWS Elasticsearch 。禁止/8/索引写入 (api)。无法写入索引

jquery - 使用jQuery将数据添加到Elasticsearch索引

java - 在 vc++ 中使用基于 java 的 Web 服务

lucene - 如何使用 Lucene 进行个人姓名(名字、姓氏)搜索?

azure - 从 Azure 搜索获取索引架构

javax.xml.ws.Service 构造函数不返回

java - 在 REST 中将 java 对象转换为 XML 时出错

java - 最长的蛇序列