在弹性搜索中重新索引时,“查询”中的“大小”没有影响

No effect of “size” in ‘query’ while reindexing in elasticsearch

我一直在使用 logstash 将一个索引迁移到另一个。我最近尝试重新索引本地环境中大型数据集中的一定数量的数据。所以我尝试使用以下配置进行迁移:

input{
  elasticsearch{
    hosts=>"localhost:9200"
    index=>"old_indexindex"
    query=>'{"query":{"match_all":{}},"size":10 }'
  }
}filter{
  mutate{
    remove_field=>[
      "@version",
      "@timestamp"
    ]
  }
}output{
  elasticsearch{
    hosts=>"localhost:9200"
    index=>"new_index"
    document_type=>"contact"
    manage_template=>false
    document_id=>"%{contactId}"
  }
}

但是这会将 old_index 中的所有文档重新编入索引到 new_index,而我期待的是只有 10 个文档要在 new_index 中重新编制索引。 我是否遗漏了一些将 logstash 与 elasticsearch 结合使用的概念?

elasticsearch 输入不进行常规搜索,而是进行 scan/scroll 搜索类型。这意味着将从索引中检索所有数据,size 参数的作用仅用于定义 每次滚动期间将获取多少数据 ,而不是定义多少数据将被一并提取。

另外请注意,查询中的 size 参数本身没有任何作用。您需要使用 elasticsearch 输入的 size parameter 而不是在查询中指定它。

input{
  elasticsearch{
    hosts=> "localhost:9200"
    index=> "old_index"
    query=> '*'
    size => 10                 <--- size goes here
  }
}

也就是说,如果您是 运行 ES 2.3 或更高版本,可以使用 Reindex API 实现您想要的效果,如下所示:

POST /_reindex
{
  "size": 10,
  "source": {
    "index": "old_index"
  },
  "dest": {
    "index": "new_index"
  }
}