一种基于ES实现复杂条件查询的方法技术

技术编号:39301115 阅读:9 留言:0更新日期:2023-11-12 15:52
本发明专利技术提供一种基于ES实现复杂条件查询的方法,属于计算机技术领域,本发明专利技术通过递归实现一种前端组件构造出复杂查询的结构化数据,在后端通过递归将结构化数据转换为ES能够识别的查询JSON。实现了基于ES的复杂查询。实现了基于ES的复杂查询。实现了基于ES的复杂查询。

【技术实现步骤摘要】
一种基于ES实现复杂条件查询的方法


[0001]本专利技术涉及计算机
,尤其涉及一种基于ES实现复杂条件查询的方法。

技术介绍

[0002]随着互联网的快速发展与长年积累,整个互联网的数据量越来越大。对于一般情况数据量不大的场景,很多公司倾向于使用数据库去存储和查询数据,而传统数据库在大量数据读取时往往会遇到查询速度缓慢、运维成本高的问题。所以从海量数据中快速精确检索到用户所需要的信息逐渐成为搜索引擎需要面临的挑战。Elasticsearch(下文简称ES)作为一个强大的分布式的全文搜索引擎能够解决这一问题。
[0003]ES的核心功能是全文搜索和实时聚合。ES将文档存储在分片和副本中,可以支持PB级别的数据存储和处理。同时,ES还支持数据自动分片和负载均衡等分布式特性,可以保证数据的高可用性和可扩展性。
[0004]ES内置了各种查询和聚合方法,包括文本搜索、过滤器、统计、分组、对数据做实时可视化等等。ES支持很多查询方式,其中一种方法叫做"Query DSL"(查询领域特定语言),它是一种基于JSON格式的查询语言,用于描述和执行各种搜索、过滤和聚合操作。Query DSL提供了丰富的查询和聚合方式,可以帮助用户发挥Elasticsearch的强大搜索和分析能力,实现复杂的查询和聚合需求。
[0005]Query DSL的基本结构如下:
[0006][0007]其中,"query"表示需要执行的查询类型,可以是各种可用的查询方式,比如term查询、match查询、range查询、bool查询等等。查询条件是包含在"query"标签下的JSON对象中的,查询条件的具体语法根据不同的查询类型而不同。
[0008]在实际开发应用中,用户通常在前端应用或页面上进行条件的选择,后端服务基于用户的输入条件生成json查询语句调用ES服务进行查询返回结果到前端页面。简单的查询语句可以较容易地构建,而在业务中往往涉及到的且或关系与多层嵌套的查询语句难以通过通用的方法构建出JSON语句交予ES查询。

技术实现思路

