elasticsearch 将记录复制到另一个索引而不发生ID冲突,elasticsearch,elasticsearch" /> elasticsearch 将记录复制到另一个索引而不发生ID冲突,elasticsearch,elasticsearch" />

elasticsearch 将记录复制到另一个索引而不发生ID冲突

elasticsearch 将记录复制到另一个索引而不发生ID冲突,elasticsearch,elasticsearch,我想将记录从索引复制到另一个索引。我正在使用reindex如下所示: POST _reindex { "dest": { "index": "dst" }, "source": { "index": "src", "query": { "bool": { "must": [ { "m

我想将记录从索引复制到另一个索引。我正在使用
reindex
如下所示:

POST _reindex
{
    "dest": {
        "index": "dst"
    },
    "source": {
        "index": "src",
        "query": {
            "bool": {
                "must": [
                    {
                        "match": {
                            "name": "HEIDI"
                        }
                    }
                ]
            }
        }
    }
}
不需要复制
\u id
,因为文档事实上是不同的,并且希望生成新的
\u id
。我想真正避免的一件事是,如果ID偶尔匹配,则重写目标中源文档

如何使用ElasticSearch 5进行设置?
谢谢有两种方法可以做到这一点:

  • 只需编写一个python脚本,从源代码获取文档,并对目标代码进行新的摄取。我已经有了一些python代码,可以做同样的事情。也许对你有帮助。这是:
  • `

    来自elasticsearch导入帮助程序
    导入elasticsearch
    es=弹性搜索。弹性搜索(
    hosts=[{'host':''}],
    )
    结果=helpers.scan(
    锿,
    查询={“查询”:{
    “布尔”:{
    “必须”:[
    {
    “匹配”:{
    “姓名”:“海蒂”
    }
    }
    ]
    }
    }},
    滚动=“20m”,
    索引=”,
    doc_type=“”
    )
    动作=[]
    对于结果中的项目:
    行动={
    “_索引”:”,
    “_类型”:”,
    “_来源”:项目[“_来源”]
    }
    actions.append(操作)
    帮助程序。批量(es、操作)
    
    `

  • 您可以使用reindex API并使用以下方法避免id冲突:
  • POST\u重新索引
    {
    “冲突”:“继续”,
    “目的地”:{
    “索引”:“dst”,
    “操作类型”:“创建”
    },
    “来源”:{
    “索引”:“src”,
    “查询”:{
    “布尔”:{
    “必须”:[
    {
    “匹配”:{
    “姓名”:“海蒂”
    }
    }
    ]
    }
    }
    }
    }


    但请记住,使用#2时,与目标索引冲突的ID不会重新编制索引。

    添加另一个使用
    POST\u reindex
    的答案,因为它可能会在将来帮助某些人。因此,诀窍是添加脚本,该脚本将把
    \u id
    重置为null。这帮助了我:

    POST _reindex
    {
        "source": {
            "index": "src"
        },
        "script": {
            "source": "ctx._id = null"
        },
        "dest": {
            "index": "dst"
        }
    }
    

    谢谢我知道第一个选项,但我真的很喜欢第二个方法,它也不是一个解决方案,因为正如您提到的,如果目标索引中有一个具有相同
    \u id
    的文档,它将跳过从源索引复制文档。事实上,我有个主意。。将检查是否有效并让您知道OK,作为附加答案添加。你觉得维普洛夫·帕特尼怎么样?
    POST _reindex
    {
        "source": {
            "index": "src"
        },
        "script": {
            "source": "ctx._id = null"
        },
        "dest": {
            "index": "dst"
        }
    }