我想将记录从索引复制到另一个。我这样使用POST _reindex
{
"dest": {
"index": "dst"
},
"source": {
"index": "src",
"query": {
"bool": {
"must": [
{
"match": {
"name": "HEIDI"
}
}
]
}
}
}
}
:
_id
也不一定要复制_id
,因为文档实际上是不同的,并且更喜欢生成新的{{1}}。我想要真正避免的一件事是,如果偶尔匹配ID,则从目标中的源覆盖文档。
如何使用ElasticSearch 5进行设置? 感谢
答案 0 :(得分:1)
有两种方法可以做到这一点:
`
from elasticsearch import helpers
import elasticsearch
es = elasticsearch.Elasticsearch(
hosts=[{'host': '<your-es-host-name>'}],
)
results = helpers.scan(
es,
query={"query": {
"bool": {
"must": [
{
"match": {
"name": "HEIDI"
}
}
]
}
}},
scroll="20m",
index="<your-source-index-name>",
doc_type="<your-source-index-type>"
)
actions = []
for item in results:
action = {
"_index": "<your-dest-index-name>",
"_type": "<your-dest-index-type>",
"_source": item["_source"]
}
actions.append(action)
helpers.bulk(es, actions)
`
POST _reindex
{
"conflicts": "proceed",
"dest": {
"index": "dst",
"op_type": "create"
},
"source": {
"index": "src",
"query": {
"bool": {
"must": [
{
"match": {
"name": "HEIDI"
}
}
]
}
}
}
}
但请记住,对于#2,与目标索引冲突的ID不会重新编制索引。
答案 1 :(得分:0)
添加另一个使用POST _reindex
的答案,因为它可能会对将来有所帮助。因此,诀窍是添加将_id
重置为null的脚本。这对我有所帮助:
POST _reindex
{
"source": {
"index": "src"
},
"script": {
"source": "ctx._id = null"
},
"dest": {
"index": "dst"
}
}