我有一个存储在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 回答
这是一个有趣的问题 . 由于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在查询中的某个地方使用,如果没有,则返回实际的最大文档分数 .