索引重建场景

  • 索引的mappings发生变更:字段类型更改,分词器及字典更新
  • 索引settings发生变更:索引主分片数发生改变
  • 集群内,集群间需要数据迁移

    内置API

    Update By Query

    在现有索引上重建

    Reindex

  • 在其他索引上重建索引,支持把文档从一个索引拷贝到另一个索引

  • 使用场景
    • 修改索引的主分片数
    • 改变字段的Mapping中字段类型
    • 集群内数据迁移/跨集群的数据迁移

      案例1:为索引增加子字段

      ``` // 1.mapping修改 put blogs/_mapping { “properties”:{ “content”:{ “type”:”text”, “field”:{
      1. "english":{
      2. "type":"text",
      3. "analyzer":"english"
      } } } } } // 2.查询,mapping修改前的数据查询不到,修改后的可以查询到 post blogs/_search { “query”:{ “match”:{ “content.english”:”Hadoop” } } } // update_by_query,mapping修改前的数据也可查询到 post blogs/_update_by_query{}
  1. <a name="9Iek1"></a>
  2. #### 案例2:更改已有字段类型的Mappings
  3. - ES不允许在原有Mapping上对字段类型进行修改
  4. - 只能创建新的索引,并且设定正确的字段类型,再重新导入数据

// Reindex API 把旧索引中的数据导入到新索引中 post _reindex { “source”:{ “index”:”blogs” }, “dest”:{ “index”:”blogs_fix” } }

// op_type,目标索引中不存在的文档才索引,避免版本冲突 post _reindex { “source”:{ “index”:”user” }, “dest”:{ “index”:”user2”, “op_type”:”create” } } // 跨集群reindex

  1. 修改elasticsearch.yml(reindex.remote.whitelist:”otherhost:9200,another:9200”),并重启节点
  2. post _reindex { “source”:{
    1. "remote":{
    2. "host":"http://otherhost:9200"
    }, “index”:”source”, “size”:100, “query”:{
    1. "match":{
    2. "test":"data"
    3. }
    } }, “dest”:{
    1. "index":"dest"
    } } // reindex异步操作:Task API
    1. post _index?wait_for_completion=fasle
    2. 使用1返回的task id查看任务信息 get _tasks?detailed=true&actions=*reindex ```