Elasticsearch - 比较不同查询的得分

时间:2017-06-09 08:36:42

标签: c# elasticsearch nest

我有一个父子查询,根据我孩子的匹配程度,我有三种不同的行动要做。这些文件的大小大致相同,所以现在只需比较score即可。我注意到得分始终在0到10之间,我将阈值设置为1.53.0。但我多次阅读过多次查询比较得分无效。
我当前的查询看起来像那样

var result = _client.Search<DataTypes.MyParent>(s => s
    .Query(q => q
        .HasChild<DataTypes.MyChild>(c => c
            .ScoreMode(ChildScoreMode.Sum)
            .Query(qq => qq
                .CommonTerms(ct => ct
                    .Field(f => f.Content)
                    .Query(content)
                )
            )
            .InnerHits()
        )
    )
).Hits;

var bestResult = result.FirstOrDefault();


if (bestResult.IsNotNull())
{
    if (bestResult.Score < 1.5) { ... }
    else if (bestResult.Score < 3.0) { ... }
    else { ... }
}

我想,一旦我的父母得到更多的孩子或者有不同数量的孩子,这种方法就不再适用了,因为我总结了孩子们的分数。
我考虑过使用MinimumShouldMatch但是我需要两次发送相同的查询。

那么看到最佳匹配有多好的正确方法是什么?

修改

您尝试解决的根本问题是什么?

在我的弹性指数中,我有多个问题的不同答案。当用户输入新问题时,我的系统需要找到最匹配的问题,从中需要找到答案。现在可能有三种情况:

  1. 系统找到一个非常相关的答案,因为该答案的许多问题都与新问题相符。然后它应该自动回答这个问题。
  2. 系统找到了答案,但没有足够的信心回答这个问题。然后它应该提出答案,但不要直接发送。
  3. 系统根本没有找到答案,或者对结果没有任何限制,因此它不会做任何事情。也许问题在我的系统中根本没有答案。
  4. 为了了解我所处的情况,我将答案的得分与一些神奇的阈值进行比较。但显然这不是完美的解决方案。弹性评分根本不适用于此操作。

    所以我的问题是:我如何知道结果的弹性有多自信?

1 个答案:

答案 0 :(得分:0)

在短期内,如果索引内容大致相同,那么这些分数将是相同的(对于具有相同结构的查询),对于您的情况,我没有看到没有此比较的另一种解决方案。但分数取决于术语频率和文档频率。如果您添加更多文档或更改现有文档的内容,则会影响您的分数。因此,您可能需要定期调整这些阈值。