分页在 elasticsearch 中是如何工作的
How pagination works in elasticsearch
如果我没有指定任何“排序”字段,您能告诉我分页是如何工作的吗?
在我的查询中,如果我没有指定“sort”字段然后尝试使用“from”加“size”进行分页,elasticsearch return 数据如何?是否有可能 return 重复记录?
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”,这是否会确保 returning 独特的结果?如果是,怎么做?
默认情况下,来自不同分片的排序结果由接受客户端请求的协调节点完成。
此外,默认情况下,排序是在 _score 字段上完成的。
是的,没有排序字段,考虑到集群稳定且副本与主分片对齐,结果始终是唯一的。
默认情况下,文档按 _score:desc
排序,如果您经常索引新文档,这可能不是您想要的。
我肯定会添加 sort clause on _doc
,这是保证您获得独特结果的唯一方法。
{
"from": 10,
"size": 20,
"sort": [
{
"_score": "desc" <--- add this
},
{
"_doc": "asc" <--- and this
}
],
...
}
此外,如果您考虑分页 from: 10000
,则需要 leverage search_after
如果我没有指定任何“排序”字段,您能告诉我分页是如何工作的吗?
在我的查询中,如果我没有指定“sort”字段然后尝试使用“from”加“size”进行分页,elasticsearch return 数据如何?是否有可能 return 重复记录?
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”,这是否会确保 returning 独特的结果?如果是,怎么做?
默认情况下,来自不同分片的排序结果由接受客户端请求的协调节点完成。
此外,默认情况下,排序是在 _score 字段上完成的。
是的,没有排序字段,考虑到集群稳定且副本与主分片对齐,结果始终是唯一的。
默认情况下,文档按 _score:desc
排序,如果您经常索引新文档,这可能不是您想要的。
我肯定会添加 sort clause on _doc
,这是保证您获得独特结果的唯一方法。
{
"from": 10,
"size": 20,
"sort": [
{
"_score": "desc" <--- add this
},
{
"_doc": "asc" <--- and this
}
],
...
}
此外,如果您考虑分页 from: 10000
,则需要 leverage search_after