Elasticsearch - 重新索引到相同的索引名称

时间:2016-02-05 20:06:13

标签: elasticsearch reindex

我有几个旧索引,我想改变它的映射。现在我需要将旧映射转换为新映射。我一直在阅读stackoverflow,如

This one

This one

and this one

但我不认为他们是我问题的确切答案。

其中许多使用不同的索引名称,因此操作更容易,但由于设置,我们使用更粗略的方式来卷曲数据,这需要精确的索引名称。

现在我的问题是:将旧索引(或多个索引)重新索引到新索引的好方法

离。

我当前的地址是“http://address-to-server:port/cluster-name/index-name

我希望能够重新索引旧数据,以便在curl -XGET 'http://address-to-server:port/cluster-name/index-name'时它会在新映射中提供旧数据(一些其他字段,一些已修改)

3 个答案:

答案 0 :(得分:1)

作为我的previous answer,您可以使用重建索引插件来执行映射更改操作

https://github.com/codelibs/elasticsearch-reindexing

并确保新映射有效,并通过检查样本输入数据

采用旧数据

答案 1 :(得分:0)

以下方法可用于重新索引数据。

  1. 将数据从原始索引传输到某个虚拟索引。您可以使用以下命令

    elasticsearch-reindex -f "http://localhost:9200/original_index/type/" -t "http://localhost:9200/dummy_index/type/"

    此命令将在终端中使用。

  2. 删除原始索引。 DELETE /original_index

  3. 创建与原始索引同名并且更改映射的索引。
  4. 将数据从虚拟索引移回原始索引

    elasticsearch-reindex -f "http://localhost:9200/dummy_index/type/" -t "http://localhost:9200/original_index/type/"

  5. 这样您就可以使用新映射恢复数据。

    注意:您需要为此安装npm插件。

    阅读this以安装elasticsearch-reindex命令。

    希望这有帮助。

答案 2 :(得分:-1)

对于那些希望运行reindex脚本来更新相同索引的人。基本上"重新索引到相同的索引"是一个"更新查询" (https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html)。您可以使用与reindex相同的script子句并将其应用于查询结果