一种基于Elasticsearch的专利检索统计引擎

著录项
  • CN202211312098.5
  • 20221025
  • CN115481234A
  • 20221216
  • 陕西融盛知识产权平台有限公司
  • 李扩拉
  • G06F16/332
  • G06F16/332 G06F16/33 G06F16/31 G06F16/35 G06F40/216 G06F40/253 G06F40/279 G06F40/30

  • 陕西省西安市高新区丈八四路20号神州数码西安科技园4栋26层D区
  • 陕西(61)
  • 西安嘉思特知识产权代理事务所(普通合伙)
  • 辛菲
摘要
本发明公开了一种基于Elasticsearch的专利检索统计引擎,包括:标准请求参数获取模块,用于获取标准请求参数;Elasticsearch查询语句转换模块,用于将标准请求参数转换为Elasticsearch查询语句;专利检索模块,用于利用Elasticsearch查询语句在Elasticsearch中进行专利检索;标准响应结果获得模块,用于将Elasticsearch检索结果转换为标准响应结果输出;本发明定义了一种专利检索统计的接口规范,基于Elasticsearch实现专利检索统计引擎,能处理包括复杂条件检索、多维数据统计分析、专利去重文档合并和异步专利检索等在内的多种专利检索统计需求。
权利要求

1.一种基于Elasticsearch的专利检索统计引擎,其特征在于,包括:

标准请求参数获取模块,用于获取标准请求参数;其中,所述标准请求参数表征待处理的专利检索统计需求的属性信息;所述专利检索统计需求包括复杂条件检索、多维数据统计分析、专利去重文档合并和异步专利检索;所述标准请求参数的结构是针对检索输入预先定义的标准的数据结构;

Elasticsearch查询语句转换模块,用于利用标准请求参数与Elasticsearch查询语句的逻辑对应关系,将所述标准请求参数转换为Elasticsearch查询语句;

专利检索模块,用于利用所述Elasticsearch查询语句在Elasticsearch中进行专利检索,得到Elasticsearch检索结果;

标准响应结果获得模块,用于将所述Elasticsearch检索结果转换为标准响应结果输出;其中,所述标准响应结果的结构是针对检索输出预先定义的标准的数据结构。

2.根据权利要求1所述的基于Elasticsearch的专利检索统计引擎,其特征在于,所述标准请求参数的结构,包括:

索引名indexName、专利检索表达式searchExpr、排序属性sortField、数据偏移offset、数据限制limit、统计字段列表statisticsFieldList、去重字段collapseField、异步检索编号asyncSearchId和异步检索需求async;其中,所述排序属性sortField包括排序字段名fieldName和排序方向reverseOrder;异步检索需求async的值表示是否进行异步检索;

所述标准响应结果的结构,包括:

专利文档列表docList、命中数count、去重命中数countAfterCollapse、统计数据statisticsData、异步检索编号asyncSearchId和异步检索状态asyncSearchStatus。

3.根据权利要求2所述的基于Elasticsearch的专利检索统计引擎,其特征在于,所述Elasticsearch查询语句转换模块利用标准请求参数与Elasticsearch查询语句的逻辑对应关系,将所述标准请求参数转换为Elasticsearch查询语句的过程,包括:

将所述标准请求参数中searchExpr的值利用预设的专利检索表达式语句转换方法转换为Elasticsearch查询语句,并赋值到Query DSL中的query属性上;

将所述标准请求参数中sortField的值转换为Elasticsearch查询语句中排序语句的格式,并赋值到Query DSL的sort属性上;

将所述标准请求参数中offset的值赋值到Query DSL中的from属性上;

将所述标准请求参数中limit的值赋值到Query DSL中的size属性上;

针对所述标准请求参数中statisticsFieldList内的每个统计,基于Elasticsearch中的terms分组聚合函数,将该统计对应的值转换为Elasticsearch查询语句中聚合查询语句的格式,构造对应的JSON对象,并赋值到Query DSL的aggs属性上;

将所述标准请求参数中collapseField的值转换为Elasticsearch查询语句中去重查询语句的格式,并赋值到Query DSL的collapse属性上。

4.根据权利要求3所述的基于Elasticsearch的专利检索统计引擎,其特征在于,所述将所述标准请求参数中searchExpr的值利用预设的专利检索表达式语句转换方法转换为Elasticsearch查询语句,包括:

利用预先构建的分词器解析searchExpr中专利检索表达式对应的字符串,得到解析出的多个分词;其中,searchExpr中的专利检索表达式、所述分词器基于预先定义的可扩展的专利检索表达式语法结构构建;

基于所述专利检索表达式语法结构,将所述多个分词处理为标准语法节点的列表;

根据所述标准语法节点的列表生成标准语法树;

利用预先构建的语法转换器,将所述标准语法树转换为Elasticsearch查询语句。

5.根据权利要求3所述的基于Elasticsearch的专利检索统计引擎,其特征在于,所述针对所述标准请求参数中statisticsFieldList内的每个统计,基于Elasticsearch中的terms分组聚合函数,将该统计对应的值转换为Elasticsearch查询语句中聚合查询语句的格式,构造对应的JSON对象,并赋值到Query DSL的aggs属性上,包括:

针对所述标准请求参数中statisticsFieldList内的每个统计,若该统计为单级维度,利用Elasticsearch中的terms分组聚合函数将该单级维度统计对应的字段值转换为Elasticsearch查询语句的格式,得到该单级维度统计对应的Elasticsearch聚合查询语句;其中,statisticsFieldList内的每一项为统计字段statisticsField,代表一个独立的统计;

针对所述标准请求参数中statisticsFieldList内的每个统计,若该统计为多级维度,将该多级维度统计下不同单级维度利用Elasticsearch中的terms分组聚合函数分别得到的Elasticsearch聚合查询语句按顺序嵌套,合并得到该多级维度统计对应的Elasticsearch聚合查询语句;

针对每个统计,以该统计的统计字段为key,对应的Elasticsearch聚合查询语句为value,构造成一个JSON对象,并赋值到Query DSL的aggs属性上。

6.根据权利要求5所述的基于Elasticsearch的专利检索统计引擎,其特征在于,若所述标准请求参数中含有collapseField的值,所述针对所述标准请求参数中statisticsFieldList内的每个统计,基于Elasticsearch中的terms分组聚合函数,将该统计对应的值转换为Elasticsearch查询语句中聚合查询语句的格式,构造对应的JSON对象,并赋值到Query DSL的aggs属性上的过程中,还需要在每个单级维度对应的Elasticsearch聚合查询语句中加入cardinality聚合函数实现去重计数。

7.根据权利要求3所述的基于Elasticsearch的专利检索统计引擎,其特征在于,所述将所述标准请求参数中collapseField的值转换为Elasticsearch查询语句中去重查询语句的格式,并赋值到Query DSL的collapse属性上之后,所述Elasticsearch查询语句转换模块还用于:

在转换得到的Elasticsearch去重查询语句中加入cardinality聚合函数,对符合所述Elasticsearch去重查询语句对应的检索条件的专利进行去重计数,以获得去重后的专利总数。

8.根据权利要求1~7任一项所述的基于Elasticsearch的专利检索统计引擎,其特征在于,所述专利检索模块利用所述Elasticsearch查询语句在Elasticsearch中进行专利检索,得到Elasticsearch检索结果的过程,包括:

步骤a1,判断所述标准请求参数中async是否为true;若是,执行步骤a2;若否,执行步骤a6;

步骤a2,判断所述标准请求参数中asyncSearchId是否为空;若否,执行步骤a3;若是,执行步骤a4;

步骤a3,删除Elasticsearch中asyncSearchId对应的检索结果;并执行步骤a4;

步骤a4,调用Elasticsearch的异步检索接口;

步骤a5,获取新的asyncSearchId;

步骤a6,判断所述标准请求参数中asyncSearchId是否为空;若是,执行步骤a7;若否,执行步骤a9;

步骤a7,调用Elasticsearch的检索接口;

步骤a8,获取实际的专利检索结果;

步骤a9,获取Elasticsearch中asyncSearchId对应的检索结果;执行步骤a10;

步骤a10,判断异步检索是否已完成;若是,得到异步检索状态,并执行步骤a8;若否,执行步骤a11;

步骤a11,得到异步检索状态。

