寻找网站建设推广,手机屏网站开发,昆山便宜做网站,网站设计是什么专业一、题目 有个索引task#xff0c;里面的文档长这样 现在需要添加一个字段all#xff0c;这个字段的值是以下 a、b、c、d字段的值连在一起 二、思考
需要把四个字段拼接到一起#xff0c;组成一个新的字段#xff0c;这个就需要脚本#xff0c;
这里有两种方案#xff…
一、题目 有个索引task里面的文档长这样 现在需要添加一个字段all这个字段的值是以下 a、b、c、d字段的值连在一起 二、思考
需要把四个字段拼接到一起组成一个新的字段这个就需要脚本
这里有两种方案
方案一可以使用ingest painless脚本在通过update by query查询所有数据对索引中文档进行更新
方案二使用ingest pianless 脚本然后通过reindex 索引
三、解题 初始化索引和数据
DELETE task
PUT task
POST task/_bulk
{create:{_id:1}}
{a:key,b:mom,c:mom,d:1}
{create:{_id:2}}
{a:key,b:cake mix,c:mom,d:2}
{create:{_id:3}}
{a:key,b:mom,c:cake mix,d:3}
{create:{_id:4}}
{a:cake mix,b:mom,c:mom,d:4}
方案一ingest painless
Step 1、创建 ingest pianless 脚本
脚本可以通过类似python中 三引号的方式编写创建新的字段需要ctx[xx]指定lang 可以不写默认为pianless
PUT _ingest/pipeline/add_all
{description: add abcd all,processors: [{script: {lang: painless, source: ctx[all] ctx[a] ctx[b] ctx[c] ctx[d] }}]
}
Step 2、通过update by query 更新文档
update by query 后面如果要使用pianles脚本需要加并指定脚本的名称
POST task/_update_by_query?pipelineadd_all
{query: {match_all: {}}
}
方案二ingest painless reindex
Step 1、创建 ingest pianless 脚本
获取参数有两种写法
ctx.xxxctx[xxxx]
PUT _ingest/pipeline/add_all
{description: add abcd all,processors: [{script: {lang: painless, source: ctx[all] ctx[a] ctx[b] ctx[c] ctx[d] }}]
}
Step 2、使用reindex
这个再创建一个新索引并将数据导入。 注意pipeline 是写在dest中
POST _reindex
{source: {index: task},dest: {index: task_new,pipeline: add_all}
}
四、总结
update by query 通常用于批量更新可以结合painless 使用创建脚本后一般都会成功需要再结合update by query进行验证运行时是否存在错误。最后一定要检查一下更新后的数据虽然执行过程中没有报错但是不代表执行符合预期 参考资料
Update By Query API | Elasticsearch Guide [8.1] | ElasticIngest pipelines | Elasticsearch Guide [8.1] | ElasticReindex API | Elasticsearch Guide [8.1] | Elastic 送一波福利
福利一
有需要内推JD的同学可以私信或留言我帮您内推流程快
有需要内推JD的同学可以私信或留言我帮您内推流程快
有需要内推JD的同学可以私信或留言我帮您内推流程快
福利二 福利三