首页 文章

如何在elasticsearch中获得查询的最大分数?

提问于
浏览
1

我有一个存储在elasticsearch索引中的大型文档集,我需要找到类似的文档集来排除重复项 .

不幸的是,这些文档可能有不同的值,所以我不能完全依赖过滤器 . 相反,我试图评估使用多个字段和不同提升值的两个文档之间的差异 .

如果差异太大,则文档不会计为重复 . 问题是 - 我不知道如何评估差异,因为搜索响应中的_score没有说明差异有多大 .

为每个特定查询获得最大可能得分是完美的 . 我怎样才能做到这一点?

Edit :例如,如果我执行这样的查询,则返回带有_score的JSON,大于1.00

请求:GET / documents / sometype / _search

{
    "query": {
        "bool": {
            "should": [
                {"match": {
                    "title": {
                        "query": "some title"
                    }
               }}
            ]
        } 
    }
}

响应示例:

{“take”:1,“timed_out”:false,“_ shards”:...,“hits”:{“total”:100,“max_score”:1.7588379,}}

正如文档所述,_score - 只是一个浮点数,对其范围一无所知 .

1 回答

  • 2

    这是一个有趣的问题 . 由于Practical Scoring Function(PSF)通常使用逆文档频率(IDF),因此问题"What is the maximum document score given a query"不适合 . 评分结果取决于所有文档,即索引,甚至是ES配置中的分片数 .

    我的猜测是,通过修改索引,可以显示如果使用IDF,查询的最大分数是无限的 .

    但在特殊情况下,如果您通过使用例如停用PSF来停用PSF的IDF部分 constant_score ,最大分数应该是有限的,因为它只取决于doc本身,而不是索引 .

    话虽这么说,我也希望看到一个 _max_score endpoints 返回 inf ,如果IDF在查询中的某个地方使用,如果没有,则返回实际的最大文档分数 .

相关问题