9.根据权利要求8所述的基于Elasticsearch的专利检索统计引擎,其特征在于,所述标准响应结果获得模块将所述Elasticsearch检索结果转换为标准响应结果输出的过程,包括:

若Elasticsearch检索结果为异步检索状态,将所述异步检索状态赋值到标准响应结果中的asyncSearchStatus属性上,并输出赋值后的标准响应结果;

若Elasticsearch检索结果为实际的专利检索结果,将所述实际的专利检索结果转换为标准响应结果,并输出得到的标准响应结果;

若Elasticsearch检索结果的新的asyncSearchId,将所述新的asyncSearchId赋值到标准响应结果中的asyncSearchId属性上,并输出赋值后的标准响应结果。

10.根据权利要求9所述的基于Elasticsearch的专利检索统计引擎,其特征在于,所述若Elasticsearch检索结果为实际的专利检索结果,将所述实际的专利检索结果转换为标准响应结果,并输出得到的标准响应结果,包括:

提取所述实际的专利检索结果的hits.hits属性对应的数组中的每一项,将提取出的各项的source属性转成Map格式的对象,并按顺序添加到标准响应结果中docList的列表中;

将所述实际的专利检索结果的value属性的值赋值到标准响应结果中count的属性上;

在所述实际的专利检索结果的aggregations属性所包含的多个键值对key-value中,确定去重计数对应的key,并将该key对应的value值赋值到标准响应结果中countAfterCollapse的属性上;

从所述实际专利检索结果的aggregations属性所包含的统计结果中,利用预设的统计结果提取转换方法,提取各statisticsField的统计结果,并赋值到标准响应结果中statisticsData的属性上。

说明书
技术领域

本发明属于检索引擎及统计分析领域,具体涉及一种基于Elasticsearch的专利检索统计引擎。

随着人类社会各领域技术的快速发展,涌现出了无数的智慧结晶。同时,人们对这些知识的产权保护意识也在日益加强。作为知识产权的一种,目前全世界累计已有上亿件专利,这些海量的专利蕴含了很高的价值。因此,如何更好地对这些专利的信息进行提取、查询,是实现专利价值利用的基础。随着知识产权领域信息化建设水平的提高,专利的数据管理已经不再是主要问题,目前,专利数据的多维度检索,已经成为了能够解决专利信息查询的关键技术和核心能力。

在专利检索领域,使用者通常需要对专利的各种属性进行复杂的组合条件检索;同时,由于一个专利申请文档可能会对应一到多个专利公开公告文档,有时需要对同一个专利申请的多个文档进行去重。另外,还可能需要满足一些需要消耗大量资源、大量时间的非实时的数据统计分析需求,而现有的可用于专利检索的搜索引擎,比如Elasticsearch等,无法支持复杂的条件检索、专利去重文档合并、多维数据统计分析以及异步专利检索等多种需求。

为了解决现有技术中存在的上述问题,本发明提供了一种基于Elasticsearch的专利检索统计引擎。本发明要解决的技术问题通过以下技术方案实现:

一种基于Elasticsearch的专利检索统计引擎,包括:

标准请求参数获取模块,用于获取标准请求参数;其中,所述标准请求参数表征待处理的专利检索统计需求的属性信息;所述专利检索统计需求包括复杂条件检索、多维数据统计分析、专利去重文档合并和异步专利检索;所述标准请求参数的结构是针对检索输入预先定义的标准的数据结构;

Elasticsearch查询语句转换模块,用于利用标准请求参数与Elasticsearch查询语句的逻辑对应关系,将所述标准请求参数转换为Elasticsearch查询语句;

专利检索模块,用于利用所述Elasticsearch查询语句在Elasticsearch中进行专利检索,得到Elasticsearch检索结果;

标准响应结果获得模块,用于将所述Elasticsearch检索结果转换为标准响应结果输出;其中,所述标准响应结果的结构是针对检索输出预先定义的标准的数据结构。

本发明的有益效果:

本发明实施例在Elasticsearch基础上,通过定义一种专利检索统计的接口规范,实现了一种基于Elasticsearch的专利检索统计引擎,包括标准请求参数获取模块、Elasticsearch查询语句转换模块、专利检索模块和标准响应结果获得模块。其中,标准请求参数获取模块用于获取标准请求参数;Elasticsearch查询语句转换模块用于利用标准请求参数与Elasticsearch查询语句的逻辑对应关系,将所述标准请求参数转换为Elasticsearch查询语句;专利检索模块用于利用所述Elasticsearch查询语句在Elasticsearch中进行专利检索,得到Elasticsearch检索结果;标准响应结果获得模块用于将所述Elasticsearch检索结果转换为标准响应结果输出;其中,所述标准请求参数表征待处理的专利检索统计需求的属性信息;所述专利检索统计需求包括复杂条件检索、多维数据统计分析、专利去重文档合并和异步专利检索;所述标准请求参数的结构是针对检索输入预先定义的标准的数据结构;所述标准响应结果的结构是针对检索输出预先定义的标准的数据结构。可见,本发明实施例的基于Elasticsearch的专利检索统计引擎通过制定标准请求参数及标准响应结果,为专利的检索统计确定了规范,能够基于Elasticsearch实现复杂条件检索、多维数据统计分析、专利去重文档合并、异步专利检索等多种功能,能够满足现有专利检索统计分析领域的多种需求,同时具备相应规范,且支持扩展和优化,为专利检索和统计分析等提供了良好的技术支持。

图1为本发明实施例所提供的一种基于Elasticsearch的专利检索统计引擎的结构示意图;

图2为本发明实施例所提供的基于Elasticsearch的专利检索统计引擎的处理流程示意图;

图3为本发明实施例中标准请求参数与Elasticsearch查询语句的逻辑对应关系的示意图;

图4为本发明实施例中专利检索模块利用Elasticsearch查询语句在Elasticsearch中进行专利检索的流程示意图;

图5为本发明实施例中实际的专利检索结果与标准响应结果的逻辑对应关系的示意图;

图6为本发明实施例中预设的专利检索表达式语句转换方法的流程示意图;

图7为本发明实施例所提供的next函数的算法流程示意图。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了满足现有专利检索统计分析领域中复杂的条件检索、专利去重文档合并、多维数据统计分析以及异步专利检索等多种需求,本发明实施例提供了一种基于Elasticsearch的专利检索统计引擎。

请参见图1所示的基于Elasticsearch的专利检索统计引擎的结构示意图,以及图2所示的基于Elasticsearch的专利检索统计引擎的处理流程示意图,本发明实施例的基于Elasticsearch的专利检索统计引擎可以包括标准请求参数获取模块、Elasticsearch查询语句转换模块、专利检索模块和标准响应结果获得模块。

以下对各个模块的作用分别进行说明。

(一)标准请求参数获取模块

标准请求参数获取模块,用于获取标准请求参数。

其中,标准请求参数表征待处理的专利检索统计需求的属性信息;专利检索统计需求包括复杂条件检索、多维数据统计分析、专利去重文档合并和异步专利检索;当然,本发明实施例中的专利检索统计需求不限于以上。

其中,标准请求参数的结构是针对检索输入预先定义的标准的数据结构。

具体的,为了将复杂的Elasticsearch检索功能封装成简洁、标准的专利检索功能,本发明实施例预先针对检索输入定义了一个标准的数据结构,作为该专利检索统计引擎的标准请求参数的结构。

可选的一种实施方式中,标准请求参数的结构,包括:

索引名indexName、专利检索表达式searchExpr、排序属性sortField、数据偏移offset、数据限制limit、统计字段列表statisticsFieldList、去重字段collapseField、异步检索编号asyncSearchId和异步检索需求async;其中,排序属性sortField包括排序字段名fieldName和排序方向reverseOrder;异步检索需求async的值表示是否进行异步检索。

标准请求参数的结构请具体参见表1所示。

表1标准请求参数的结构

