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

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

Info

Publication number
CN109145009A
CN109145009A CN201810944469.9A CN201810944469A CN109145009A CN 109145009 A CN109145009 A CN 109145009A CN 201810944469 A CN201810944469 A CN 201810944469A CN 109145009 A CN109145009 A CN 109145009A
Authority
CN
China
Prior art keywords
elasticsearch
sql
retrieval
restclient
database
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.)
Granted
Application number
CN201810944469.9A
Other languages
English (en)
Other versions
CN109145009B (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 (9)

1.一种基于SQL检索ElasticSearch的方法,所述方法包括以下步骤:
步骤1: 创建数据库连接池;
步骤2: 建立SQL语义;
步骤3:输入结构化查询语言SQL;
步骤4:解析查询语言SQL;
步骤5:根据SQL语义和ElasticSearch的Json语义间对应的规则库,将解析后的查询语言SQL拼接为适用于ElasticSearch的查询语句;
步骤6:针对适用于ElasticSearch的查询语句,在数据库连接池中创建RestClient对象与ElasticSearch集群的连接;利用HTTP协议向ElasticSearch集群发出检索请求;
步骤7:将ElasticSearch集群返回的结果,通过转换函数转换为标准输出。
2.根据权利要求1所述的一种基于SQL检索ElasticSearch的方法,其特征在于:所述步骤1中,以Druid创建数据库连接池。
3.根据权利要求2所述的一种基于SQL检索ElasticSearch的方法,其特征在于:所述步骤4包括以下步骤:
步骤4.1:以数据库连接池的SQL异常判断方法对当前查询语言SQL进行异常判断,如存在异常,返回导致异常的原因,返回步骤1;否则,进行下一步;
步骤4.2:获取查询语言SQL的操作类型;
步骤4.3:通过Druid提供的SQL解析方法类,对查询语言SQL的语句进行初步解析,确定是否存在子查询、多表联合查询及SQL的每个部分的内容。
4.根据权利要求3所述的一种基于SQL检索ElasticSearch的方法,其特征在于:所述步骤4.2中,以步骤3输入的查询语言SQL 的第一个单词得到操作类型;所述第一个单词为步骤3输入的查询语言SQL的字符串从0位开始到第一个空格的子字符串。
5.根据权利要求1所述的一种基于SQL检索ElasticSearch的方法,其特征在于:所述步骤5中,根据步骤4的解析结果创建对应的中间对象,以中间对象通过ElasticSearch原生的继承XContentBuilder的对象或Json字符串拼接的方式,得到ElasticSearch检索需要的Json字符串。
6.根据权利要求5所述的一种基于SQL检索ElasticSearch的方法,其特征在于:所述步骤6包括以下步骤:
步骤6.1:根据用户配置的ElasticSearch集群的节点的IP和端口,得到ElasticSearch集群的配置信息;
步骤6.2:根据ElasticSearch集群的配置信息,在数据库连接池中初始化RestClient对象;
步骤6.3:将RestClient数据库连接对象置入数据库连接池;
步骤6.4:利用RestClient提供的方法向ElasticSearch发出检索请求。
7.根据权利要求6所述的一种基于SQL检索ElasticSearch的方法,其特征在于:所述步骤6.1中,配置信息包括数据库IP、端口、数据库对象信息、连接超时时间。
8.根据权利要求6所述的一种基于SQL检索ElasticSearch的方法,其特征在于:所述步骤6.4中,所述方法为performRequest方法,输入的参数包括步骤5得到的适用于ElasticSearch的查询语句、检索方式和检索路径。
9.根据权利要求8所述的一种基于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 true CN109145009A (zh) 2019-01-04
CN109145009B 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)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110020006A (zh) * 2017-07-27 2019-07-16 北京国双科技有限公司 查询语句的生成方法及相关设备
CN110716954A (zh) * 2019-10-15 2020-01-21 北京搜狐新媒体信息技术有限公司 一种Elasticsearch数据查询方法及系统
CN111046060A (zh) * 2019-12-11 2020-04-21 杭州安恒信息技术股份有限公司 一种基于Elasticsearch的数据检索方法、装置、设备、介质
WO2022052639A1 (zh) * 2020-09-10 2022-03-17 北京达佳互联信息技术有限公司 数据查询方法及装置

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

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110020006A (zh) * 2017-07-27 2019-07-16 北京国双科技有限公司 查询语句的生成方法及相关设备
CN110020006B (zh) * 2017-07-27 2021-04-27 北京国双科技有限公司 查询语句的生成方法及相关设备
CN110716954A (zh) * 2019-10-15 2020-01-21 北京搜狐新媒体信息技术有限公司 一种Elasticsearch数据查询方法及系统
CN111046060A (zh) * 2019-12-11 2020-04-21 杭州安恒信息技术股份有限公司 一种基于Elasticsearch的数据检索方法、装置、设备、介质
CN111046060B (zh) * 2019-12-11 2023-04-25 杭州安恒信息技术股份有限公司 一种基于Elasticsearch的数据检索方法、装置、设备、介质
WO2022052639A1 (zh) * 2020-09-10 2022-03-17 北京达佳互联信息技术有限公司 数据查询方法及装置

Also Published As

Publication number Publication date
CN109145009B (zh) 2020-10-27

Similar Documents

Publication Publication Date Title
US11681944B2 (en) System and method to generate a labeled dataset for training an entity detection system
EP3066585B1 (en) Generic indexing for efficiently supporting ad-hoc query over hierarchically marked-up data
US11941034B2 (en) Conversational database analysis
US11544239B2 (en) Low-latency database analysis using external data sources
CN109145009A (zh) 一种基于SQL检索ElasticSearch的方法
US8862458B2 (en) Natural language interface
US9141678B2 (en) Distributed query cache in a database system
CN106934062A (zh) 一种查询elasticsearch的实现方法及系统
US11216474B2 (en) Statistical processing of natural language queries of data sets
US20070208738A1 (en) Techniques for providing suggestions for creating a search query
CN110688397B (zh) 一种基于sql的分布式数据统一访问系统及方法
WO2021120707A1 (zh) 智能问答方法、装置、计算机设备和计算机可读介质
CN110019314B (zh) 基于数据项分析的动态数据封装方法、客户端和服务端
CN107480252A (zh) 一种数据查询方法、客户端、服务端及系统
JP7105982B2 (ja) 構造化レコード取得
US11429607B2 (en) Machine language query management for low-latency database analysis system
US20230090050A1 (en) Search architecture for hierarchical data using metadata defined relationships
US20240119054A1 (en) Phrase Translation for a Low-Latency Database Analysis System
US20230252022A1 (en) Secure And Efficient Database Command Execution Support
CN115329753B (zh) 一种基于自然语言处理的智能数据分析方法和系统
US11803543B2 (en) Lossless switching between search grammars
US11768846B2 (en) Search guidance
Guo Design and Implementation of Travel Website Based on Java Web
CN112988778A (zh) 一种处理数据库查询脚本的方法和装置
US20240061723A1 (en) Identifying Cluster Idleness For Cluster Shutdown

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