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

相关推荐
科技小花16 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
weixin_3709763517 小时前
AI的终极赛跑:进入AGI,还是泡沫破灭?
大数据·人工智能·agi
一切皆是因缘际会19 小时前
AI数字分身的底层原理:破解意识、自我与人格复刻的核心难题
大数据·人工智能·ai·架构
上海光华专利事务所19 小时前
跨境电商商标专利管理平台
大数据·产品运营
Elastic 中国社区官方博客20 小时前
ES|QL METRICS_INFO 和 TS_INFO:为你的时间序列数据建立目录
大数据·数据库·elasticsearch·搜索引擎·信息可视化·全文检索
jinanwuhuaguo21 小时前
(第二十七篇)OpenClaw四月的演化风暴:OpenClaw 2026年4月全版本更新的文明级解读
大数据·人工智能·架构·kotlin·openclaw
清晨0011 天前
工业生产实时数据获取方案-TDengine
大数据·时序数据库·tdengine
极创信息1 天前
信创产品认证怎么做?信创产品测试认证的主要流程
java·大数据·数据库·金融·软件工程
Elastic 中国社区官方博客1 天前
Elastic 和 Cursor 合作 加速 上下文工程 与 coding agents
大数据·人工智能·elasticsearch·搜索引擎·全文检索
lzhdim1 天前
SQL 入门 12:SQL 视图:创建、修改与可更新视图
java·大数据·服务器·数据库·sql