我遇到了在弹性搜索中仅重新索引部分索引数据的问题。
使用PHP弹性搜索客户端。
我们假设我的索引myindex
的类型为type1
和type2
。
现在type2
中的一些字段发生了变化,我需要更改映射。
在阅读完他们的文档之后,我认为我可以通过创建新类型并创建别名来逃避,但遗憾的是,您似乎不能拥有类型的别名,它只适用于索引。
然后,我想为newtype2
创建一个新的临时映射,将数据从type2
复制到newtype2
并删除type2
。
但现在我找不到任何重命名类型的方法。
答案 0 :(得分:2)
不,您无法重命名某种类型。
阅读这篇文章: https://www.elastic.co/blog/changing-mapping-with-zero-downtime
答案 1 :(得分:1)
我想延长 marcostvz's answer。
如果您确实希望现有索引具有类型名称,即使不能直接完成,也可以借助其他索引和重新索引来完成。
在运行代码时,我遇到了数据在此过程中丢失的问题。在命令之间添加一点中断(准确地说是 sleep 5
)解决了问题。
curl -XPUT localhost:9200/index_tmp &&
curl -XPOST localhost:9200/_reindex -H 'Content-Type: application/json' -d '
{
"source": {
"index": "index",
"type": "OldType"
},
"dest": {
"index": "index_tmp",
"type": "NewType"
}
}' &&
curl -XDELETE localhost:9200/index &&
curl -XPUT localhost:9200/index &&
curl -XPOST localhost:9200/_reindex -H 'Content-Type: application/json' -d '
{
"source": {
"index": "index_tmp"
},
"dest": {
"index": "index"
}
}' &&
curl -XDELETE localhost:9200/index_tmp
答案 2 :(得分:0)
重命名类型的最接近方法是使用新索引(具有新类型):
将flb_type重命名为_doc的示例:
export INDEX=log-2019.03.12 &&
curl -XPUT localhost:9200/$INDEX-v2 &&
curl -XPOST localhost:9200/_reindex -H 'Content-Type: application/json' -d '
{
"source": {
"index": "'$INDEX'",
"type": "flb_type"
},
"dest": {
"index": "'$INDEX'-v2",
"type": "_doc"
}
}' &&
curl -XDELETE localhost:9200/$INDEX &&
curl -XPOST localhost:9200/_aliases -H 'Content-Type: application/json' -d '
{
"actions": [
{
"add":
{
"alias": "'$INDEX'",
"index": "'$INDEX'-v2"
}
}
]
}'