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

相关推荐
zhixingheyi_tian22 分钟前
Mapreduce 之 nativetask
大数据·mapreduce
远航计算机2 小时前
职业技能培训机构如何利用QClaw+Skills做豆包GEO:知识库搭建×内容创作×效果监测的完整实操手册
大数据·人工智能·自动化·aigc·火山引擎
IanSkunk2 小时前
视光中心承接近视防控需求,核心是先把服务流程做成标准化工程
大数据
SEO_juper2 小时前
用Google Search Console数据做内容审计:找出网站上哪些页面在“吃白饭“
大数据·人工智能·外贸独立站
独行侠影a4 小时前
Mojo:专为AI而生的“Python++”,能否真正挑战CUDA与C++的统治地位?
大数据·人工智能·深度学习
greenbbLV5 小时前
中小公司积分商城选型:SaaS与私有化方案对比解析
大数据·前端·小程序
半兽先生5 小时前
大模型技术开发与应用——5.大模型Agent开发(CrewAI)
大数据·人工智能·python·机器学习·ai
空杆推不起6 小时前
穿透 Flink CDC 表层用法:数据库日志捕获机制、Flink Source 运行时、端到端一致性底层原理详解
大数据·数据库·flink
跨境生态圈6 小时前
2026跨境出海服务商深度测评:凌赟科技如何用“SEO+GEO双引擎”重构AI时代获客逻辑?
大数据·运维·人工智能·科技·chatgpt
小邓的技术笔记6 小时前
DeepSeek 大模型落地应用与场景实战指南
大数据·人工智能