欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Elasticsearch 5.x Document Reindex

程序员文章站 2022-07-05 09:03:17
...

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": "kimchy"
      }
    }
  },
  "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" } 
  },
  "dest": {
    "index": "my_index_name_new"
  }
}

7、source条件的reindex

  满足_source中包含数组field(字段)的数据才会被reindex,设置方式如下:

POST _reindex
{
  "source": {
    "index": "my_index_name",
    "_source": ["field_name_1", "field_name_2"]
  },
  "dest": {
    "index": "my_index_name_new"
  }
}

8、script类型的reindex

  与_update_by_query相同的是reindex也可以使用script,但是不同的是reindex可以修改源索引的数据信息,比如:

POST _reindex
{
  "source": {
    "index": "my_index_name"
  },
  "dest": {
    "index": "my_index_name_new",
    "version_type": "external"
  },
  "script": {
    "source": "if (ctx._source.foo == 'bar') {ctx._version++; ctx._source.remove('foo')}",
    "lang": "painless"
  }
}

9、修改字段名称

  以下会在copy后将新索引中的flag字段名称修改为tag:

POST _reindex
{
  "source": {
    "index": "test"
  },
  "dest": {
    "index": "test2"
  },
  "script": {
    "source": "ctx._source.tag = ctx._source.remove(\"flag\")"
  }
}

文章来源:https://blog.csdn.net/it_lihongmin/article/details/78601697

来源:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html

相关标签: es reindex