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

use*_*947 12 elasticsearch

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

Joh*_*one 12

我认为一个好的起点是使用滚动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" : {}
    }
}
'
Run Code Online (Sandbox Code Playgroud)

这将返回_scroll_id,然后您可以使用它来检索文档:

curl -XGET 'localhost:9200/_search/scroll?scroll=10m' -d '<_SCROLL_ID_HERE>'
Run Code Online (Sandbox Code Playgroud)

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