【问题标题】:ElasticSearch Nest Boolean Query producing different scoringElasticSearch 嵌套布尔查询产生不同的评分
【发布时间】:2019-02-14 21:46:32
【问题描述】:

我正在为客户做一个概念验证,我目前正在运行一些简单的查询来帮助这个概念验证。

我正在做一个非常简单的布尔查询,它应该为所有文档产生相同的分数,因为它只是在一个字段上,但它给出不同的分数。

查询如下

var response = client.Search<TblRace>(s => s
                     .Query(q => q
                     .Bool(b => b
                     .Must(
                             m => m.Term(t => t.Field(f => f.Handicap).Value(true)))
                          )
                          )
                    .Take(300)
                    .Explain()
               );

我知道如果您希望以这种方式获得一致的评分以使用过滤器,我的建议是,但这只是我检查评分产生方式的一种简单方式。

我的最终概念验证实际上将查看“Handicap”字段,如果它是真的则提升它,但如果它是假的,仍然包含它。

我最终将有许多字段以这种方式产生一个基于大量布尔输入的排名系统,如果它与用户的偏好匹配,则它会被提升,但如果不匹配,仍然包含结果。

问题是:为什么我的得分不一致?我试图检查解释结果,但它们对我来说毫无意义。

【问题讨论】:

    标签: c# elasticsearch nest


    【解决方案1】:

    我发现这与分片有关。

    索引存储在多个分片中,它们负责自己的评分。

    很可能是我上传的小数据集(200 条记录)不足以产生一致的分数。

    3 个可能的答案是:

    1. 增加被索引的文档数量
    2. 使用 .SearchType(SearchType.DfsQueryThenFetch) - 这将执行 初始查询然后合并结果并标准化评分
    3. 在创建索引时将最大分片数量设置为 1。这个 仅当您计划只拥有一个小数据集时才适用 因为它会减慢查询速度

    【讨论】:

      猜你喜欢
      • 2018-04-28
      • 2016-03-23
      • 1970-01-01
      • 2011-02-19
      • 2016-03-27
      • 1970-01-01
      • 2017-09-18
      • 2018-08-13
      • 2017-05-22
      相关资源
      最近更新 更多