可见,标准请求参数包含多个属性。其中,indexName表示索引名,由于Elasticsearch含有多个索引,indexName用于指定具体用于检索的一个或多个Elasticsearch索引。searchExpr表示专利检索表达式,用于在Elasticsearch中检索专利,示例性的,一种searchExpr可以为标题=神经网络AND人脸识别。fieldName表示排序字段名,比如fieldName可以为申请日,那么专利将按照申请日进行排序;reverseOrder表示排序方向,比如fieldName为申请日时,排序方向为顺序表示按照申请日从前到后进行排序,排序方向为倒序表示按照申请日从后到前进行排序。Offset为一个自然数,指定专利检索返回时跳过多少条专利。Limit也为一个自然数,指定专利检索最多返回多少条专利,也就是分页显示时,每页显示多少条专利。statisticsFieldList表示的统计字段列表含有多个统计字段statisticsField,每一项代表一个独立的统计,其中,每个统计可以是单级维度的,也可以是由多个单级维度组成的多级维度的。示例性的,一种statisticsFieldList可以为:[“申请年,专利类别”,“国家”],其中,申请年、专利类别和国家均为统计字段。“申请年,专利类别”是一个独立的统计,“国家”也是一个独立的统计,且“申请年,专利类别”是多级维度,表示先按照申请年统计专利数量,每个申请年下再按照专利类别统计专利数量,而“国家”是单级维度,表示按照国家统计专利数量。collapseField表示的去重字段可以使得检索到的专利根据该去重字段去重,仅保留一个专利文本,比如collapseField可以为申请号等。asyncSearchId表示的异步检索编号通常可以称为异步检索id,作为检索输入,collapseField的值也可以为空,表示不获取异步检索的响应结果;若是collapseField的值不为空,则其中的异步检索编号用来作为一个结果提取凭据,来获取某次异步检索的响应结果。Async的值为true时,表示需要进行异步检索,也就是不需要等待返回结果,后续有需要时再获取返回结果,当后续有需要期望获取异步检索结果时,则需要给出异步检索编号collapseField来获取。

可以理解的是,标准请求参数中searchExpr、sortField、statisticsFieldList、offset、limit、collapseField、asyncSearchId和async等属性体现了复杂条件检索、多维数据统计分析、专利去重文档合并和异步专利检索等专利检索统计需求。

本发明实施例定义标准数据结构形式的标准请求参数,目的是将基于Elasticsearch的具体的检索统计逻辑封装到黑盒中,使专利检索统计引擎提供简洁统一的应用程序编程接口,后续可在不重构Elasticsearch引擎的基础上进行功能扩展及定制化。

(二)Elasticsearch查询语句转换模块

Elasticsearch查询语句转换模块,用于利用标准请求参数与Elasticsearch查询语句的逻辑对应关系,将标准请求参数转换为Elasticsearch查询语句。

为了实现基于Elasticsearch的专利检索统计,需要将标准请求参数转换成搜索引擎Elasticsearch能够识别和执行的Elasticsearch查询语句。其中,Elasticsearch查询语句采用的语言是JSON格式的领域特定语言Query DSL。

其中,标准请求参数与Elasticsearch查询语句的逻辑对应关系请参见图3所示。图3中左侧方框从上至下依次为标准请求参数中的属性searchExpr、sortField、offset、limit、statisticsFieldList和collapseField。图3中右侧方框内为Elasticsearch查询语句的示例。从图3可见,标准请求参数中的searchExpr属性对应Query DSL中的query属性;标准请求参数中的sortField属性对应Query DSL中的sort属性;标准请求参数中的offset属性对应Query DSL中的from属性;标准请求参数中的limit属性对应Query DSL中的size属性;标准请求参数中的statisticsFieldList属性对应Query DSL中的aggs属性;标准请求参数中的collapseField属性对应Query DSL中的aggs属性和collapse属性。可见,标准请求参数中的一个属性可能会影响Query DSL中的多个属性,如collapseField属性;同样地,Query DSL中的一个属性可能会被标准请求参数中的多个属性影响。如aggs属性。并且,由于Query DSL除了query属性、sort属性、from属性、size属性、aggs属性和collapse属性之外,还具有source属性和track_total_hits属性,这两者和标准请求参数中的属性并没有逻辑关系,需要预先自定义。具体的,本发明实施例将Query DSL中source的值定义为true,表示需要获取专利原始数据;将Query DSL中track_total_hits的值定义为true,表示需要获取命中专利的总数。

可选的一种实施方式中,Elasticsearch查询语句转换模块利用标准请求参数与Elasticsearch查询语句的逻辑对应关系,将标准请求参数转换为Elasticsearch查询语句的过程,包括:

(1),将标准请求参数中searchExpr的值利用预设的专利检索表达式语句转换方法转换为Elasticsearch查询语句,并赋值到Query DSL中的query属性上;

其中,为了布局清楚,Elasticsearch查询语句转换模块将标准请求参数中searchExpr的值利用预设的专利检索表达式语句转换方法转换为Elasticsearch查询语句的过程在后文中予以详细说明。

(2),将标准请求参数中sortField的值转换为Elasticsearch查询语句中排序语句的格式,并赋值到Query DSL的sort属性上;

具体的,直接将sortField下的两个属性fieldName和reverseOrder提取出来,构造成以下格式的语句即可:

其中,fieldName是sortField下的属性;order表示排序;desc表示倒排序;asc表示正排序,均为固定的参数格式,在此不做过多说明

(3),将标准请求参数中offset的值赋值到Query DSL中的from属性上;

该步骤实际上是将源属性值直接赋值到目标属性上,具体语句不做详细说明。其中,源属性对应标准请求参数中offset属性,目标属性对应Query DSL中的from属性。

(4),将标准请求参数中limit的值赋值到Query DSL中的size属性上;

该步骤实际上也是将源属性值直接赋值到目标属性上,具体语句不做详细说明。其中,源属性对应标准请求参数中limit属性,目标属性对应Query DSL中的size属性。

(5),针对标准请求参数中statisticsFieldList内的每个统计,基于Elasticsearch中的terms分组聚合函数,将该统计对应的值转换为Elasticsearch查询语句中聚合查询语句的格式,构造对应的JSON对象,并赋值到Query DSL的aggs属性上;

其中,该步骤(5)可以包括:

针对标准请求参数中statisticsFieldList内的每个统计,若该统计为单级维度,利用Elasticsearch中的terms分组聚合函数将该单级维度统计对应的字段值转换为Elasticsearch查询语句的格式,得到该单级维度统计对应的Elasticsearch聚合查询语句;其中,statisticsFieldList内的每一项为统计字段statisticsField,代表一个独立的统计。

针对标准请求参数中statisticsFieldList内的每个统计,若该统计为多级维度,将该多级维度统计下不同单级维度利用Elasticsearch中的terms分组聚合函数分别得到的Elasticsearch聚合查询语句按顺序嵌套,合并得到该多级维度统计对应的Elasticsearch聚合查询语句。

针对每个统计,以该统计的统计字段为key,对应的Elasticsearch聚合查询语句为value,构造成一个JSON对象,并赋值到Query DSL的aggs属性上。

对上述内容具体说明,统计字段名即为statisticsField的值,根据统计字段名统计专利数量时,本发明实施例使用的是Elasticsearch中的terms分组聚合函数。针对单个统计字段名,也就是单级维度,得到的Elasticsearch聚合查询语句为:

{“terms”:{“field”:<统计字段名>}}

其中,Terms和field是语句固定的参数格式,Terms表示按照字段的分词结果进行统计,Field表示字段。

涉及多级维度统计时,通过将不同级别维度的Elasticsearch聚合查询语句按顺序嵌套起来,合并成一条Elasticsearch聚合查询语句,来实现多级维度统计。例如先按照统计字段名a进行分组聚合,再按照统计字段名b进行分组聚合,再按照统计字段名c进行分组聚合,最终得到的Elasticsearch聚合查询语句如下:

{“terms”:{“field”:“a”},“aggs”:{“_下级聚合”:{“terms”:{“field”:“b”},“aggs”:{“_下级聚合”:{“terms”:{“field”:“c”}}}}}}

可选的一种实施方式中,若标准请求参数中含有collapseField的值,针对标准请求参数中statisticsFieldList内的每个统计,基于Elasticsearch中的terms分组聚合函数,将该统计对应的值转换为Elasticsearch查询语句中聚合查询语句的格式,构造对应的JSON对象,并赋值到Query DSL的aggs属性上的过程中,还需要在每个单级维度对应的Elasticsearch聚合查询语句中加入cardinality聚合函数实现去重计数。

具体的,若标准请求参数中指定了去重字段collapseField,则需要在聚合时加入特殊逻辑,来获取去重后的统计数量。具体是通过加入cardinality聚合函数来实现去重计数,且每一级维度中都需要加入cardinality聚合函数实现去重计数,因此若假设去重字段为d,则上述最终得到的Elasticsearch聚合查询语句变为:

