当结果具有相同分数时在 Elasticsearch 中分页
Posted
技术标签:
【中文标题】当结果具有相同分数时在 Elasticsearch 中分页【英文标题】:Paging in Elasticsearch when results have equal scores 【发布时间】:2015-01-22 03:25:23 【问题描述】:如果多个文档得分相等,是否可以实现elasticsearch搜索结果的可靠分页?
我正在弹性搜索中尝试自定义评分。我尝试的许多评分表达式都会产生许多文档具有相同分数的结果集。每次我尝试时它们似乎都以相同的顺序出现,但可以保证吗?
AFAIU 不能,尤其是在集群中有多个分片的情况下。具有相同分数的文件。给定的 elasticsearch 查询以随机的、不确定的顺序返回,即使底层数据库没有改变(因此分页不可靠),也可以在同一查询的调用之间改变,除非满足以下条件之一:
-
我使用
function_score
来保证每个文档的分数都是唯一的(例如,通过使用唯一的数字字段)。
我使用 sort
并保证排序定义了一个总顺序(例如,如果其他一切都相同,则使用唯一字段作为后备)。
任何人都可以确认(并且可能指向一些参考)吗?
如果我知道只有一个主分片没有任何副本,这会改变吗(请参阅其他类似的问题:Inconsistent ordering of results across primary /replica for documents with equivalent score)?例如。如果我保证有一个分片并且在同一查询的两次调用之间数据库中没有变化,那么该查询将以相同的顺序返回结果?
还有哪些其他选择(如果有)?
【问题讨论】:
【参考方案1】:我最终在可能出现相同分数的情况下使用了额外的排序 - 例如按产品类别搜索。这种额外的排序可以是 id、创建日期或类似的。设置为 2 个服务器、3 个分片和 1 个副本。
【讨论】:
这是推荐的方式,首先按_score
排序,然后是一些次要的、平局的字段。
@LeeH 你如何用 _id 添加决胜局?以上是关于当结果具有相同分数时在 Elasticsearch 中分页的主要内容,如果未能解决你的问题,请参考以下文章
如果ElasticSearch中没有搜索参数,搜索结果的默认顺序是什么