我有一个性能问题,我正在尝试解决...我正在动态地进行从AWS托管Elasticsearch 6.2中的源索引到目标索引的重新索引。目前,源索引的大小为数百GB,并且在生产中可能更大。因此,重新索引将需要一些时间才能完成。我正在尝试根据业务需求将其最小化。我读到我可以做的一些加快重新索引的操作如下:
1)与集群上的分片数量相比,使用合理数量的分片进行并行处理(例如,理想情况下,10个分片应不超过10个分片运行,剩下的就是浪费和潜在的开销)
2)如果不需要副本副本,则在目标索引上不要使用副本副本,这会增加将数据写入集群的工作
3)使用群集中正确的EC2实例类型来完成此任务
4)仅将源索引中需要的信息复制到索引中。
上面的第4点是我需要指导的地方...我正在Java 8中使用Jest API(v.5.3.3)。有没有一种方法可以执行_rendex查询,但只返回一个或两个字段。 _source,以便我写入目标索引的实际数据只是源大小的一小部分?
答案 0 :(得分:0)
看来这确实是有可能的,至少在Kibana中是这样:我成功地执行了重新索引,只需在源参数中添加_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"
}
}