# 第 10 章 ES-JDBC 查询引擎

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!

# 一、前言

一流企业定标准,二流企业做产品

当然并不是说做产品的公司就是二流,就像 Java 的虚拟机规范,最早是由 Sun 公司定义的,后来各个厂商也都按照规范开发了自己的 JVM 虚拟机,你不能说开发这些虚拟机的公司就二流,他们也是很厉害的公司。

这就像火车轨道、水管接茬以及1米长度的定义,米的长度已经被定义为“光在真空中于1/299792458秒内行进的距离” 这些规范的定义都是为了让所有服务的提供方都能在统一的标准下执行。我的技术组件也是一样,只有统一了标准了才能让所有的服务引用者正常使用。

# 二、需求背景

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

本章节要给大家讲解的是关于 Elasticsearch 的使用,一般做互联网应用开发的研发同学,大部分都接触过类似对数据处理的组件,包括:Elasticsearch、Solr、HBase等。它们一般会用在监控日志的采集和查询、复杂海量数据的分析、分库分表数据的同步汇总等等。

但在早期的 Elasticsearch 发布版本中,如果想用 Java 程序查询,都需要使用 Query DSL 的表达式形式进行查询。其实这种使用方式对于在代码中处理是非常不方便的,也不利于维护,因为它不能向使用数据库一样,有类似 MyBatis 的 ORM 框架进行操作。

但后来的 Elasticsearch 版本中,逐渐发布了 ES 的 JDBC,x-pack-sql-jdbc,在 7.x 版本中已经集成在 Elasticsearch 的代码中。

有了这样的 JDBC 服务,那么就可以把 ES 包装到类似 MyBatis 的 ORM 框架中,之后就可以像使用数据库一样使用 Elasticsearch 服务。

所以,本章节为了让大家更好学习 ES-JDBC,这里把关于 x-pack-sql-jdbc 单独提取出来,看它是如何运行使用的,也能让大家对照着更加简单干净的源码进行学习。另外这里需要知道,x-pack-sql-jdbc 是一个付费的服务,源码可以学习使用,但在应用时会需要授权