{“terms”:{“field”:“a”},“aggs”:{“_去重计数”:{“cardinality”:{“field”:“d”}},“_下级聚合”:{“terms”:{“field”:“b”},“aggs”:{“_去重计数”:{“cardinality”:{“field”:“d”}},“_下级聚合”:{“terms”:{“field”:“c”},“aggs”:{“_去重计数”:{“cardinality”:{“field”:“d”}}}}}}}}

由于statisticsFieldList属性中包含了多个独立的统计,因此对于每一个统计,都需要构造一个对应的Elasticsearch聚合查询语句。最终,以每一个统计字段为key,对应的Elasticsearch聚合查询语句为value,构造成一个JSON对象,并赋值到Query DSL的aggs属性上。可以理解的是,每一个统计可以是单级维度也可以是多级维度,每一个统计有一个JSON对象。

(6),将标准请求参数中collapseField的值转换为Elasticsearch查询语句中去重查询语句的格式,并赋值到Query DSL的collapse属性上。

为了对专利检索结果去重,只需要构造以下语句并赋值到Query DSL的collapse属性上即可:

{“field”:}

可选的一种实施方式中,将标准请求参数中collapseField的值转换为Elasticsearch查询语句中去重查询语句的格式,并赋值到Query DSL的collapse属性上之后,Elasticsearch查询语句转换模块还用于:

在转换得到的Elasticsearch去重查询语句中加入cardinality聚合函数,对符合Elasticsearch去重查询语句对应的检索条件的专利进行去重计数,以获得去重后的专利总数。

具体的,为了获得去重后的专利总数,还需要使用cardinality聚合函数来对符合检索条件的专利进行去重计数,即在上述已经得到的Elasticsearch查询语句的基础上,在Query DSL的aggs属性中添加一个键值对(key-value),其中,key为”_去重计数”,value为:

{“cardinality”:{“field”:}

通过上述(1)~(6)的转换处理,可以将标准请求参数转换为Elasticsearch查询语句。关于Query DSL语言的格式请参见相关技术理解,在此不对上述各Elasticsearch查询语句的格式,以及其中各参数含义进行详细说明。

(三)专利检索模块

专利检索模块,用于利用Elasticsearch查询语句在Elasticsearch中进行专利检索,得到Elasticsearch检索结果。

专利检索模块的检索行为由标准请求参数中的indexName、asyncSearchId和async三个属性决定,其中,indexName决定在Elasticsearch的哪个索引中进行检索,asyncSearchId和async两个属性决定异步检索行为。

请参见图4,可选的一种实施方式中,专利检索模块利用Elasticsearch查询语句在Elasticsearch中进行专利检索,得到Elasticsearch检索结果的过程,包括:

步骤a1,判断标准请求参数中async是否为true;若是,执行步骤a2;若否,执行步骤a6;

其中,async为true表示进行异步检索,否则表示不进行异步检索。

步骤a2,判断标准请求参数中asyncSearchId是否为空;若否,执行步骤a3;若是,执行步骤a4;

其中,执行到步骤a2表示需要进行异步检索。此时若asyncSearchId不为空,表示携带有之前的异步检索编号,由于此时要进行异步检索,则之前的异步检索编号是无效的,则执行步骤a3删除Elasticsearch中asyncSearchId对应的检索结果,再执行步骤a4调用Elasticsearch的异步检索接口。执行到步骤a2,此时若asyncSearchId为空,则直接执行步骤a4。

步骤a3,删除Elasticsearch中asyncSearchId对应的检索结果;并执行步骤a4;

步骤a4,调用Elasticsearch的异步检索接口;

其中,调用Elasticsearch的异步检索接口表示启动异步检索。

步骤a5,获取新的asyncSearchId;

具体的,步骤a5是针对步骤a4的异步检索给出一个针对本次的新的异步检索编号asyncSearchId作为一个结果提取凭据,由于异步检索是不需要等待返回结果,后续有需要时再获取返回结果,该asyncSearchId用来在后续需要获取异步检索结果时凭借该结果提取凭据提取对应的异步检索结果。

步骤a6,判断标准请求参数中asyncSearchId是否为空;若是,执行步骤a7;若否,执行步骤a9;

其中,执行到步骤a6表示不需要进行异步检索。此时若asyncSearchId为空,则直接执行步骤a7调用Elasticsearch的检索接口。此时若asyncSearchId不为空,表示携带有需要获取异步检索结果的结果提取凭据,则按照该asyncSearchId执行步骤a9。

步骤a7,调用Elasticsearch的检索接口;

可以理解的是,由于此时不进行异步检索,调用Elasticsearch的检索接口启动的是实时检索。

步骤a8,获取实际的专利检索结果;

其中,在步骤a7调用Elasticsearch的检索接口后进行检索,可以得到实际的专利检索结果,即实时的检索结果。

步骤a9,获取Elasticsearch中asyncSearchId对应的检索结果;执行步骤a10;

可以理解的是,获取Elasticsearch中asyncSearchId对应的检索结果实际上是进行异步检索。

步骤a10,判断异步检索是否已完成;若是,得到异步检索状态,并执行步骤a8;若否,执行步骤a11;

其中,如果步骤a10判定异步检索已完成,则得到异步检索状态为“成功”,之后执行步骤a8,执行步骤a8获取实际的专利检索结果其实就是获取该异步检索的结果。如果步骤a10判定异步检索未完成,则执行步骤a11。

步骤a11,得到异步检索状态。

其中,如果经步骤a10进入步骤a11,异步检索状态包括失败或正在运行。

参见图4中的虚线框部分可以理解,本发明实施例最终的Elasticsearch检索结果可能包括三种:第一结果、第二结果和第三结果。其中,步骤a11得到的异步检索状态作为第一结果;步骤a7执行到步骤a8后,获取到的实际的专利检索结果也就是实时的检索结果,作为第二结果;并且,步骤a10执行到步骤a8后,获取到的实际的专利检索结果也就是异步检索结果,也作为第二结果;这两种检索结果都针对对应的专利检索表达式返回了具体的检索内容,因此都属于实际的专利检索结果;步骤a5得到的新的asyncSearchId作为第三结果。

上述步骤中有4处需要与Elasticsearch集进行交互,分别对应Elasticsearch中的四个接口:步骤a7中提及的检索接口(POST/_search)、步骤a4中提及的异步检索接口(POST/_async_search)、步骤a9中提及的获取异步检索结果(GET/_async_search/id)、步骤a3中提及的删除异步检索结果(DELETE/_async_search/id)。其中检索接口和异步检索接口,需要以转化出的Elasticsearch查询语句中的Query DSL为参数,而获取异步检索结果和删除异步检索结果两个接口,需要以标准请求参数中的asyncSearchId属性为参数。

(四)标准响应结果获得模块

标准响应结果获得模块,用于将Elasticsearch检索结果转换为标准响应结果输出。

其中,标准响应结果的结构是针对检索输出预先定义的标准的数据结构。

同样的,为了将复杂的Elasticsearch检索功能封装成简洁、标准的专利检索功能,本发明实施例预先针对检索输出也定义了一个标准的数据结构,作为该专利检索统计引擎的标准响应结果的结构。

可选的一种实施方式中,标准响应结果的结构,包括:

专利文档列表docList、命中数count、去重命中数countAfterCollapse、统计数据statisticsData、异步检索编号asyncSearchId和异步检索状态asyncSearchStatus。

标准响应结果的结构请具体参见表2所示。可以和标准请求参数的结构对应结合来理解。

表2标准响应结果的结构

其中,表1中提及的子结构1是一个Map映射结构,由多个键值对(key-value)组成,其中:

a)key是字符串格式,表示统计字段名。

b)value是对象列表格式,表示该统计字段名对应的分组统计数据,其中每个对象表示统计字段名中单个字段值对应的统计结果,其具体结构参照表3所示的子结构2。

表3子结构2的具体结构

比如针对前文的一种statisticsFieldList:[“申请年,专利类别”,“国家”],统计“申请年,专利类别”中,申请年为上级维度,该统计字段名对应的单个字段值可以为2022年、2021年等;专利类别为下级维度,该统计字段名对应的单个字段值可以为发明、实用新型和外观设计。针对另一统计“国家”,该统计字段名对应的单个字段值可以为美国、中国等。

