【问题标题】:Elasticsearch reindex only certain _source parametersElasticsearch 仅重新索引某些 _source 参数
【发布时间】:2019-01-26 23:38:12
【问题描述】:

我有一个性能问题,我正在尝试解决...我正在从 AWS 管理的 Elasticsearch 6.2 中的源索引到目标索引进行动态重新索引。源索引目前的大小为数百 GB,并且在生产中可能更大。因此,重新索引将需要一些时间才能完成。根据业务需求,我正在尝试尽可能减少这种情况。我读到我可以做的一些事情来加快重新索引的速度如下:

1) 与集群上的分片数量相比,使用明智的分片数量来实现并行性(例如,理想情况下,10 个分片运行的分片不应超过 10 个,其余部分是浪费和潜在的开销)

2) 如果不需要,则在目标索引上不要有副本分片,这会增加将数据写入集群的工作

3) 在集群中使用正确的 EC2 实例类型来完成此任务

4) 仅从源索引复制您需要的信息以重新索引。

上面的第 4 点是我需要指导的地方...我在 Java 8 中使用 Jest API (v.5.3.3)。有没有办法执行 _rendex 查询但只返回一个或两个字段_source,以便我写入目标索引的实际数据只是源大小的一小部分?

【问题讨论】:

    标签: java elasticsearch indexing elasticsearch-jest


    【解决方案1】:

    看起来这确实是可能的,至少在 Kibana 中是这样:我成功地执行了重新索引,只需添加 _source 作为 source 参数的一部分。如果这看起来有点令人困惑,这是我的查询似乎有效:

    POST _reindex?slices=10&wait_for_completion=false
    { "conflicts": "proceed",
      "source":{
        "index": "my_source_idx",
        "_source" : "fieldICareAbout",
        "query": { "bool": {
          "filter": { "bool" : { "must" : [
            { "nested": { "path": "medications", "query": { "bool": { "must":[
               { "terms" : { "mds.rowKey": ["USC_4886F"]} },
               { "range" : { "mds.dates" : { "lte": "2018-01-01", "gte": "2010-08-01"} } },
               { "range" : { "mds.datesCount" : { "gte": 2} } },
               { "script" : { "script" : { "id": "min-occurrence-gap-days-criteria-nested", 
                  "params" : {"min_occurs" : 1, "dateField": "mds.dates", "rowKey": ["USC_4886F"], "fromDate": "2010-08-01", "toDate": "2018-01-01", "gapDays": 0}}}}
            ]}}}}
          ]}}
        }}
      },
      "dest": {
        "index": "my_dest_index"
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多