如果我没有指定任何“排序”字段,你能告诉我分页是如何工作的吗?
在我的查询中,如果我没有指定"sort“字段,然后尝试使用"from”加上"size“进行分页,elasticsearch如何返回数据?有没有可能返回重复的记录?
es查询:
GET index1, index2/_search?pretty
{
"from": 10,
"size": 20,
"_source": {"includes”:[“name”, “type”]},
"query":{
"bool":{
"must":[
{
"term":{
"org_id":{
"value”:”1234456767257”,
"boost":1.0
}
}
},
{
"range" : {
“Timestamp” : {
"from" : 1596545417000,
"to" : 1597035223465,
"include_lower" : true,
"include_upper" : true,
"boost" : 1.0
}
}
}
],
"adjust_pure_negative":true,
"boost":1.0
}
}
}在上面的查询中,我没有指定任何“排序”字段。如果我在每次调用后增加"from“,这会确保返回唯一的结果吗?如果是,如何选择?
发布于 2020-08-11 23:09:17
默认情况下,文档按_score:desc排序,如果您经常索引新文档,这可能不是您想要的。
我肯定会添加一个sort clause on _doc,这是保证您将获得唯一结果的唯一方法。
{
"from": 10,
"size": 20,
"sort": [
{
"_score": "desc" <--- add this
},
{
"_doc": "asc" <--- and this
}
],
...
}另外,如果您考虑在from: 10000之外进行分页,则需要使用leverage search_after
发布于 2020-08-11 23:06:31
默认情况下,通过协调接受客户端请求的节点来对来自不同分片的结果进行排序。
另外,默认情况下,排序是在_score字段上完成的。
是的,没有排序字段,考虑到集群是稳定的,副本与主分片对齐,结果总是唯一的。
https://stackoverflow.com/questions/63360828
复制相似问题