同标准请求参数,本发明实施例定义标准数据结构形式的标准响应结果,目的是将基于Elasticsearch的具体的检索统计逻辑封装到黑盒中,使专利检索统计引擎提供简洁统一的应用程序编程接口,后续可在不重构Elasticsearch引擎的基础上进行功能扩展及定制化。

可选的一种实施方式中,标准响应结果获得模块将Elasticsearch检索结果转换为标准响应结果输出的过程,包括:包括:

①若Elasticsearch检索结果为异步检索状态,将异步检索状态赋值到标准响应结果中的asyncSearchStatus属性上,并输出赋值后的标准响应结果;

解析Elasticsearch检索结果若为第一结果,则直接将异步检索状态赋值到标准响应结果中的asyncSearchStatus属性上,返回该结果即可。

②若Elasticsearch检索结果为实际的专利检索结果,将实际的专利检索结果转换为标准响应结果,并输出得到的标准响应结果;

解析Elasticsearch检索结果若为第二结果,利用实际的专利检索结果与标准响应结果的逻辑对应关系,将实际的专利检索结果提取、转换为标准响应结果,并输出得到的标准响应结果。

其中,实际的专利检索结果与标准响应结果的逻辑对应关系请参见图5所示。图5中左侧方框为实际的专利检索结果的示例。右侧方框从上之下依次为标准响应结果中的属性docList、count、countAfterCollapse和statisticsData。从图5可见,标准响应结果中的docList属性对应实际的专利检索结果中的hits.hits属性;标准响应结果中的count属性对应实际的专利检索结果中的value属性;标准响应结果中的countAfterCollapse属性和statisticsData属性对应实际的专利检索结果中的aggregations属性。

可选的一种实施方式中,若Elasticsearch检索结果为实际的专利检索结果,将实际的专利检索结果转换为标准响应结果,并输出得到的标准响应结果,包括:

1),提取实际的专利检索结果的hits.hits属性对应的数组中的每一项,将提取出的各项的source属性转成Map格式的对象,并按顺序添加到标准响应结果中docList的列表中;

具体的,Elasticsearch检索结果的hits.hits属性是一个数组,数组中的每一项表示一个命中的专利文档,该步骤需要将其中的每一项提取出来,并将其_source属性转成Map格式的对象,按顺序添加到docList的列表中即可。

2),将实际的专利检索结果的value属性的值赋值到标准响应结果中count的属性上;

该步骤实际上是将源属性值直接赋值到目标属性上。其中,源属性对应实际的专利检索结果的value属性,目标属性对应标准响应结果中count的属性。

3),在实际的专利检索结果的aggregations属性所包含的多个键值对key-value中,确定去重计数对应的key,并将该key对应的value值赋值到标准响应结果中countAfterCollapse的属性上;

具体的,去重命中数countAfterCollapse需要从实际的专利检索结果内的aggregations属性中提取。aggregations由多个键值对(key-value)组成,其中,去重命中数对应的key和前文Elasticsearch查询语句转换模块的介绍中,“(6),将标准请求参数中collapseField的值转换为Elasticsearch查询语句中去重查询语句的格式,并赋值到Query DSL的collapse属性上”所设置的key相对应,即“_去重计数”。该key对应的值下的value就是去重之后的专利总条数,将该value赋值到标准响应结果的countAfterCollapse属性上即可。

4),从实际专利检索结果的aggregations属性所包含的统计结果中,利用预设的统计结果提取转换方法,提取各statisticsField的统计结果,并赋值到标准响应结果中statisticsData的属性上。

具体的,Elasticsearch检索结果的aggregations属性中,包含了需要的统计结果,是键值对形式,其中的键是标准请求参数的statisticsFieldList属性中的每一项统计字段名,即statisticsFieldList中的每一项statisticsField。statisticsField的值中的buckets属性是该statisticsField对应的统计结果,其中,该statisticsField对应的统计结果可能包含多级维度的统计。

其中,预设的统计结果提取转换方法的步骤包括:

步骤b1,对于每一个statisticsField,取出其对应的buckets属性,递归执行步骤b2,将转换得到的对象列表与该statisticsField对应起来,以该statisticsField作为key,以对象列表作为value,构造成一个Map,赋值到标准响应结果的statisticsData属性上,结束流程;

步骤b2,遍历buckets属性,取出其中每一个值,定义为bucket,构造一个对应的空对象,定义为obj;

其中,obj的结构参考前文提及的子结构2。

步骤b3,将bucket中key的值赋值到obj的value属性上,将bucket中doc_count的值赋值到obj的count属性上;

步骤b4,将bucket中的“_去重计数”属性中value的值赋值到obj的countAfterCollapse属性上;

步骤b5,若bucket中的“_下级聚合”属性不为空,则取出“_下级聚合”属性中的buckets属性,递归执行步骤b2,最后将转换得到的对象列表赋值到obj的subLevel属性中。

③若Elasticsearch检索结果的新的asyncSearchId,将新的asyncSearchId赋值到标准响应结果中的asyncSearchId属性上,并输出赋值后的标准响应结果。

解析Elasticsearch检索结果若为第三结果,则直接将新的asyncSearchId赋值到标准响应结果中的asyncSearchId属性上,返回该结果即可。

至此,完成基于Elasticsearch的专利检索统计引擎的全部处理流程。

以下对Elasticsearch查询语句转换模块将标准请求参数中searchExpr的值利用预设的专利检索表达式语句转换方法转换为Elasticsearch查询语句的过程进行说明。请参见图6,可选的一种实施方式中,将标准请求参数中searchExpr的值利用预设的专利检索表达式语句转换方法转换为Elasticsearch查询语句,包括以下步骤:

S61,利用预先构建的分词器解析searchExpr中专利检索表达式对应的字符串,得到解析出的多个分词;其中,searchExpr中的专利检索表达式、分词器基于预先定义的可扩展的专利检索表达式语法结构构建。

S62,基于专利检索表达式语法结构,将多个分词处理为标准语法节点的列表;

S63,根据标准语法节点的列表生成标准语法树;

S64,利用预先构建的语法转换器,将标准语法树转换为Elasticsearch查询语句。

以下对S61~S64具体说明。

针对S61,本发明实施例预先定义了一种可扩展的专利检索表达式语法结构。可选的一种实施方式中,基于预先定义的可扩展的专利检索表达式语法结构构建的任一专利检索表达式,包括:

字段名、运算符和字段值。

其中,字段名表示针对专利的检索字段的名称;可以理解的是,字段名为专利文本的著录项目、文本内容等专利录入信息中出现的内容项目,比如,字段名可以包括申请号、标题、发明人等方面的内容项目,在此不再一一举例。字段名的格式可以包括中文、英文以及符号等任意字符,但是,字段名不含有运算符涉及的字符;比如字段名可以为专利标题、AP、IPC-MAIN等。

字段值包括针对字段名的检索内容;比如期望检索到标题中含有发动机的专利,那么字段名为标题,字段值则为发动机。字段值可以为数字、日期、单独的字符串和带通配符的字符串等等。比如,针对字段值可以为汽车、comput*、20190101等。其中,汽车为单独的字符串;20190101为日期;comput*为带通配符的字符串,其中的*表示通配符,该通配符代表0个或多个字符。

运算符表示对字段名和字段值的运算操作,以及对专利检索表达式中的子表达式进行的运算操作。

本发明实施例中,运算符至少包括以下8种类型。分别为:

(1)逻辑运算符。例如AND、OR、NOT等。具体的,AND表示其两边的检索词同时存在;OR表示其两边的检索词至少出现任意一个;NOT表示排除其后面的检索词。

(2)截词符。例如“*”、“?”、“$”等。其中,双引号内的符号为示例的截词符。截词符用来模糊搜索文件。“*”为无限截词符,用于词尾代替零个、单个或多个字符;“?”常用于词中间,用来代替一个字符;“$”用来代替零个或一个字符。

(3)位置运算符。例如(w)、(n)等。具体的,(W)表示其两侧的检索词必须按前后顺序出现,两侧检索词之间不允许插入其它词,只可能有空格或一个标点符号。(N)表示其两侧的检索词的位置可以互换,两侧检索词之间不允许插入其它词,但允许有空格或标点符号。

(4)同句算符。例如(s)等。具体的,(s)表示被连接的检索词必须同时出现在同一句子中,但不限制被连接的检索词的相对次序以及中间插入词的数量。

