elasticsearch reindex API

玺烊烊 15天前   阅读数 30 0

1. reindex基本用法

_reindex最基础的用法仅仅只是拷贝文档从一个索引到另一个索引

POST _reindex

{

  "source": {

    "index": "twitter"

  },

  "dest": {

    "index": "new_twitter"

  }

}

 

Reindex并不会尝试设置目标索引,它不会拷贝源索引的settings,因此,在执行_reindex操作之前,需要设置好目标索引的mappings,shard counts, replicas等settings。

POST _reindex
{
  "source": {
    "index": "twitter",
    "_source": ["user", "tweet"]
  },
  "dest": {
    "index": "new_twitter"
  }
}

Reindex支持从远程ES集群中进行reindexing:

POST _reindex
{
  "source": {
    "remote": {
      "host": "http://otherhost:9200",
      "username": "user",
      "password": "pass"
    },
    "index": "source",
    "query": {
      "match": {
        "test": "data"
      }
    }
  },
  "dest": {
    "index": "dest"
  }
}

2. 实战

1、一开始创建好源索引reindex1,以下是它的mapping

2、向源索引里插入数据,三个字段都插入了

3、创建目标索引reindex2,以下是它的mapping,settings只设置了分片数和副本数

4、执行reindex功能

目标索引reindex2的mapping发生了改变

3. 总结

由于源索引中三个字段只source了id和age,没有source title,因此,reindex1只能索引title字段,并不能取到该值,reindex2既不能索引到title字段,也不能取到该值,说明reindex操作是从 _source字段里取(update操作同理)。


注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: