CN109145009B - 一种基于SQL检索ElasticSearch的方法 - Google Patents

一种基于SQL检索ElasticSearch的方法 Download PDF

Info

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
Application number
CN201810944469.9A
Other languages
English (en)
Other versions
CN109145009A (zh
Inventor
徐思奥
范渊
龙文洁
刘博�
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Dbappsecurity Technology Co Ltd
Original Assignee
Hangzhou Dbappsecurity Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou Dbappsecurity Technology Co Ltd filed Critical Hangzhou Dbappsecurity Technology Co Ltd
Priority to CN201810944469.9A priority Critical patent/CN109145009B/zh
Publication of CN109145009A publication Critical patent/CN109145009A/zh
Application granted granted Critical
Publication of CN109145009B publication Critical patent/CN109145009B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明涉及一种基于SQL检索ElasticSearch的方法,创建数据库连接池,对输入的SQL语言进行解析,建立与ElasticSearch的对应并将解析后的查询语言拼接为适用于ElasticSearch的查询语句,采用RestClient与数据库连接池建立数据库连接并向ElasticSearch发出检索请求,将返回结果转换为标准输出。本发明不存在因为ElasticSearch版本更新而造成的兼容性问题,RestClient利用应用层http调用传输层tcp,以短连接完成操作,降低系统开销,提高性能,数据库连接池可满足创建多个RestClient的连接需求,同时执行不同SQL,解决高并发问题。

Description

一种基于SQL检索ElasticSearch的方法
技术领域
本发明涉及保密或安全通信装置的技术领域,特别涉及一种基于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的操作类型。
CN201810944469.9A 2018-08-19 2018-08-19 一种基于SQL检索ElasticSearch的方法 Active CN109145009B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 福建星瑞格软件有限公司 一种大数据任务处理方法及计算机设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
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