ElasticSearch | Update By Query | Reindex API

重建索引 | 使用场景

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

ElasticSearch | 重建索引的 API

  • Update By Query:在现有索引上重建;
  • Reindex:在其他索引上重建;

Update By Query | 举几个栗子

准备数据
DELETE blogs/

PUT blogs/_doc/1
{
  "content":"Hadoop is cool",
  "keyword":"hadoop"
}

GET blogs/_mapping
修改 Mapping | 增加子字段 | 使用英文分词器
PUT blogs/_mapping
{
  "properties" : {
    "content" : {
      "type" : "text",
      "fields" : {
        "english" : {
          "type" : "text",
          "analyzer":"english"
        }
      }
    }
  }
}
写入文档
PUT blogs/_doc/2
{
  "content":"Elasticsearch rocks",
    "keyword":"elasticsearch"
}
查询新写入文档
  • 查询到了,新插入的文档已经应用了修改后的 Mapping;
POST blogs/_search
{
  "query": {
    "match": {
      "content.english": "Elasticsearch"
    }
  }
}
查询修改 Mapping 之前写入的文档
  • 没查询到,这条文档写入的时候,索引的 content 字段还没有子字段 english;
POST blogs/_search
{
  "query": {
    "match": {
      "content.english": "Hadoop"
    }
  }
}
_update_by_query | 更新索引中所有文档
POST blogs/_update_by_query
{

}
再次查询修改 Mapping 之前写入的文档
  • 就查到了;
POST blogs/_search
{
  "query": {
    "match": {
      "content.english": "Hadoop"
    }
  }
}

Reindex API | 使用场景

  • 把一个索引中的数据拷贝到另一个索引中;
  • 修改索引的主分片数;
  • 改变字段的 Mapping 中的字段类型;
  • 集群内 / 跨集群数据迁移;

Reindex API | 注意事项

  • _source 字段必须是 enabled 的;
  • 从一个索引拷贝数据到另一个索引的时候,必须提前创建好目标索引;

Reindex API | op_type

  • 只有目标索引中没有这个文档,才会把文档写入;否则文档不会写进去,会导致版本冲突;

Reindex API | 跨集群

  • 需要修改 elasticsearch.yml,并且重启节点;

Reindex API | 异步操作

  • 在 URL 中指定 POST _reindex?wait_for_completion=false,命令执行以后,会返回 Task Id;
  • 然后可以通过 Task API 查看 Task 执行的具体状况;

Reindex API | 举个栗子 | 更新已有索引的字段类型

ElasticSearch 是不允许更新已有索引的字段类型的,如要更新,需新建一个索引,再用 Reindex API 把数据导进去。

查询已有索引 blogs 的 Mapping
GET blogs/_mapping
尝试更改已有索引 blogs 字段的类型
  • 更改失败;
PUT blogs/_mapping
{
    "properties" : {
    "content" : {
      "type" : "text",
      "fields" : {
        "english" : {
          "type" : "text",
          "analyzer" : "english"
        }
      }
    },
    "keyword" : {
      "type" : "keyword"
    }
  }
}
创建新的索引 | 设置索引的 Mapping
DELETE blogs_fix

PUT blogs_fix/
{
  "mappings": {
      "properties" : {
      "content" : {
        "type" : "text",
        "fields" : {
          "english" : {
            "type" : "text",
            "analyzer" : "english"
          }
        }
      },
      "keyword" : {
        "type" : "keyword"
      }
    }    
  }
}
Reindex API | 把现有索引的数据写进新的索引中
POST  _reindex
{
  "source": {
    "index": "blogs"
  },
  "dest": {
    "index": "blogs_fix"
  }
}
在新索引中查询文档
  • 查到了;
GET  blogs_fix/_doc/1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值