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

发布于 2022-4-26 11:52
浏览
0收藏

线上实战问题 1


两个 Elasticsearch 线上实战问题及解读-开源基础软件社区
脚本的使用

 

两个 Elasticsearch 线上实战问题及解读-开源基础软件社区
你好,我想问一下,在 ES 里我想把两个字段的值是一样的查出来。

 

但是其中一个字段是在一个字典里的,我该怎么写啊?

两个 Elasticsearch 线上实战问题及解读-开源基础软件社区

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

 

我怎么处理呢?

 

两个 Elasticsearch 线上实战问题及解读-开源基础软件社区
需求核心是:比较两个字段,把不同字段值相同的数据取出来。

 

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

 

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

 

逐步定位文档的位置:

两个 Elasticsearch 线上实战问题及解读-开源基础软件社区

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

 

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

 

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

 

正如官方文档解读:

 

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


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

 

两个 Elasticsearch 线上实战问题及解读-开源基础软件社区两个 Elasticsearch 线上实战问题及解读-开源基础软件社区

线上实战问题 2


两个 Elasticsearch 线上实战问题及解读-开源基础软件社区
update_by_query,  ingest 数据预处理 + painless 脚本的使用

两个 Elasticsearch 线上实战问题及解读-开源基础软件社区
update脚本,某个时间字段time,都是 2020-08-10 xx:xx:xx, 如何将该字段所有值替换为2020-10-24 xx:xx:xx, 只改日期,不改时分秒。

 

咋写呢?求大佬们指点啊

两个 Elasticsearch 线上实战问题及解读-开源基础软件社区
需求核心是:

 

 •  批量更新


脑海里里面映射出:update_by_query

 

 •  基于特定值的一部分更新


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

 

 •  脚本实现选型


选型 1:直接 update_by_query 结合 painless

 

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

 

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

 

逐步定位文档的位置:

两个 Elasticsearch 线上实战问题及解读-开源基础软件社区

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

 

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

 

两个 Elasticsearch 线上实战问题及解读-开源基础软件社区
注意:以下是示例DSL。

两个 Elasticsearch 线上实战问题及解读-开源基础软件社区

小结


遇到问题不要慌,

 

拆解问题来帮忙。

 

拆解之后找文档,

 

结合文档和拆解的需求,

 

问题自然迎刃而解。

 

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

 

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

收藏
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