如何从查询的缓存副本中获取分页查询中的数据?
搜索时,我们默认获得10个结果(最大值)。 我们还可以指定“大小”和“来自”。
然而,(看一个简单的查询,只是为了让它变得更简单)我想知道,如果我这样分页:
curl -XPOST 'http://localhost:9200/index1/type1/_search' -d '{
"query": {
"match_all": {}
},
"from": 0,
"size": 10
}'
curl -XPOST 'http://localhost:9200/index1/type1/_search' -d '{
"query": {
"match_all": {}
},
"from": 10,
"size": 10
}'
curl -XPOST 'http://localhost:9200/index1/type1/_search' -d '{
"query": {
"match_all": {}
},
"from": 20,
"size": 10
}'
是每次在服务器上执行的查询,然后返回“页面”?或者是第一次缓存和执行查询?
我可以看到两个用例的用途:
如何执行这两种情况。哪一个是默认的?
此外,如果我的查询将运行排序脚本会发生什么?例如:
curl -XPOST 'http://localhost:9200/index1/type1/_search' -d '{
"query": {
"match_all": {}
},
"sort": {
"_script": {
"script": "Math.random()",
"type": "number",
"order": "asc"
}
},
"from": 0,
"size": 10
}'
curl -XPOST 'http://localhost:9200/index1/type1/_search' -d '{
"query": {
"match_all": {}
},
"sort": {
"_script": {
"script": "Math.random()",
"type": "number",
"order": "asc"
}
},
"from": 10,
"size": 10
}'
将随机排序应用两次(所以我可能会在两个查询中出现一些项目)?如何防止这种情况并将查询“锁定”为分页?
答案 0 :(得分:1)
两年前的问题,没有答案。我回答是因为我讨厌遇到未解决的问题,而且我在做点什么。
ElasticSearch提供的功能是Scroll API(可返回v0.9,仍可在1.5中使用,但几乎没有变化)
此功能允许您存储缓存的查询结果集(默认到期时间为1分钟)。除非您在此1米内进行另一次跟进查询,否则查询结果集将被发送到更新版本的分片。
当您拥有大量实时和移动数据时,这非常方便。在迁移或更新映射期间向/从索引迁移数据时特别有用。