Search after in elasticsearch必须在计数和顺序上与其排序参数匹配。所以我想知道如何从之前的结果(示例页面1)中获得分数,以便在搜索下一页后使用它。在以前的搜索中使用最后一个文档的分数时,我遇到了一个问题。分数是1.0,由于所有文档的分数都是1.0,因此下一页的结果为null (空)。
这实际上是有意义的,因为我要求elasticsearch查找排名(分数)低于1.0的结果(分数为0),那么我应该使用哪个分数来获取下一个页面。
注意:我先按分数排序,然后再按TieBreakerID排序,因此一种可能的解决方案是对分数使用较高的值(比如1000)。
发布于 2020-10-20 09:51:57
作为explained by an Elastic team member,您正在做的事情听起来应该是可行的。它适用于我(在ES7.7中),即使在使用文档ID (复制到另一个索引字段)作为平局时也是如此。确实,在分页时索引其他文档会使您的分数略有不稳定,但不太可能给最终用户带来严重的问题。如果您需要它对于批处理作业是可靠的,那么Scroll API是更好的选择。
{
"query": {
...
},
"search_after": [
12.276552,
14173
],
"sort": [
{ "_score": "desc" },
{ "id": "asc" }
]
}https://stackoverflow.com/questions/59521891
复制相似问题