CN109145009B - 一种基于SQL检索ElasticSearch的方法 - Google Patents
一种基于SQL检索ElasticSearch的方法 Download PDFInfo
- Publication number
- CN109145009B CN109145009B CN201810944469.9A CN201810944469A CN109145009B CN 109145009 B CN109145009 B CN 109145009B CN 201810944469 A CN201810944469 A CN 201810944469A CN 109145009 B CN109145009 B CN 109145009B
- Authority
- CN
- China
- Prior art keywords
- elasticsearch
- sql
- query language
- query
- database connection
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本发明涉及一种基于SQL检索ElasticSearch的方法,创建数据库连接池,对输入的SQL语言进行解析,建立与ElasticSearch的对应并将解析后的查询语言拼接为适用于ElasticSearch的查询语句,采用RestClient与数据库连接池建立数据库连接并向ElasticSearch发出检索请求,将返回结果转换为标准输出。本发明不存在因为ElasticSearch版本更新而造成的兼容性问题,RestClient利用应用层http调用传输层tcp,以短连接完成操作,降低系统开销,提高性能,数据库连接池可满足创建多个RestClient的连接需求,同时执行不同SQL,解决高并发问题。
Description
技术领域
本发明涉及保密或安全通信装置的技术领域,特别涉及一种基于SQL检索ElasticSearch的方法。
背景技术
ElasticSearch是一个开源的、基于Lucene的搜索服务器,其提供了一个分布式多用户能力的全文搜索引擎。在大数据行业里,ElasticSearch的分布式检索功能便于数据多维度呈现、分析、预测,有利于发挥数据的价值。在国内,多家大型公司,如海量、携程、新浪、百度等都使用ElasticSearch做检索分析。
现时,对于ElasticSearch的功能使用最多的是检索,作为当前流行的企业级搜索引擎,ElasticSearch能够解决人们对于搜索的众多要求,其通过HTTP使用JSON进行数据索引,不支持SQL。因此,在利用ElasticSearch查询方面,大多数人使用TransportClient,这一方面是由于ElasticSearch初次提交时就包含TransportClient,其使用TransportProtocol与ElasticSearch通信,检索效率比较高,另一方面是由于TransportClient的检索条件封装的很好,便于开发者使用。为了进一步方便开发人员对ElasticSearch进行检索,现时还出现了利用TransportClient来采用SQL检索ElasticSearch的操作。
然而,ElasticSearch到目前为止已发布34个版本,每个版本都加入了新的功能和特性,如果开发人员需要使用这些特性,则不仅需要升级ElasticSearch至新的版本,还需要升级应用程序的版本,这是由于TransportClient使用Transport Protocol与ElasticSearch通信,在传输层使用TCP长连接,内部采用RMI技术进行术语编组,而RMI依赖于Java远程消息交换协议JRMP(Java Remote Messaging Protocol),该协议为Java定制,要求服务端与客户端的代码都为java编写,RMI能够让在某个java虚拟机上的对象像调用本地对象一样调用另一个java 虚拟机中的对象上的方法。以上种种导致TransportClient与ElasticSearch实例的版本不一致时,极容易出现兼容性问题,给开发人员和应用程序升级带来负担。
进一步来说,由于TransportClient采用长连接方式,还会给系统增加开销。
发明内容
本发明解决的技术问题是,现有技术中,由于TransportClient使用TransportProtocol与ElasticSearch通信,当TransportClient与ElasticSearch实例的版本不一致时极容易出现兼容性问题,给开发人员和应用程序升级带来负担,且由于TransportClient采用长连接方式,还会给系统增加开销的问题,本发明提供了一种优化的基于SQL检索ElasticSearch的方法。
本发明所采用的技术方案是,一种基于SQL检索ElasticSearch的方法,所述方法包括以下步骤:
步骤1: 创建数据库连接池;
步骤2: 建立SQL语义;
步骤3:输入结构化查询语言SQL;
步骤4:解析查询语言SQL;
步骤5:根据SQL语义和ElasticSearch的Json语义间对应的规则库,将解析后的查询语言SQL拼接为适用于ElasticSearch的查询语句;
步骤6:针对适用于ElasticSearch的查询语句,在数据库连接池中创建RestClient对象与ElasticSearch集群的连接;利用HTTP协议向ElasticSearch集群发出检索请求;
步骤7:将ElasticSearch集群返回的结果,通过转换函数转换为标准输出。
优选地,所述步骤1中,以Druid创建数据库连接池。
优选地,所述步骤4包括以下步骤:
步骤4.1:以数据库连接池的SQL异常判断方法对当前查询语言SQL进行异常判断,如存在异常,返回导致异常的原因,返回步骤1;否则,进行下一步;
步骤4.2:获取查询语言SQL的操作类型;
步骤4.3:通过Druid提供的SQL解析方法类,对查询语言SQL的语句进行初步解析,确定是否存在子查询、多表联合查询及SQL的每个部分的内容。
优选地,所述步骤4.2中,以步骤3输入的查询语言SQL 的第一个单词得到操作类型;所述第一个单词为步骤3输入的查询语言SQL的字符串从0位开始到第一个空格的子字符串。
优选地,所述步骤5中,根据步骤4的解析结果创建对应的中间对象,以中间对象通过ElasticSearch原生的继承XContentBuilder的对象或Json字符串拼接的方式,得到ElasticSearch检索需要的Json字符串。
优选地,所述步骤6包括以下步骤:
步骤6.1:根据用户配置的ElasticSearch集群的节点的IP和端口,得到ElasticSearch集群的配置信息;
步骤6.2:根据ElasticSearch集群的配置信息,在数据库连接池中初始化RestClient对象;
步骤6.3:将RestClient数据库连接对象置入数据库连接池;
步骤6.4:利用RestClient提供的方法向ElasticSearch发出检索请求。
优选地,所述步骤6.1中,配置信息包括数据库IP、端口、数据库对象信息、连接超时时间。
优选地,所述步骤6.4中,所述方法为performRequest方法,输入的参数包括步骤5得到的适用于ElasticSearch的查询语句、检索方式和检索路径。
优选地,所述检索方式的取值为步骤4中的查询语言SQL的操作类型。
本发明提供了一种优化的基于SQL检索ElasticSearch的方法,通过创建数据库连接池,输入结构化查询语言SQL并解析,以SQL语义和ElasticSearch的Json语义间对应的规则库,将解析后的查询语言SQL拼接为适用于ElasticSearch的查询语句后,在数据库连接池中创建RestClient对象与ElasticSearch集群的连接;利用HTTP协议向ElasticSearch集群发出检索请求,将ElasticSearch集群返回的结果,通过转换函数转换为标准输出。本发明中,SQL作为关系式数据库管理系统的标准语言,是最重要的关系数据库操作语言,本发明的技术对于大部分企业的开发人员来说能更为简便的利用ElasticSearch完成查询功能。
本发明的有益效果在于:
1、本发明的技术不存在因为ElasticSearch的版本更新而造成的兼容性问题;
2、RestClient利用应用层http调用传输层tcp,以短连接的形式完成操作,大大降低系统开销,从而提高性能;
3、数据库连接池可以满足创建多个RestClient的连接的需求,可以同时执行不同的SQL,从而解决高并发问题。
具体实施方式
下面结合实施例对本发明做进一步的详细描述,但本发明的保护范围并不限于此。
本发明涉及一种基于SQL检索ElasticSearch的方法,所述方法包括以下步骤。
步骤1: 创建数据库连接池。
所述步骤1中,以Druid创建数据库连接池。
本发明中,Druid是一种开源高效可管理的数据库连接池组件,建立Druid数据库连接池是为了创建多个RestClient的连接,可以同时执行不同的SQL指令,从而解决高并发问题。
步骤2: 建立SQL语义。
步骤3:输入结构化查询语言SQL。
本发明中,结构化查询语言SQL的结构为本领域技术人员公知技术,如,“selectfirstname,age from index where age>=32”。
步骤4:解析查询语言SQL。
所述步骤4包括以下步骤:
步骤4.1:以数据库连接池的SQL异常判断方法对当前查询语言SQL进行异常判断,如存在异常,返回导致异常的原因,返回步骤1;否则,进行下一步;
步骤4.2:获取查询语言SQL的操作类型;
所述步骤4.2中,以步骤3输入的查询语言SQL 的第一个单词得到操作类型;所述第一个单词为步骤3输入的查询语言SQL的字符串从0位开始到第一个空格的子字符串。
步骤4.3:通过Druid提供的SQL解析方法类,对查询语言SQL的语句进行初步解析,确定是否存在子查询、多表联合查询及SQL的每个部分的内容。
本发明中,以数据库连接池的SQL异常判断方法对当前查询语言SQL进行异常判断是指以Druid所提供SQL异常判断方法对输入的SQL进行判断。
本发明中,以步骤3输入的查询语言SQL 的第一个单词得到操作类型。通过Java语言中的String对象的substring方法取步骤3输入的查询语言SQL字符串从0位开始到第一个空格的子字符串,该子字符串即SQL的第一个单词,如在“select firstname,age fromindex where age>=32”中,操作类型为“select”。
本发明中,根据步骤4 通过Durid包提供的SQL解析方法类上对SQL语句进行初步解析,确定是否有子查询、多表联合查询、SQL语句的每个部分的内容,如from、where、limit等。
步骤5:根据SQL语义和ElasticSearch的Json语义间对应的规则库,将解析后的查询语言SQL拼接为适用于ElasticSearch的查询语句。
所述步骤5中,根据步骤4的解析结果创建对应的中间对象,以中间对象通过ElasticSearch原生的继承XContentBuilder的对象或Json字符串拼接的方式,得到ElasticSearch检索需要的Json字符串。
本发明中,举例来说,将SQL中的SELECT转化为POST,而SQL中的DELETE在Json语义中亦为DELETE。
本发明中,根据SQL语句初步解析的结果创建对应的中间对象,根据Durid包解析的MySqlSelectQueryBlock对象获取from的内容,用“,“分割后得到的表名数组赋值给Select对象的List<From>对象,如select对象。
本发明中,由中间对象通过ElasticSearch原生的继承XContentBuilder的对象或Json字符串拼接的方式,完成ElasticSearch检索需要的Json字符串;需要特别提出的是,XContentBuilder 在ElasticSearch RestClient的jar中也有,未继承XContentBuilder的对象需要用到Transport Client的包,此处需避免使用。
步骤6:针对适用于ElasticSearch的查询语句,在数据库连接池中创建RestClient对象与ElasticSearch集群的连接;利用HTTP协议向ElasticSearch集群发出检索请求。
所述步骤6包括以下步骤。
步骤6.1:根据用户配置的ElasticSearch集群的节点的IP和端口,得到ElasticSearch集群的配置信息。
所述步骤6.1中,配置信息包括数据库IP、端口、数据库对象信息、连接超时时间。
步骤6.2:根据ElasticSearch集群的配置信息,在数据库连接池中初始化RestClient对象。
本发明中,RestClient是一种开源组件,其采用基于众所周知的Apache HTTP客户端,并允许在使用HTTP的任何版本中与ElasticSearch集群进行通信,解决了前述TransportClient与ElasticSearch实例的版本不一致时会有兼容性问题。
本发明中,RestClient利用应用层http调用传输层tcp,用完就关掉,是短连接,大大降低系统开销,从而提高性能。
本发明中,步骤6.1中,ElasticSearch集群的配置信息还可以根据用户配置的集群名称,类似数据库名得到。
本发明中,步骤6.2中,举例来说,根据HttpHost对象设置http请求,IP为ElasticSearch集群某个节点的IP,端口为集群RestClient的端口,默认为9200。
步骤6.3:将RestClient数据库连接对象置入数据库连接池。
步骤6.4:利用RestClient提供的方法向ElasticSearch发出检索请求。
所述步骤6.4中,所述方法为performRequest方法,输入的参数包括步骤5得到的适用于ElasticSearch的查询语句、检索方式和检索路径。
所述检索方式的取值为步骤4中的查询语言SQL的操作类型。
本发明中,步骤6.4的检索路径一般为“检索表对象名称”+“/_search”。
步骤7:将ElasticSearch集群返回的结果,通过转换函数转换为标准输出。
本发明中,转换函数是根据需求自主开发的函数,本领域技术人员可以依据需求自行设置。
本发明通过创建数据库连接池,输入结构化查询语言SQL并解析,以SQL语义和ElasticSearch的Json语义间对应的规则库,将解析后的查询语言SQL拼接为适用于ElasticSearch的查询语句后,在数据库连接池中创建RestClient对象与ElasticSearch集群的连接;利用HTTP协议向ElasticSearch集群发出检索请求,将ElasticSearch集群返回的结果,通过转换函数转换为标准输出。本发明中,SQL作为关系式数据库管理系统的标准语言,是最重要的关系数据库操作语言,本发明的技术对于大部分企业的开发人员来说能更为简便的利用ElasticSearch完成查询功能。
本发明的技术不存在因为ElasticSearch的版本更新而造成的兼容性问题,RestClient利用应用层http调用传输层tcp,以短连接的形式完成操作,大大降低系统开销,从而提高性能,数据库连接池可以满足创建多个RestClient的连接的需求,可以同时执行不同的SQL,从而解决高并发问题。
Claims (7)
1.一种基于SQL检索ElasticSearch的方法,所述方法包括以下步骤:
步骤1:以Druid创建数据库连接池;
步骤2:建立SQL语义;
步骤3:输入结构化查询语言SQL;
步骤4:解析查询语言SQL;
步骤5:根据SQL语义和ElasticSearch的Json语义间对应的规则库,将解析后的查询语言SQL拼接为适用于ElasticSearch的查询语句;
步骤6:针对适用于ElasticSearch的查询语句,在数据库连接池中创建RestClient对象与ElasticSearch集群的连接;利用HTTP协议向ElasticSearch集群发出检索请求;
所述步骤6包括以下步骤:
步骤6.1:根据用户配置的ElasticSearch集群的节点的IP和端口,得到ElasticSearch集群的配置信息;
步骤6.2:根据ElasticSearch集群的配置信息,在数据库连接池中初始化RestClient对象;
步骤6.3:将RestClient数据库连接对象置入数据库连接池;
步骤6.4:利用RestClient提供的方法向ElasticSearch发出检索请求;
步骤7:将ElasticSearch集群返回的结果,通过转换函数转换为标准输出。
2.根据权利要求1所述的一种基于SQL检索ElasticSearch的方法,其特征在于:所述步骤4包括以下步骤:
步骤4.1:以数据库连接池的SQL异常判断方法对当前查询语言SQL进行异常判断,如存在异常,返回导致异常的原因,返回步骤1;否则,进行下一步;
步骤4.2:获取查询语言SQL的操作类型;
步骤4.3:通过Druid提供的SQL解析方法类,对查询语言SQL的语句进行初步解析,确定是否存在子查询、多表联合查询及SQL的每个部分的内容。
3.根据权利要求2所述的一种基于SQL检索ElasticSearch的方法,其特征在于:所述步骤4.2中,以步骤3输入的查询语言SQL 的第一个单词得到操作类型;所述第一个单词为步骤3输入的查询语言SQL的字符串从0位开始到第一个空格的子字符串。
4.根据权利要求1所述的一种基于SQL检索ElasticSearch的方法,其特征在于:所述步骤5中,根据步骤4的解析结果创建对应的中间对象,以中间对象通过ElasticSearch原生的继承XContentBuilder的对象或Json字符串拼接的方式,得到ElasticSearch检索需要的Json字符串。
5.根据权利要求1所述的一种基于SQL检索ElasticSearch的方法,其特征在于:所述步骤6.1中,配置信息包括数据库IP、端口、数据库对象信息、连接超时时间。
6.根据权利要求1所述的一种基于SQL检索ElasticSearch的方法,其特征在于:所述步骤6.4中,所述方法为performRequest方法,输入的参数包括步骤5得到的适用于ElasticSearch的查询语句、检索方式和检索路径。
7.根据权利要求6所述的一种基于SQL检索ElasticSearch的方法,其特征在于:所述检索方式的取值为步骤4中的查询语言SQL的操作类型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810944469.9A CN109145009B (zh) | 2018-08-19 | 2018-08-19 | 一种基于SQL检索ElasticSearch的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810944469.9A CN109145009B (zh) | 2018-08-19 | 2018-08-19 | 一种基于SQL检索ElasticSearch的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109145009A CN109145009A (zh) | 2019-01-04 |
CN109145009B true CN109145009B (zh) | 2020-10-27 |
Family
ID=64790101
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810944469.9A Active CN109145009B (zh) | 2018-08-19 | 2018-08-19 | 一种基于SQL检索ElasticSearch的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109145009B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110020006B (zh) * | 2017-07-27 | 2021-04-27 | 北京国双科技有限公司 | 查询语句的生成方法及相关设备 |
CN110716954A (zh) * | 2019-10-15 | 2020-01-21 | 北京搜狐新媒体信息技术有限公司 | 一种Elasticsearch数据查询方法及系统 |
CN111046060B (zh) * | 2019-12-11 | 2023-04-25 | 杭州安恒信息技术股份有限公司 | 一种基于Elasticsearch的数据检索方法、装置、设备、介质 |
CN114168622A (zh) * | 2020-09-10 | 2022-03-11 | 北京达佳互联信息技术有限公司 | 一种基于领域特定语言的数据查询方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649630A (zh) * | 2016-12-07 | 2017-05-10 | 乐视控股(北京)有限公司 | 数据查询方法及装置 |
CN106934062A (zh) * | 2017-03-28 | 2017-07-07 | 广东工业大学 | 一种查询elasticsearch的实现方法及系统 |
CN107133267A (zh) * | 2017-04-01 | 2017-09-05 | 北京京东尚科信息技术有限公司 | 查询elasticsearch集群的方法、装置、电子设备和可读存储介质 |
CN107153535A (zh) * | 2017-03-27 | 2017-09-12 | 武汉斗鱼网络科技有限公司 | 一种操作ElasticSearch的方法及装置 |
CN108388470A (zh) * | 2018-01-26 | 2018-08-10 | 福建星瑞格软件有限公司 | 一种大数据任务处理方法及计算机设备 |
-
2018
- 2018-08-19 CN CN201810944469.9A patent/CN109145009B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649630A (zh) * | 2016-12-07 | 2017-05-10 | 乐视控股(北京)有限公司 | 数据查询方法及装置 |
CN107153535A (zh) * | 2017-03-27 | 2017-09-12 | 武汉斗鱼网络科技有限公司 | 一种操作ElasticSearch的方法及装置 |
CN106934062A (zh) * | 2017-03-28 | 2017-07-07 | 广东工业大学 | 一种查询elasticsearch的实现方法及系统 |
CN107133267A (zh) * | 2017-04-01 | 2017-09-05 | 北京京东尚科信息技术有限公司 | 查询elasticsearch集群的方法、装置、电子设备和可读存储介质 |
CN108388470A (zh) * | 2018-01-26 | 2018-08-10 | 福建星瑞格软件有限公司 | 一种大数据任务处理方法及计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN109145009A (zh) | 2019-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109145009B (zh) | 一种基于SQL检索ElasticSearch的方法 | |
US8447744B2 (en) | Extensibility platform using data cartridges | |
EP3400540B1 (en) | Database operation using metadata of data sources | |
US8959106B2 (en) | Class loading using java data cartridges | |
US8321450B2 (en) | Standardized database connectivity support for an event processing server in an embedded context | |
US7979455B2 (en) | RDF store database design for faster triplet access | |
US8965842B2 (en) | Virtual environment spanning desktop and cloud | |
US20110023055A1 (en) | Standardized database connectivity support for an event processing server | |
US20050289124A1 (en) | Systems and methods for processing natural language queries | |
WO2023221408A1 (zh) | 深度学习框架的算子处理方法、装置、设备和存储介质 | |
US10754628B2 (en) | Extracting web API endpoint data from source code to identify potential security threats | |
CN109308300B (zh) | 一种逻辑运算的处理方法、装置、转换插件及存储介质 | |
CN112860727B (zh) | 基于大数据查询引擎的数据查询方法、装置、设备及介质 | |
CN112579626A (zh) | 多源异构sql查询引擎的构建方法及装置 | |
EP3732587B1 (en) | Systems and methods for context-independent database search paths | |
CN109857757A (zh) | 数据库间的语句转换方法、系统和终端 | |
US8515962B2 (en) | Phased importing of objects | |
US10726004B2 (en) | Enterprise integration processing for mainframe COBOL programs | |
CN108959294B (zh) | 一种访问搜索引擎的方法和装置 | |
CN112988163A (zh) | 编程语言智能适配方法、装置、电子设备和介质 | |
US20210042302A1 (en) | Cost-based optimization for document-oriented database queries | |
US20230023290A1 (en) | Method for managing function based on engine, electronic device and medium | |
CN116010461A (zh) | 数据血缘关系解析方法及装置、存储介质及电子设备 | |
CN106991166A (zh) | 一种大数据处理方法及装置 | |
CN113515285A (zh) | 生成实时计算逻辑数据的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |