超时查询大弹性搜索索引

时间:2016-05-19 04:57:53

标签: elasticsearch jest sense

我使用非常大的大小查询了一个大索引,因为我想在大索引中检索每个匹配的文档,但是很长一段时间后我都超时了。没有返回结果。有没有其他方法可以在没有超时的情况下获取所有数据? 我的问题:

{
"size": 90000000,
"query": { 
    "filtered": {"query": {"match_all":{}},"filter":{"term": {"isbn": 475869}}
    }
  }
}

1 个答案:

答案 0 :(得分:0)

如果您需要检索大量数据,则应使用scrolling

首先,使用您的查询启动滚动:

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类。请参阅test cases如何使用该类。