(5)同段算符。例如(p)等。具体的,(p)表示被连接的检索词必须同时出现在同一段中,但不限制被连接的检索词的相对次序以及中间插入词的数量。

(6)范围检索符。例如to、>、>=、<、<=、=、==等。具体的,其中,==表示内容完整匹配,其余范围检索符的含义不做说明。

(7)特殊字符。例如“.”、“/”等。其中,双引号内的符号为示例的特殊字符。特殊字符在检索时不具有实际含义,会被忽略。

(8)C-CETS字符。例如%n、/HIGH、/LOW、/SEN、/FREC等。具体的,%n算符可用来检索每组分类号频次,n取值大于1的数字,检索该分类号出现n次数的文献;/HIGH表示拓展检索检索式中分类号本身及上位分组分类号;/LOW表示拓展检索检索式中分类号本身及下位分组分类号;/SEN表示检索分类号位置,支持设置检索分类号的位置范围;/FREC表示检索整个C-SETS分类号出现次数。

关于上述8种运算符的具体含义和使用规则,请参见相关技术理解,在此不做详细说明。

以上任一种运算符均可以连接字段名和字段值,单独或者根据一定的规则组合得到专利检索表达式。比如:“TI=计算机AND说明书=计算设备”,该专利检索表达式由两个子表达式组成:“TI=计算机”、“说明书=计算设备”,任一子表达式包括字段名、运算符和字段值;两个子表达式用AND逻辑运算符相连,表示专利标题中必须包括词“计算机”,并且专利说明书中必须包括词“计算设备”。可以理解的是,该示例中,前后两个子表达式中,字段名分别为TI和说明书;字段值分别为计算机和计算设备;运算符为逻辑运算符AND。

需要说明的是,本发明实施例中,字段名以及运算符具备可扩展性。也就是说,可以根据实际需要自由扩展,并不限于以上示例,因而使得本发明实施例定义的专利检索表达式语法结构具有可扩展性。

本发明实施例可以在定义上述专利检索表达式语法结构后,针对性地为在其规范下的专利检索表达式构建用于解析的分词器。该分词器的工作原理是,根据本发明实施例自定义的空白符集合、符号集合和关键词集合,对专利检索表达式对应的字符串的内容进行拆解,将其分割成多个分词。得到的各个分词并不具备逻辑,仅代表对专利检索表达式对应的字符串分割后的基本单元。

其中,空白符集合由多个空白符构成,空白符用于实现分隔的功能。本发明实施例中的空白符包括空格符、回车符、换行符和制表符。空格符为一个空格;回车符、换行符和制表符分别表示为\r、\n和\t。

符号集合由多个符号构成,涵该了现有的各种常用符号,比如=、==、>、>=、<、<=、(、)、”等等。相比于字段名中使用的符号,以及运算符中使用的符号,符号集合包含的符号范围更大。

关键词集合由多个关键字构成,每个关键词均完整且具有语义,可以为中文、英文或者其余字符等,比如可以为学生、车、bag、and、or、not、to等。

具体的,S61中利用预先构建的分词器解析searchExpr中专利检索表达式对应的字符串,得到解析出的多个分词的过程,包括:

基于预先定义的空白符集合、符号集合、关键词集合,利用预设的next函数,从专利检索表达式对应的字符串中指针指向的当前位置,向后获取专利检索表达式中的下一个分词,并更新指针位置重复向后获取专利检索表达式中的下一个分词的过程,直至无法获取到下一个分词,得到专利检索表达式解析出的多个分词。

其中,本发明实施例对外提供一个next函数,用来从当前指针所指向的位置,向后获取下一个分词。其中,next函数会忽略空白符,任一分词的类型为符号、关键词或者字符串中的一种;字符串为除空白符集合、符号集合和关键词集合中元素之外的字符以及字符组合。

上述过程可以结合图7理解,包括以下步骤:

步骤c1,根据指针指向的当前位置,判断位于当前位置之前的上一次的匹配结果中是否有未处理的匹配结果;若是,执行步骤c2;若否,执行步骤c5;

其中,任意时刻,指针指向的当前位置是专利检索表达式当前待处理的位置。根据指针指向的当前位置,可以获取当前位置之前的上一次的匹配结果,可以是一个匹配结果,也可以是多个匹配结果。每一个匹配结果表示专利检索表达式对应的字符串中,部分字符串在读取后被确认对应内容的所属类型为空白符、符号和关键词中任一。针对一个匹配结果,其有可能被立即确定为分词或者确定为不是分词,此时其为已处理的匹配结果;也有可能因为不确定其后是否有与之相关联的匹配结果,因而不能立即确定其是否为分词,需要留待后续确定,则此时该匹配结果为未处理的匹配结果;也就是说,未处理的匹配结果表示已经确认对应内容的所属类型为空白符、符号和关键词中任一,但并未获得分词判断结果;分词判断结果为:是分词或不是分词。比如,上一次的匹配结果中未处理的匹配结果为关键词“我”,其之所以是未处理的匹配结果是由于关键词集合中还存在关键词“我们”,因而在后续字符的匹配结果未知的情况下,无法立即将关键词“我”判定为分词。

步骤c2,获取上一次未处理的匹配结果;

其中,如果上一次有多个未处理的匹配结果,获取与当前位置距离最近的一个。

步骤c3,判断获取到的上一次未处理的匹配结果是否为空白符;若是,执行步骤c1;若否,执行步骤c4;

具体的,由于空白符仅用作间隔不具有实际含义,因此如果获取到的上一次未处理的匹配结果为空白符,则其不能被确定为分词,将其作为一个已处理的匹配结果,返回步骤c1寻下一个分词。可以理解的是,返回步骤c1之前指针会移动到该空白符之后。

步骤c4,将获取到的上一次未处理的匹配结果确定为分词;

具体的,如果获取到的上一次未处理的匹配结果不是空白符,则可以确定其为分词。

步骤c5,通过指针逐字符后移尝试获取下一个匹配结果;

具体的,指针从当前位置逐个字符后移,在每次的停止位置判断移动过的内容的所属类型是否为空白符、符号和关键词中任一;如果是,将符合的内容确定为一个匹配结果;如果否,则后移指针继续判断。其中,确定出匹配结果时,指针的停止位置即为该匹配结果对应的结束位置。

步骤c6,判断是否能够获取到下一个匹配结果;若否,执行步骤c7;若是,执行步骤c8;

步骤c7,将尝试获取下一个匹配结果前,指针指向的当前位置之后的所有剩余文本确定为分词;

具体的,如果逐个字符后移指针,均无法获取下一个匹配结果,则将尝试获取下一个匹配结果前,指针指向的当前位置之后的所有剩余文本确定为分词。

步骤c8,判断获取到的下一个匹配结果对应的结束位置和尝试获取下一个匹配结果前指针指向的当前位置之间是否有文本;若是,执行步骤c9;若否,执行步骤c10;

具体的,如果逐个字符后移指针能够获取下一个匹配结果,则可以获取该下一个匹配结果对应的结束位置,与尝试获取下一个匹配结果前指针指向的当前位置之间的内容,确认该内容是否是文本。

步骤c9,将该文本对应的部分确定为分词,并暂存获取到的下一个匹配结果;

具体的,如果该下一个匹配结果对应的结束位置,与尝试获取下一个匹配结果前指针指向的当前位置之间有文本,则直接将该文本对应的部分确定为分词,完成本次的分词解析,同时,暂存获取到的下一个匹配结果,以留待下一次确定是否为分词。此时,可以理解的是,指针指向下一个匹配结果的结束位置。

步骤c10,判断获取到的下一个匹配结果是否为空白符;若是,执行步骤c1;若否,执行步骤c11;

具体的,如果该下一个匹配结果对应的结束位置,与尝试获取下一个匹配结果前指针指向的当前位置之间没有文本,还需要判断该获取到的下一个匹配结果是否为空白符,如果是,则其不能被确定为分词,将其作为一个已处理的匹配结果,返回步骤c1寻下一个分词,可以理解的是,返回步骤c1之前指针会移动到该空白符之后。如果不是,则执行步骤c11。

步骤c11,将获取到的下一个匹配结果确定为分词。

针对S62,由于分词器获得的分词并不体现专利检索表达式的语法,因此需要对分词进行判断和处理,将所有分词处理成符合专利检索表达式语法结构的标准语法节点。S62可以包括以下步骤:

S621,从分词器获取下一个分词;根据该分词获取标准语法节点,并判断节点是否为空;若是,则结束流程;若否,执行S622;

