愚者求师之过,智者从师之长。

有没包装查询中心兄dei~来唠个五块钱儿的嗑儿呗

经验分享 | 作者 God_lockin | 发布于2018年09月27日 | 阅读数:2616

最近要搭建(包装)一个搜索的数据平台,主要技术栈是Java+spring全家,ES 5/6以及ELK全家桶等等。目前想到两个方案:
一、通过Java high level/low level client直连,长期维护连接池以应对峰谷调用,同时维护包括自定义的消息中间件consumer,beats/logstash等等
优点:
1、开发上线比较方便(有现成系统和模块可以直接移植)
2、比较容易开发/包装一些可控的接口提供服务,可以享受Java client里面各种“语法糖”
缺点:
1、兼容性问题,ES5的jar包引入之后要再兼容ES6的就会很麻烦,同时不同版本的client又不兼容彼此的ES集群
2、“语法糖”的局限性,client会包装一些包括查询、聚合…的接口,但是与此同时会牺牲掉很多自由发挥的可能,远不如手写DSL便利
 
二、维护一个操作转发平台,通过http的方式和各ES集群进行交互
优点:
1、灵活性较高,可以添加、调用很多“骚操作”
2、兼容性好,几乎不受ES集群版本限制
3、可以实现更多贴近业务的定制化功能,类似eBay的按时间、doc数…等各维度拆分索引的平台,假设在集群之上的流处理、检索预处理、结果重包装等功能
缺点:
1、学习成本较高,在“素人”使用的时候需要学习ES的查询、操作语法(毕竟sql插件和ES6的sql功能…emmmm…),更多的复杂操作还是需要手写DSL命令
2、系统延迟性高,毕竟不如直接client通过ws(貌似?)直连的效率高,还需要自己维护监控功能组件
 
各位大兄dei有没啥想法一起讨论下?
已邀请:

hufuman

赞同来自: rochy

我做了一套封装,分成三部分

一部分是创建索引部分,自定义了一套xml规范,根据这个规范,可以很简单的从数据库读取数据在ES创建索引,只需要提供mapping,索引名,和sql即可

一部分是搜索部分,只对常用的功能做了抽象和封装,因为大部分场景都只是term,match等简单场景,和脚本等排序

一部分是个小网站,可以提供索引信息的简单查看,sql方式查询es数据,cat的数据,reindex等索引维护功能,同时屏蔽了用户对生产ES的访问权限

目前部门已经有好几个组接入了这套东西,使用简单出错低上手快,有的组已经使用了一段时间了,但是ES的语法都不太了解,甚至有人ES到底是什么都不知道

medcl - 今晚打老虎。

赞同来自:

?

rochy - rochy_he

赞同来自:

Java high level client 使用的已经是 restful 的 API 了,
默认情况下,对于  ES5.X 和 ES6.X 的兼容还是可以的,实在不放心可以自己测试几个应用场景。

famoss

赞同来自:

我们是用的方案2,不过不是让业务直接写dsl,而是用的查询模板。有套配置界面,可以通过sql转es的dsl,同时界面上可以通过简单的功能,测试性能分析,业务只需要传相应的查询模板id就可以使用了。而且可以监控到每个查询模板的性能,如果发现一些变态查询,直接界面关掉对应的查询模板,服务降级,不会影响到整个集群。

通过rest客户端无缝兼容各种es版本,可以方便做一些权限验证等骚操作。 个人感觉 优势大于劣势。

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

可以考虑使用  elasticsearch jest的客户端,跨版本兼容。

要回复问题请先登录注册