我使用非常大的大小查询了一个大索引,因为我想检索一个大索引中的每个匹配文档,但是很长一段时间后我得到了超时。不返回任何结果。有没有其他方法可以在不超时的情况下获取所有数据?我的查询:
{
"size": 90000000,
"query": {
"filtered": {"query": {"match_all":{}},"filter":{"term": {"isbn": 475869}}
}
}
}
我使用非常大的大小查询了一个大索引,因为我想检索一个大索引中的每个匹配文档,但是很长一段时间后我得到了超时。不返回任何结果。有没有其他方法可以在不超时的情况下获取所有数据?我的查询:
{
"size": 90000000,
"query": {
"filtered": {"query": {"match_all":{}},"filter":{"term": {"isbn": 475869}}
}
}
}
如果您需要检索大量数据,则应该使用滚动。
首先,使用您的查询启动滚动:
curl -XGET 'localhost:9200/your_index/your_type/_search?scroll=1m' -d '{
"size": 5000,
"query": {
"term" : {
"isbn" : "475869"
}
}
}'
然后,您将获得前 5000 个文档以及_scroll_id
响应中的一个令牌,您可以使用它来执行后续请求。
然后,您可以使用上一个响应中的令牌重复执行下一个请求scroll_id
,以获得下一批 5000 个文档,直到不再获得任何结果。
curl -XGET 'localhost:9200/_search/scroll' -d '{
"scroll" : "1m",
"scroll_id" : "c2Nhbjs2OzM0NDg1ODpzRlBLc0FXNlNyNm5JWUc1"
}'
由于您使用的是 Jest,因此SearchScroll
您可以使用一个类。在测试用例中查看该类的使用方式。