专业的编程技术博客社区

网站首页 > 博客文章 正文

在代码工程中ElasticSearch的最佳调用实践

baijin 2024-08-10 13:33:50 博客文章 17 ℃ 0 评论


七天一个世界,足不出户,带你领略世间沧海,带你阅读那些美好


周1&工作日


PS :此文已在技术公众号优先推文



private  class ElasticSearch的最佳调用实践 {


ElasticSearch是一个基于Lucene库开发的开源软件,具有分布式RESTful 风格的搜索和数据分析引擎。

大家或多或少了解或者体验过它的强大之处,我们大部分人平时在操作ES的API,都是在Kibana搜索平台,在这个平台上我们能够迅速的在DevTool中编写Query DSL语句(相当于写SQL),方便查询我们想要的数据。

但是!!!!当大家想投入到生产环境,在代码中调用Elasticsearch的API就没那么顺心了,大家肯定有过以下这样的经历:

ElasticSearch官方客户端体验:

仅仅写了两句超超超级简单的两句条件,就生成了这么多代码。。。如果小编的要求需要实现以下的DSL呢?

是不是瞬间没有了编码的乐趣 ,哈哈哈 。。。。你能不能写出来还不一定呢!如果能写出来的小伙儿,小编愿称你为最强!花费了大量的时间研究高级客户端API,极其不易!

聪明的偷懒的同学肯定还想过下面的方式

丑陋至极!!!不光丑还难以维护!想想如果DSL语句有更改,我们就得在这密密麻麻的字符串中找到对应的行数修改,想想头皮就发麻!

使用SpringBoot ElasticSearch 框架

很遗憾!xdm, 这个方式小编也试过了,一样需要学习成本,将ES官方的高级客户端的进一步封装,可以简单的实现一些查询,遇到复杂的你依然还是束手无策!

那么我们如何优雅地解决问题呢???

某一个深夜,小编在GitHub上发现了一个Json文本处理工具包

JsonPath:通过简单的自定义表达式,找到想要的键值 ,甚至还能设置键值!!

有了查询和修改的功能,小编灵光一闪? ,将Kibana中写好的DSL语句放在项目的Json文件中,项目启动阶段预先读取这些文本存在缓存中, 后续通过Http客户端调用ElasticSearch的相关API,此举动的好处有以下:

1. 你将再也不用关注本地SpringBoot的版本与ES的兼容性

2. 你将再也不用学习ES的高级客户端

3. 每次的DSL语句修改直接在文本中操作,省心快捷方便

可能又有小伙伴要问了,这放在文本中,我怎么去方便快捷的取呢?小编是写Java的,小编就再给大家介绍一个Java中使用的工具包:Hutool

其中有一个API :资源工具-ResourceUtil ,方便地获取resource下的文件转成String(UTF-8)

废话不多说上代码!

1. 将kibana中的DSL语句放入resource下的json文件

2. 项目启动,初始化读取json文件中DSL语句

3. DSL语句执行

后续。。。就是对Json体的解析了,JsonPath你们要好好利用哟!!!

}

PS:采访了作者小哥哥,他说把class定义成private的目的是因为此篇文章是私有原创珍藏,现在特意分享给大家

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表