gpt4 book ai didi

elasticsearch - Elasticsearch重新索引API-无法重新索引大量文档

转载 作者:行者123 更新时间:2023-12-02 23:07:37 25 4
gpt4 key购买 nike

我正在使用Elasticsearch的reindex API将日志从旧集群迁移到新版本7.9.2集群。这是我正在使用的命令。

curl -X POST "new_host:9200/_reindex?pretty&refresh&wait_for_completion=true" -H 'Content-Type: application/json' -d'
{
"source": {
"remote": {
"host": "old_host:9200"
},
"index": "*",
"size": 10000,
"query": {
"match_all": {}
}
},
"conflicts": "proceed",
"dest": {
"index": "logstash"
}
}'
这仅获取最后的10000个文档或1批,之后请求完成。但是,我需要重新索引超过一百万个文档。有没有办法让所有匹配的文档都运行请求?我们可以设置请求中的批处理数量还是让请求发出批处理,直到所有文档都建立索引为止?
我可以想到的一种选择是通过修改日期时间的查询来递归发送请求。有更好的方法吗?我可以在一个请求中获得所有匹配的文档(超过一百万)吗?

最佳答案

删除querysize参数以获取所有数据。如果您只需要使用查询过滤所需的文档,只需删除size即可获取所有匹配的日志。
使用wait_for_completion=false作为查询参数将返回task id,您将能够使用GET /_tasks/<task_id>监视重新索引的进度。
如果您需要或想将重新索引分解为服务器步骤/块,请考虑使用slice feature
顺便说一句:将一个索引重新索引为另一个instead all at one using *,并考虑使用每日/每月索引,因为与一个整体索引相比,恢复错误过程和管理日志保留变得更加容易。
为了提高速度,应该将副本减少为0,并在重新建立索引之前在目标索引中设置refresh_interval = -1,然后再重置这些值。

curl -X POST "new_host:9200/_reindex?pretty&wait_for_completion=false" -H 'Content-Type: application/json' -d'
{
"source": {
"remote": {
"host": "old_host:9200"
},
"index": "index_name"
},
"conflicts": "proceed",
"dest": {
"index": "logstash"
}
}'
根据评论更新:
重新编制索引时,至少有一个错误导致重新编制索引停止。该错误是由于至少一个文档(id = xiB9 ...)在字段“fields.StatusCode”中的值为“OK”引起的。但是目标索引中的映射与导致上述异常的数据类型一样长。
解决方案是,例如将源文档的StatusCode更改为200,但是可能会有更多的文档引起同样的错误。
另一种解决方案是将目标索引中的映射更改为 keyword类型-在插入任何数据之前可能需要手工映射集,并可能重新索引已经存在的数据。

关于elasticsearch - Elasticsearch重新索引API-无法重新索引大量文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64090672/

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