其中,首次执行对应的下一个分词为第一个分词;标准语法节点表示内容类型属于字段名、运算符或字段值中任一种;节点为空表示从分词器无法获取到下一个分词。根据该分词获取标准语法节点的过程在后文说明。如果节点为空表示所有分词已经处理完成,此时标准语法节点的列表已经构建完成,因此结束流程。如果节点不为空则表示还需要继续进行处理,因此执行S622。

S622,判断该标准语法节点是否不为左方括号;若是,执行S623;若否,执行S624;

S623,将该标准语法节点添加到标准语法节点的列表,并重复S621;

具体的,专利检索表达式中,需要检索字符串时,通常以左方括号和右方括号进行限定。比如,针对一些日期范围进行检索或者针对一些数量范围进行检索时,如检索申请日为20220901至20220916的专利,专利检索表达式为APD:[20220901TO 20220916],其中APD为申请日字段名的缩写。因此,需要针对每个标准语法节点,先判断其是否是左方括号;如果该标准语法节点不是左方括号,表示其可以作为一个单独的标准语法节点,因此,可以将该标准语法节点添加到标准语法节点的列表。如果该标准语法节点是左方括号,表示其不能作为一个单独的标准语法节点,需要到左右方括号之间的内容进行判断。

S624,从分词器获取下一个分词;根据该分词获取标准语法节点;并判断是否满足节点为空或节点内容不是字符串;若是,则抛出异常,中止流程;若否,执行S625;

具体的,如果节点为空表示需要结束流程,如果节点内容不是字符串则不符合专利检索表达式中左右方括号的正常定义,表示出现异常,出现上述任一种情况则流程需要中止。如果节点不为空且节点内容是字符串则表示状态正常,需要继续执行S625。

S625,从分词器获取下一个分词;根据该分词获取标准语法节点;并判断是否满足节点为空或节点内容不是字符“to”;若是,则抛出异常,中止流程;若否,执行S626;

具体的,专利检索表达式中左方括号和右方括号进行字符串检索时,根据规定,字符串中应当有一个字符“to”,如果节点内容不是字符“to”则表示出现异常。如果节点不为空且节点内容是字符“to”,则表示状态正常,需要继续执行S626。需要说明的是,本发明实施例中的字符“to”并不分大小写。

S626,从分词器获取下一个分词;根据该分词获取标准语法节点;并判断是否满足节点为空或节点内容不是字符串;若是,则抛出异常,中止流程;若否,执行S627;

可以理解的是,S624是用来判断左方括号和字符“to”之间的内容,而S626是用来判断字符“to”和右方括号之间的内容,执行方式是类似的。

S627,从分词器获取下一个分词;根据该分词获取标准语法节点;并判断是否满足节点为空或节点内容不是右方括号;若是,则抛出异常,中止流程;若否,执行S628;

具体的,如果节点为空或节点内容不是右方括号,表示出现异常;如果节点不为空且节点内容是右方括号,表示状态正常且已经查到左右方括号之间的全部内容。

S628,将之前获取到的所有标准语法节点按顺序合并成一个字符串语法节点,并将其添加到标准语法节点的列表,然后重复S621;

具体的,将S621~S627获取到的所有标准语法节点按顺序合并成一个字符串语法节点,其中,字符串语法节点为标准语法节点的一种特殊类型。将字符串语法节点添加到标准语法节点的列表后重复S621,直至S621从分词器获取下一个分词,根据该分词获取标准语法节点时,判断节点为空,则结束流程,得到最终的标准语法节点的列表。

其中,根据该分词获取标准语法节点,包括以下步骤:

步骤d1,若该分词的类型不是符号,则直接将该分词包装成一个普通的标准语法节点;否则,执行步骤d2;

步骤d2,若该分词不是英文形式的双引号,则直接将该分词包装成一个普通的标准语法节点;否则,执行步骤d3;

步骤d3,判断是否能够向后查到下一个匹配的双引号;若否,则抛出异常;若是,执行步骤d4;

步骤d4,将两个双引号之间的内容包装成一个字符串语法节点。

其中,步骤d1中的符号即为符号集合中的元素。步骤d3中下一个匹配的双引号为英文形式的一对双引号的后一个;普通的标准语法节点是相对于字符串语法节点这种特殊的标准语法节点而言的。

针对S63,需要考虑不同运算符的语义以及优先级,生成的标准语法树只有一个最终的根节点,每个节点可能有0~2个子节点,所有的叶子节点都是字段名或字段值,所有的内部节点都是运算符。S63包括:

S631,定义一个用于存放字段名节点、字段值节点或子表达式根节点的栈valueStack,并定义一个用于存放运算符节点的栈symbolStack;

其中,valueStack和symbolStack的初始状态为空。

S632,定义一个指针i,指向nodeList中当前待处理的节点的位置;

其中,nodeList表示标准语法节点的列表。

S633,若i大于或等于nodeList中的节点总数,执行S634;否则,执行S635;

具体的,若i大于或等于nodeList中的节点总数表示所有节点已经处理完成。

S634,从当前symbolStack中取出一个运算符节点a,再从当前valueStack中取出两个节点b和c,以节点a作为运算符,以节点b作为左子节点,以节点c作为右子节点,将这三个节点构造成一个双目运算节点,再将该双目运算节点压入当前valueStack,重复该步骤直至当前symbolStack为空,执行S6312;

其中,a、b、c仅表示节点的代号,并不用于限定节点内容。

S635,从nodeList中获取i位置的节点n,并将i加1处理;若节点n的分词类型为字符串,执行S636;否则,执行S637;

S636,若节点n的前一个节点的分词类型也为字符串,将节点n以及一个AND运算符压入当前valueStack,然后重复S633;若节点n的前一个节点的分词类型不为字符串,仅将节点n压入当前valueStack,然后重复S633;

S637,若当前symbolStack为空,则将节点n压入当前symbolStack,然后重复S633;否则,执行S638;

S638,若节点n为左小括号,则将节点n压入当前symbolStack,然后重复S633,否则,执行S639;

S639,查看当前symbolStack的栈顶节点t的优先级,若节点n的优先级小于或等于栈顶节点t的优先级,执行S6310;否则,执行S6311;其中,各运算符的优先级是预先定义的;

S6310,将栈顶节点t取出,再从当前valueStack中取出两个节点e和f,以栈顶节点t作为运算符,以节点e作为左子节点,以节点f作为右子节点,将这三个节点构造成一个双目运算节点,再将该双目运算节点压入当前valueStack,然后重复S639;

同样的,t、e、f仅表示代号,并不用于限定节点内容。

S6311,将节点n压入当前symbolStack,然后重复S633;

S6312,判断当前valueStack中是否仅剩余一个节点,若是,将该剩余节点作为最终生成的标准语法树的根节点;若否,则抛出异常,停止流程。

可以理解的是,得到最终生成的标准语法树的根节点后,根据节点之间的已知关系,可以得到标准语法树。

S63中生成的标准语法树包含了整个专利检索表达式的逻辑语义,该语义是通用的,与具体的数据格式、数据存储方式、数据查询引擎无关。因此,能够适配各种数据格式、数据存储方式、数据查询引擎以及适配于异构检索。

关于S63中各步骤的具体处理过程请参见相关技术理解,在此不做详细说明。

其中,本发明实施例中运算符优先级是预先定义的,比如0或者50、70等数值,在此不进行详细说明。

针对S64,可选的一种实施方式,可以包括以下步骤:

S641,获取当前处理的根节点r,执行S642;

其中,首次执行时,当前处理的根节点r为标准语法树的根节点。可以理解的是,在首次执行之后,当前处理的根节点r可为标准语法树的根节点以下层级的根节点。

S642,若当前处理的根节点r不是双目运算节点,则抛出异常,中止流程;否则,执行S643;

可以理解的是,当前处理的根节点r在正常状态下应当是双目运算节点。

S643,若当前处理的根节点r的运算符是逻辑运算符,则执行S644;否则,执行S647;

S644,取出当前处理的根节点r的左子树的根节点r-left,递归执行S642获得当前处理的根节点r的左子句left;

可以理解的是,当前处理的根节点r的左子树的根节点r-left递归执行S642时,作为当前处理的根节点r。

S645,取出当前处理的根节点r的右子树的根节点r-right,递归执行S642获得当前处理的根节点r的右子句right;

