两个 Elasticsearch 线上实战问题及解读

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 线上实战问题 11、知识点脚本的使用2、问题描述:你好,我想问一下,在 ES 里我想把两个字段的值是一样的查出来。但是其中一个字段是在一个字典里的,我该怎么写啊?

{

 "query": {

   "bool": {

     "must": {

       "script": {

         "script": {

           "source": "doc['user_id']= doc['music.sec_uid']",

           "lang": "painless"

         }

       }

     }

   }

 }

}

比如:我想要查询 user_id 和 sec_uid 一样的数据,但是 sec_uid 是在 music 字典里。


我怎么处理呢?


3、问题分析

需求核心是:比较两个字段,把不同字段值相同的数据取出来。


这个时候,要想到传统的精准匹配搜索或者全文检索搜索都不能解决问题。


需要更高阶的搜索才可以,此时脑子里要快速过文档,当然也可以与查看文档相结合。


逐步定位文档的位置:

image.png

研读官方给出的 Demo,基本就能得到问题的答案。


这里会引申出一个非常重要的知识点,也是实战业务场景反馈最多的检索性能优化特别注意的点:


使用脚本可能会降低搜索速度。


正如官方文档解读:


脚本无法利用Elasticsearch的倒排索引结构或相关优化。有时这可能会导致搜索速度降低。


如果您经常使用脚本来转换索引数据,则可以通过在摄取期间(数据写入前通过 Ingest 管道方式)进行这些更改来加快搜索速度。但是,这通常意味着较慢的索引速度(数据写入速度)。


4、实战解答

PUT test_002

{

 "mappings": {

   "properties": {

     "user_id": {

       "type": "keyword"

     },

     "music": {

       "properties": {

         "sec_uid": {

           "type": "keyword"

         }

       }

     }

   }

 }

}

GET test_002/_mapping

POST test_002/_bulk

{"index":{"_id":1}}

{"user_id":333,"music.sec_uid":444}

{"index":{"_id":2}}

{"user_id":333,"music.sec_uid":333}

{"index":{"_id":3}}

{"user_id":333,"music.sec_uid":555}

POST test_002/_search

{

 "query": {

   "bool": {

     "filter": [

       {

         "script": {

           "script": {

             "source":"doc['user_id']==doc['music.sec_uid']",

             "lang":"painless"

           }

         }

       }

     ]

   }

 }

}

线上实战问题 2

1、知识点

update_by_query,  ingest 数据预处理 + painless 脚本的使用


2、问题描述

update脚本,某个时间字段time,都是 2020-08-10 xx:xx:xx, 如何将该字段所有值替换为2020-10-24 xx:xx:xx, 只改日期,不改时分秒。


咋写呢?求大佬们指点啊


3、问题分析

需求核心是:


批量更新


脑海里里面映射出:update_by_query


基于特定值的一部分更新


脑海里马上映射出:painless 脚本处理


脚本实现选型


选型 1:直接 update_by_query 结合 painless


选型 2:update_by_query 结合 inges t结合 painless 脚本处理


我个人倾向于ingest,个人感觉语法相对友好。


逐步定位文档的位置:

image.png

研读官方给出的Demo,结合拆解的需求,基本就能得到问题的答案。


注意:Ingest 是后来版本的新特性,但到了7.X版本,也已经有很长时间了。大家用的少,但的确非常重要,建议要多用、常用常新!


4、实战解答(非最优解)

注意:以下是示例DSL。


PUT my_index

{

 "mappings": {

     "properties": {

       "date": {

         "type": "keyword"

       }

   }

 }

}

PUT my_index/_doc/2

{

 "date": "2015-01-01T12:10:30Z"

}

PUT _ingest/pipeline/my_pipeline

{

 "description": "use index:my-index",

 "processors": [

   {

     "script": {

       "lang": "painless",

       "source": "ctx.data_new = ctx.date.replace('2015-01-01', '2020-01-01')"

     }

   }

 ]

}

POST my_index/_update_by_query?pipeline=my_pipeline

{

 "query":{

   "match_all":{}

 }

}

GET my_index/_search

小结

遇到问题不要慌,


拆解问题来帮忙。


拆解之后找文档,


结合文档和拆解的需求,


问题自然迎刃而解。


通过拆解问题,得到遇到类似问题的应对策略和方法论比什么都重要!


大家对问题又不同见解或者花式解法,欢迎留言交流。


更多推荐:


重磅 | 死磕 Elasticsearch 方法论认知清单(2020年国庆更新版)


能拿驾照就能通过 Elastic 认证考试!

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
5月前
|
存储 人工智能 自然语言处理
ElasticSearch实战指南必知必会:安装分词器、高级查询、打分机制
ElasticSearch实战指南必知必会:安装分词器、高级查询、打分机制
ElasticSearch实战指南必知必会:安装分词器、高级查询、打分机制
|
4月前
|
安全 大数据 API
elasticsearch|大数据|elasticsearch的api部分实战操作以及用户和密码的管理
elasticsearch|大数据|elasticsearch的api部分实战操作以及用户和密码的管理
63 0
|
7月前
|
监控 搜索推荐 Java
elasticsearch入门实战
elasticsearch入门实战
63 1
|
6月前
|
存储 关系型数据库 数据库
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
|
4月前
elasticsearch使用 scroll 滚动分页实战实例
elasticsearch使用 scroll 滚动分页实战实例
133 0
|
1月前
|
消息中间件 Java 关系型数据库
【二十】springboot整合ElasticSearch实战(万字篇)
【二十】springboot整合ElasticSearch实战(万字篇)
211 47
|
8月前
|
JSON 数据挖掘 数据格式
|
4月前
|
JSON 数据格式
elasticsearch 实战(二)
elasticsearch 实战
35 0
|
4月前
|
JSON Java API
elasticsearch 实战(一)
elasticsearch 实战
67 0
|
4月前
|
JavaScript Java 开发工具
ElasticSearch实战 之 es的安装和使用
ElasticSearch实战 之 es的安装和使用
140 0

热门文章

最新文章