Elasticsearch Update By Query详解

  1. 使用场景

一般在以下几种情况时,我们需要重建索引:

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

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

集群内,集群间需要做数据迁移

ElastiicSearch 的内置提供的 API

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

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

  1. Update By Query

2.1 案例一: 为索引增加子字段

改变 Mapping , 增加子字段,使用英文分词器

此时尝试对子字段进行查询

虽然有数据已经存在,但是没有返回结果

执行 Update By Query

尝试对 Multi-Fields 查询查询

返回结果

写入文档

PUT blogs/_doc/1

{

"content":"Hadoop is cool",

"keyword":"hadoop"

}

修改 Mapping,增加子字段,使用英文分词器

PUT blogs/_mapping

{

"properties" : {

"content" : {

"type" : "text",

"fields" : {

"english" : {

"type" : "text",

"analyzer":"english"

}

}

}

}

}

写入文档

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"

}

}

}

Update所有文档

POST blogs/_update_by_query

{

}

2.2 案例二:更改已有字段类型的 Mappings

ES 不允许在原有 Mapping 上对字段类型进行修改

只能创建新的索引,并设定正确的字段类型,在重新导入数据

查询

GET blogs/_mapping

PUT blogs/_mapping

{

"properties" : {

"content" : {

"type" : "text",

"fields" : {

"english" : {

"type" : "text",

"analyzer" : "english"

}

}

},

"keyword" : {

"type" : "keyword"

}

}

}

返回输出:

{

"error": {

"root_cause": [

{

"type": "illegal_argument_exception",

"reason": "mapper [keyword] of different type, current_type [text], merged_type [keyword]"

}

],

"type": "illegal_argument_exception",

"reason": "mapper [keyword] of different type, current_type [text], merged_type [keyword]"

},

"status": 400

}

创建新的索引并且设定新的Mapping

PUT blogs_fix/

{

"mappings": {

"properties": {

"content": {

"type": "text",

"fields": {

"english": {

"type": "text",

"analyzer": "english"

}

}

},

"keyword": {

"type": "keyword"

}

}

}

}

Reindx API

POST _reindex

{

"source": {

"index": "blogs"

},

"dest": {

"index": "blogs_fix"

}

}

返回输出:

{

"took" : 17,

"timed_out" : false,

"total" : 2,

"updated" : 0,

"created" : 2,

"deleted" : 0,

"batches" : 1,

"version_conflicts" : 0,

"noops" : 0,

"retries" : {

"bulk" : 0,

"search" : 0

},

"throttled_millis" : 0,

"requests_per_second" : -1.0,

"throttled_until_millis" : 0,

"failures" : [ ]

}

GET blogs_fix/_doc/1

返回输出:

{

"_index" : "blogs_fix",

"_type" : "_doc",

"_id" : "1",

"_version" : 1,

"_seq_no" : 0,

"_primary_term" : 1,

"found" : true,

"_source" : {

"content" : "Hadoop is cool",

"keyword" : "hadoop"

}

}

测试 Term Aggregation

POST blogs_fix/_search

{

"size": 0,

"aggs": {

"blog_keyword": {

"terms": {

"field": "keyword",

"size": 10

}

}

}

}

返回输出:

{

"took" : 4,

"timed_out" : false,

"_shards" : {

"total" : 1,

"successful" : 1,

"skipped" : 0,

"failed" : 0

},

"hits" : {

"total" : {

"value" : 2,

"relation" : "eq"

},

"max_score" : null,

"hits" : [ ]

},

"aggregations" : {

"blog_keyword" : {

"doc_count_error_upper_bound" : 0,

"sum_other_doc_count" : 0,

"buckets" : [

{

"key" : "elasticsearch",

"doc_count" : 1

},

{

"key" : "hadoop",

"doc_count" : 1

}

]

}

}

}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/xixihahalelehehe/article/details/114521624

相关推荐
奔跑吧邓邓子5 小时前
大数据利器Hadoop:从基础到实战,一篇文章掌握大数据处理精髓!
大数据·hadoop·分布式
说私域6 小时前
基于定制开发与2+1链动模式的商城小程序搭建策略
大数据·小程序
hengzhepa7 小时前
ElasticSearch备考 -- Async search
大数据·学习·elasticsearch·搜索引擎·es
GZ_TOGOGO8 小时前
【2024最新】华为HCIE认证考试流程
大数据·人工智能·网络协议·网络安全·华为
狼头长啸李树身9 小时前
眼儿媚·秋雨绵绵窗暗暗
大数据·网络·服务发现·媒体
Json_1817901448010 小时前
商品详情接口使用方法和对接流程如下
大数据·json
Data 31710 小时前
Hive数仓操作(十七)
大数据·数据库·数据仓库·hive·hadoop
bubble小拾14 小时前
ElasticSearch高级功能详解与读写性能调优
大数据·elasticsearch·搜索引擎
ZOHO项目管理软件14 小时前
EDM平台大比拼 用户体验与营销效果双重测评
大数据
不能放弃治疗15 小时前
重生之我们在ES顶端相遇第 18 章 - Script 使用(进阶)
elasticsearch