Elasticsearch-UpdateByQuery&ReindexAPI

目录

使用场景

Update By Query

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

案例2:更改已有字段类型的Mapping

Reindex

Op Type

version_type


使用场景

  • 一般情况下,我们需要重建索引

    • 索引的mappings发生变更,字段类型更改,分词器及字典更新

    • 索引的Settings发生变更:索引的主分片数发生改变

    • 集群内,集群间做数据迁移

  • ES的内置提供的API

    • Update By Query:在现有索引上重建

    • Reindex:在其他索引上重建索引

Update By Query

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

#写入文档
PUT blogs/_doc/1
{
  "content":"Hadoop is cool",
  "keyword":"hadoop"
}

#修改mapping,增加子字段,使用英文分词器
PUT blogs/_mapping
{
  "properties" : {
    "content" : {
      "type" : "text",
        "fields" : {
          "english" : {
            "type" : "text",
            "analyzer" : "english"
          }
        }
    }
  }
}

GET blogs/_mapping

#写入文档
PUT blogs/_doc/2
{
  "content":"Elasticsearch rocks",
  "keyword":"elasticsearch"
}

#查询新写入的文档:可以查询对应的文档
POST blogs/_search
{
  "query": {
    "match": {
      "content.english": "elasticsearch"
    }
  }
}

#查询mapping修改之前的文档:查询不出对应的文档
POST blogs/_search
{
  "query": {
    "match": {
      "content.english": "Hadoop"
    }
  }
}

  • 解决办法

#更新所有文档
POST blogs/_update_by_query
{
}

#查询mapping修改之前的文档:可以查询对应的文档
POST blogs/_search
{
  "query": {
    "match": {
      "content.english": "Hadoop"
    }
  }
}

案例2:更改已有字段类型的Mapping

  • ES不允许在原有Mappings上对字段类型或者字段的analyzer进行修改

  • 只能创建新的索引,并且设定正确的字段类型,利用Reindex API再重新导入数据

Reindex

  • Reindex API 支持把文档从一个索引拷贝到另外一个索引

  • 使用Reindex API的一些场景

    • 修改索引的主分片数

    • 改变字段的Mapping中的字段类型

    • 集群内数据迁移/跨集群的数据迁移

  • 两个注意点

    • _source字段是enable

    • 先创建好想要的mapping,通过Reindex API

Op Type

  •  _index只会创建不存在的文档
  • 文档如果存在会导致版本冲突
  • 通过op_type: 指定只有文档不存在,才进行索引

version_type

  • version_type属性默认值为internal,即当发生冲突后会覆盖之前的document,而当设置为external则会新生成一个另外的document,可以通过 version_type=external 的方式 设置处理冲突的方式

POST  _reindex
{
  "source": {
    "index": "blogs"
  },
  "dest": {
    "index": "blogs_fix",
    "version_type": "external"
  }
}
 

  •  将op_type设置为create时,只会对发生不同的document进行reindex,(若定时机制的reindex则可以使用该方式只对最新的不存在的document进行reindex)。并且可以将conflicts属性设置为proceed,将冲突进行类似于continue的操作

POST  _reindex
{
  "source": {
    "index": "blogs"
  },
  "dest": {
    "index": "blogs_fix",
    "version_type": "external"
  },
  "conflicts": "proceed"
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值