可以理解的是,当前处理的根节点r的右子树的根节点r-right递归执行S642时,作为当前处理的根节点r。

关于左子树和右子树的概念请结合相关技术理解,在此不做详细说明。

S646,根据当前处理的根节点r的逻辑运算符,将其左子句left和右子句right合并为一个Elasticsearch的bool查询语句;并返回S643;

关于左子句left和右子句right的概念请结合相关技术理解,在此不做详细说明。

S647,当前处理的根节点r的左子树作为字段名k,右子树作为字段值v,根据当前处理的根节点r的运算符op,依据该运算符op对应的转换算法将k和v转换成Elasticsearch中的查询语句;并返回S643。

可以理解的是,执行至S647时,一定存在当前处理的根节点r的左子树作为字段名k,右子树作为字段值v。

其中,不同运算符op的转换算法具有不同的算法逻辑。比如,当前处理的根节点r的运算符op为匹配符号“=”时,根据当前处理的根节点r的运算符op,依据对应的转换算法将k和v转换成Elasticsearch中的查询语句,包括以下步骤:

步骤g1,若v的分词类型为字符串,则执行步骤g2;否则,执行步骤g3;

步骤g2,根据v的内容,将k和v包装成一个对应的Elasticsearch查询语句,结束流程;

其中,Elasticsearch查询语句包括Elasticsearch的term查询语句、range查询语句或wildcard查询语句,上述查询语句的具体概念请参见相关技术理解,在此不做说明。

步骤g3,若v的运算符不是逻辑运算符,则抛出异常,结束流程;否则执行步骤g4;

步骤g4,取出v的左子树的根节点v-left,递归执行步骤g1,获得v的左子句left;

步骤g5,取出v的右子树的根节点v-right,递归执行步骤g1,获得v的右子句right;

步骤g6,根据v的逻辑运算符,将v的左子句left和右子句right合并为一个Elasticsearch的bool查询语句,结束流程。

通过上述S61~S64,可以将标准请求参数中searchExpr的值转换为Elasticsearch查询语句。在此不再给出具体示例进行详细说明。

为了便于理解本发明实施例的基于Elasticsearch的专利检索统计引擎的处理过程,以下以两个具体的实施例进行说明。

需要强调的是,以下实施例中未作解释的语句参数,均为Query DSL中本身固有的参数,无需进行详细说明。

实施例一:

该实施例展示一个专利文档同步检索的过程。以下是其标准请求参数。

下一步需要根据标准请求参数构造Elasticsearch的Query DSL,即转换为Elasticsearch查询语句。为了布局清晰,便于识别,以下所有实施例中各语句以表格形式给出,表格中的具体内容为语句内容。

首先构造一个基础语句,然后将标准请求参数中的offset属性和limit属性分别赋值到Query DSL的from和size属性上:

然后,专利检索表达式经语法解析和转换得到的Elasticsearch查询语句为:

将该语句赋值到Query DSL的query属性上:

标准请求参数中的sortField字段转为Elasticsearch查询语句为:

[{"公开日":{"order":"desc"}}]

将该语句赋值到Query DSL的sort属性上:

标准请求参数的statisticsFieldList中包含两项独立的统计,第一项统计是先按照公开年统计数量、每个公开年下再按照申请年统计数量。因此需要构造一个嵌套的聚合统计语句:

{"terms":{"field":"公开年"},"aggs":{"_下级聚合":{"terms":{"field":"申请年"}}}}

又由于标准请求参数中指定了去重字段“申请号”,因此在聚合统计语句中需要加入去重计数的语句:

同理,可得到第二项统计的语句:

{"terms":{"field":"国家"},"aggs":{"_去重计数":{"cardinality":{"field":"申请号"}}}}

将这两项统计的名称及其对应语句合并成一个JSON对象,并赋值到Query DSL的aggs属性上:

标准请求参数中的collapseField字段转为Elasticsearch查询语句为:

{"field":"申请号"}

将该语句赋值到Query DSL的collapse属性上:

另外,为获得去重后的专利总数,需要在aggs属性中添加一项单独的去重计数:

至此,得到了由标准请求参数转换而来的完整Elasticsearch查询语句。由于标准请求参数中的async属性为false且asyncSearchId属性为空,因此需要调用Elasticsearch的_search接口进行检索,并等待实际的专利检索结果。实际的专利检索结果的示例如下(已省略无关属性):

下一步需要将该实际的专利检索结果转换成标准响应结果。首先构造一个标准响应结果,并将检索结果中的hits.total.value属性赋值到标准响应结果的count属性上:

属性 值 count 49629

然后从hits.hits属性中将所有命中的专利文档的_source属性提取出来,转成Map格式的对象,添加到标准响应结果的docList列表中:

属性 值 docList [专利文档1,专利文档2,专利文档3...] count 49629

然后将aggregations.”_去重计数”.value属性赋值到标准响应结果的countAfterCollapse属性上:

属性 值 docList [专利文档1,专利文档2,专利文档3...] count 49629 countAfterCollapse 44903

最后,从aggregations属性中提取所有的统计数据,以”公开年,申请年”这一项统计为例,第一级维度“公开年”的统计结果为:

属性 值 value 2021 count 27438 countAfterCollapse 26684

第二级维度“申请年”的统计结果为:

再将不同级别维度的层级关系建立好(通过subLevel属性),将所有统计项的统计结果合并在一起,然后赋值到标准响应结果的statisticsData属性上(为便于表示,此处以JSON格式展示statisticsData属性的内容),最终即可得到完整的标准响应结果:

(一)实施例二:

该实施例展示展示一个专利文档异步检索的过程。该过程分为两步,第一步是发起一个异步检索,第二步是获取该异步检索结果。以下是发起专利异步检索时的标准请求参数。

下一步是将该标准请求参数转为Elasticsearch的Query DSL。属性转换对应表如下:

因此,由标准请求参数转换而来的完整Elasticsearch查询语句如下:

由于标准请求参数中的async属性为true,因此需要调用Elasticsearch的_async_search接口进行异步检索。异步检索的结果示例如下(已省略无关属性):

此时,就拿到了异步检索编号,即异步检索id。然后构造一个标准响应结果,并将该异步检索id赋值到asyncSearchId属性即可:

第二步,用刚才得到的asyncSearchId获取对应的异步检索结果,这一请求的标准请求参数如下:

由于标准请求参数中的async属性为false且asyncSearchId属性不为空,因此需要直接使用该异步检索id调用Elasticsearch获取异步检索结果的接口:

检索结果的示例如下(已省略无关属性):

该异步检索结果与同步检索结果的结构类似,区别是异步检索结果中多了一个id属性,表示该异步检索id,同时实际的检索结果放在了response属性中,因此需要将response中的检索结果转换成标准响应结果。属性转换对应表如下:

最终即可得到完整的标准响应结果:

综上,本发明实施例在Elasticsearch基础上,通过定义一种专利检索统计的接口规范,实现了一种基于Elasticsearch的专利检索统计引擎,包括标准请求参数获取模块、Elasticsearch查询语句转换模块、专利检索模块和标准响应结果获得模块。其中,标准请求参数获取模块用于获取标准请求参数;Elasticsearch查询语句转换模块用于利用标准请求参数与Elasticsearch查询语句的逻辑对应关系,将标准请求参数转换为Elasticsearch查询语句;专利检索模块用于利用Elasticsearch查询语句在Elasticsearch中进行专利检索,得到Elasticsearch检索结果;标准响应结果获得模块用于将Elasticsearch检索结果转换为标准响应结果输出;其中,标准请求参数表征待处理的专利检索统计需求的属性信息;专利检索统计需求包括复杂条件检索、多维数据统计分析、专利去重文档合并和异步专利检索;标准请求参数的结构是针对检索输入预先定义的标准的数据结构;标准响应结果的结构是针对检索输出预先定义的标准的数据结构。可见,本发明实施例的基于Elasticsearch的专利检索统计引擎通过制定标准请求参数及标准响应结果,为专利的检索统计确定了规范,能够基于Elasticsearch实现复杂条件检索、多维数据统计分析、专利去重文档合并、异步专利检索等多种功能,能够满足现有专利检索统计分析领域的多种需求,同时具备相应规范,且支持扩展和优化,为专利检索和统计分析等提供了良好的技术支持。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

本文发布于:2024-09-22 14:19:58,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/68123.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议