【问题标题】:ElasticSearch - boosting the score of a particular fieldElasticSearch - 提高特定领域的分数
【发布时间】:2015-10-13 08:08:54
【问题描述】:

在将提升值应用于字段时,我的分数在弹性搜索中不受影响,有时甚至会降低分数。任何人都可以提出一些建议吗?

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

【问题讨论】:

    标签: java elasticsearch lucene


    【解决方案1】:

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

    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?

    【讨论】:

      猜你喜欢
      • 2021-06-25
      • 1970-01-01
      • 2012-06-04
      • 2016-08-29
      • 2019-01-05
      • 2010-09-06
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      相关资源
      最近更新 更多