[0009]为了解决以上技术问题,本专利技术提供了一种基于ES实现复杂条件查询的方法。可以使用户在前端进行可视化的条件选择,在后端自动生成查询JSON语句进行复杂查询。
[0010]本专利技术的技术方案是:
[0011]一种基于ES实现复杂条件查询的方法,
[0012]通过递归的方式将结构化数据转换为JSON查询语句,使用户在前端进行可视化的条件选择,在后端自动生成查询JSON语句进行复杂查询。
[0013]进一步的,
[0014]将复杂查询划分层级并视同一层级的条件为同级的条件体,划分层级的标准为从左至右每次发生逻辑关系变化时进入下一层级,每个组合查询内部为一个下级层级的条件。同级的条件体可以是单个条件、组合条件。
[0015]构建一个组件α,组件α为一个层级的条件选择,用于生成一个对象obj1,将这类对象定义为关系object,关系object中包含逻辑关系和条件集合list1,用户在组件α中必须选择该层级的逻辑关系:&或者I;“&”表示“且”关系,“|”表示“或关系”。
[0016]确定层级内的逻辑关系后用户可以任意添加该层级的查询条件,查询条件分为两种类型:单个条件与组合条件。
[0017]选择单个条件后生成一个对象并添加到list1中,这类对象定义为条件object,条件object包含一个单个条件的查询所需内容;
[0018]选择组合条件后递归生成一个新的组件α,用于生成新的关系object:obj2,其生成逻辑与obj1相同,并将obj2加入到list1中,以此类推生成复合查询结构。
[0019]再进一步的,
[0020]前端将查询条件结构化生成后,后端需要进行解析并生成JSON查询语句交由ES进行查询。
[0021]后端获取到obj1后,获取逻辑关系relation1与条件集合list,构建基本语句。
[0022]执行如下步骤:
[0023]1)根据relation构建基本语句,如果关系为“且”则构建must的bool语句,“或”则构建should的bool语句:
[0024]2)循环条件集合list,判断每个对象;如果对象其中有逻辑关系relation,则该对象为关系object,反之为条件object;
[0025]如果当前循环对象为条件object,则直接添加条件json到bool语句中;
[0026]如果当前循环对象为关系object,则在当前位置递归执行步骤1),入参为新的关系object。
[0027]本专利技术的有益效果是
[0028]本专利技术可以使用户在前端进行可视化的条件选择,系统在后端自动生成查询JSON语句进行复杂查询。
[0029]本专利技术通过递归的方式能够根据用户查询信息的选择自动化地构建出查询的JSON语句,适用于需要多条件复杂查询的业务场景。
附图说明
[0030]图1是复杂查询的定义示意图;
[0031]图2是生成复合查询示意图。
具体实施方式
[0032]为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例
中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例,基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0033]本专利技术对于复杂查询的定义为:
[0034]1、该查询需要同时满足多个条件;
[0035]2、并且多个条件之间可以存在“且”、“或”的任意逻辑关系组合;
[0036]3、并且可以将组合条件视为一个单个条件,组合条件同样满足多个条件之间可以存在“且”、“或”的任意关系组合。
[0037]例如,假设A、B、C、D、E、F为六个单个条件,“&”表示“且”关系,“|”表示“或关系”。则其构成的A&(B|C)&(D|(E&F))为一个复杂查询,其含义为查询结果需满足:
[0038]1、满足条件A且满足组合条件(B|C)且满足组合条件(D|(E&F));
[0039]2、满足组合条件(B|C)的含义为查询结果需要满足条件B或者条件C二者任一;
[0040]3、满足组合条件(D|(E&F))的含义为查询结果需要满足条件D或者组合条件(E&F)二者任一;
[0041]4、满足组合条件(E&F)的含义为查询结果需要同时满足条件E和F。
[0042]为方便描述,本专利技术将复杂查询划分层级并视同一层级的条件(无论是单个条件还是组合条件)为同级的条件体,划分层级的标准为从左至右每次发本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于ES实现复杂条件查询的方法,其特征在于,通过递归的方式将结构化数据转换为JSON查询语句,使用户在前端进行可视化的条件选择,在后端自动生成查询JSON语句进行复杂查询。2.根据权利要求1所述的方法,其特征在于,将复杂查询划分层级并视同一层级的条件为同级的条件体,划分层级的标准为从左至右每次发生逻辑关系变化时进入下一层级,每个组合查询内部为一个下级层级的条件。3.根据权利要求1所述的方法,其特征在于,同级的条件体可以是单个条件、组合条件。4.根据权利要求2所述的方法,其特征在于,构建一个组件α,组件α为一个层级的条件选择,用于生成一个对象obj1,将这类对象定义为关系object,关系object中包含逻辑关系和条件集合list1,用户在组件α中必须选择该层级的逻辑关系:&或者I;“&”表示“且”关系,“|”表示“或关系”。5.根据权利要求4所述的方法,其特征在于,确定层级内的逻辑关系后用户可以任意添加该层级的查询条件,查询条件分为两种类型:单个条件与组合条件;选择单个条件后生成一个对象并添加到list1中,这类对象定义为条件object,条...

【专利技术属性】
技术研发人员:曲铭张安举崔乐乐
申请(专利权)人:天元大数据信用管理有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1