gpt4 book ai didi

java - Elasticsearch 仅重新索引某些 _source 参数

转载 作者:行者123 更新时间:2023-12-02 10:53:51 25 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

看起来这确实是可能的,至少在 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"
}
}

关于java - Elasticsearch 仅重新索引某些 _source 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51937546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com