Reindex会将一个索引的数据复制到另一个已存在的索引,但是并不会复制原索引的mapping(映射)、shard(分片)、replicas(副本)等配置信息。
一、reindex的常用操作
1、reindex基础实现
_reindex会将一个索引的快照数据copy到另一个索引,默认情况下存在相同的_id会进行覆盖(一般不会发生,除非是将两个索引的数据copy到一个索引中),可以使用以下命令将索引快照进行copy:
POST _reindex
{
"source": {
"index": "my_index_name"
},
"dest": {
"index": "my_index_name_new"
}
}
2、version_type(冲突的解决)
version_type属性默认值为internal,即当发生冲突后会覆盖之前的document,而当设置为external则会新生成一个另外的document,设置方式如下:
POST _reindex
{
"source": {
"index": "my_index_name"
},
"dest": {
"index": "my_index_name_new",
"version_type": "external"
}
}
3、op_type和conflicts
将op_type设置为create时,只会对发生不同的document进行reindex,(若定时机制的reindex则可以使用该方式只对最新的不存在的document进行reindex)。并且可以将conflicts属性设置为proceed,将冲突进行类似于continue的操作,设置方式如下:
POST _reindex
{
"conflicts": "proceed",
"source": {
"index": "my_index_name"
},
"dest": {
"index": "my_index_name_new",
"op_type": "create"
}
}
4、query的reindex
对满足query条件的数据进行reindex操作,查询方式如下:
POST _reindex
{
"source": {
"index": "my_index_name",
"type": "my_type_name",
"query": { // query的条件
"term": {
"user": "user_value"
}
}
},
"dest": {
"index": "my_index_name_new"
}
}
5、多Index、Type数据的reindex
可以将多个索引或类型的数据reindex到一个新的索引中,当然还可以使用query查询条件只对其中满足条件的部分数据进行reindx,若不设置冲突则还是默认会进行覆盖,只是不能保证相同ID的数据那个索引的数据会被先索引而被覆盖,设置方式如下:
POST _reindex
{
"source": {
"index": [
"index_name_1",
"index_name_1"
],
"type": [
"type_name_1",
"type_name_2"
],
"query": {//query的条件
"term": {
"user": "kimchy"
}
}
},
"dest": {
"index": "all_together_index_name"
}
}
6、size、sort(reindex的条数和排序控制)
POST _reindex
{
"size": 10000, // 值reindex按照sort排序后的size条数据
"source": {
"index": "my_index_name",
"sort": { "date": "desc