循环使用elasticsearch索引中的所有文档

时间:2014-05-24 13:23:20

标签: elasticsearch

使用Elasticsearch javascript客户端(node.js),循环索引中每个文档的最佳(或最简单)方法是什么(约100 000个文档)?

1 个答案:

答案 0 :(得分:12)

我认为一个好的起点是使用scroll api进行扫描查询:

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html

基本上它类似于带有数据库的游标 - 您打开带有时间限制的查询并返回滚动ID。然后,您使用该滚动ID来检索第一批结果,并返回文档以及新的滚动ID。以下示例:

curl -XGET 'localhost:9200/_search?search_type=scan&scroll=10m&size=1000' -d '
{
    "query" : {
        "match_all" : {}
    }
}
'

这将返回一个_scroll_id,然后用于检索文档:

curl -XGET 'localhost:9200/_search/scroll?scroll=10m' -d '<_SCROLL_ID_HERE>'

请注意,这将返回1000个文件PER PRIMARY SHARD - 因此,如果您有4个主分片,它将返回4000个文档。除了文档之外,每次调用都会返回一个新的_scroll_id,然后您将其用于下一次调用。 “scroll = 10m”设置了10米的时间限制,以便在不同呼叫之间保持滚动。