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

相关推荐
OBOO鸥柏29 分钟前
OBOO鸥柏“触摸屏广告一体机交互”亮相2024中国珠海航展
大数据·人工智能·科技·交互
我是琦琦琦琦1 小时前
flink 同步oracle11g数据表到pg库
大数据·postgresql·oracle·flink
myheartgo-on2 小时前
PySpark——Python与大数据
大数据·python·信息可视化
Mephisto.java2 小时前
【大数据学习 | flume】flume的概述与组件的介绍
大数据·学习·flume
进击的小小学生3 小时前
2024年第45周ETF周报
大数据·人工智能
青云交3 小时前
大数据新视界 -- 大数据大厂之 Impala 性能优化:数据加载策略如何决定分析速度(上)(15/30)
大数据·impala·数据加载策略·分析速度·全量加载·增量加载·优化技巧
逃跑的羊4 小时前
jenkins提交gitee后自动部署
运维·gitee·jenkins
数据猿4 小时前
【金猿案例展】科技日报——大数据科技资讯服务平台
大数据·科技
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ6 小时前
idea 弹窗 delete remote branch origin/develop-deploy
java·elasticsearch·intellij-idea
Matrix706 小时前
HBase理论_HBase架构组件介绍
大数据·数据库·hbase