ElasticSearch Nest布尔查询产生不同的评分

时间:2019-02-14 11:28:45

标签: c# elasticsearch nest

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

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

查询在下面

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()
               );

我知道建议是,如果您希望以这种方式使用计分器来保持一致的评分,但这只是我检查评分方式的一种简单方法。

我最终的概念证明实际上将查看“障碍”字段,如果该字段为true,则对其进行增强,但如果为false,则仍将其包括在内。

我最终将拥有大量的字段,这些字段将以此方式基于大量的布尔输入来生成排名系统,如果它与用户的首选项相匹配,则将被提升,但如果不匹配,则仍将包含结果。 / p>

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

1 个答案:

答案 0 :(得分:0)

我发现这与分片有关。

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

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

3个可能的答案是:

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