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进行设置?
谢谢有两种方法可以做到这一点:
来自elasticsearch导入帮助程序
导入elasticsearch
es=弹性搜索。弹性搜索(
hosts=[{'host':''}],
)
结果=helpers.scan(
锿,
查询={“查询”:{
“布尔”:{
“必须”:[
{
“匹配”:{
“姓名”:“海蒂”
}
}
]
}
}},
滚动=“20m”,
索引=”,
doc_type=“”
)
动作=[]
对于结果中的项目:
行动={
“_索引”:”,
“_类型”:”,
“_来源”:项目[“_来源”]
}
actions.append(操作)
帮助程序。批量(es、操作)
`
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"
}
}