CN105335402B - 基于静态Cache的搜索方法、索引数据生成方法以及装置 - Google Patents

基于静态Cache的搜索方法、索引数据生成方法以及装置 Download PDF

Info

Publication number
CN105335402B
CN105335402B CN201410352816.0A CN201410352816A CN105335402B CN 105335402 B CN105335402 B CN 105335402B CN 201410352816 A CN201410352816 A CN 201410352816A CN 105335402 B CN105335402 B CN 105335402B
Authority
CN
China
Prior art keywords
tree
high frequency
syntax tree
query
node
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
CN201410352816.0A
Other languages
English (en)
Other versions
CN105335402A (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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201410352816.0A priority Critical patent/CN105335402B/zh
Publication of CN105335402A publication Critical patent/CN105335402A/zh
Priority to HK16106489.7A priority patent/HK1218452A1/zh
Application granted granted Critical
Publication of CN105335402B publication Critical patent/CN105335402B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种基于静态Cache的搜索方法和装置、一种用于静态Cache的索引数据生成方法和装置、以及一种用于获取查询语法树标识的方法和装置。其中,基于静态Cache的搜索方法包括:接收客户端的搜索请求;根据搜索请求中的查询信息生成查询语法树;在查询语法树中查找预先生成的高频语法树,并按照从根节点到叶子节点的顺序用预先计算出的高频语法树的唯一标识替换查询信息中、与高频语法树对应的部分查询信息;所述高频语法树的唯一标识用于在检索阶段从索引库中快速召回与部分查询信息对应的搜索结果;根据替换后的查询信息对索引库进行检索,并将搜索结果返回客户端。采用上述方法,能够减少搜索引擎进行倒排召回的性能开销,提高搜索引擎的检索性能。

Description

基于静态Cache的搜索方法、索引数据生成方法以及装置
技术领域
本申请涉及搜索引擎技术,具体涉及一种基于静态Cache的搜索方法和装置。本申请同时提供一种用于静态Cache的索引数据生成方法和装置,以及一种用于获取查询语法树标识的方法和装置。
背景技术
随着互联网的快速发展,网络信息得到爆炸式增长,为了快速地获取所需的信息,用户通常借助搜索引擎。搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索的相关信息展示给用户的系统。
缓存(Cache)技术是搜索引擎中被广泛采用的一种提高引擎性能的技术,该技术将常用的查询词及搜索结果、以及与查询相关的索引数据或者是搜索的中间结果存放在缓存中,当接收到用户发起的搜索请求时,通过将搜索请求中的查询信息与缓存中的数据进行匹配,能够有效减少搜索引擎的在线计算量,快速地将搜索结果返回给用户。现有技术中的Cache技术主要分为动态Cache和静态Cache两种。
采用动态Cache技术,系统会记录一段时间内最频繁访问的查询,并将这些查询结果存放于系统Cache中,当系统再次接受到上述频繁访问的查询时,可以将针对此查询已经缓存的结果直接返回给用户。
采用静态Cache技术,系统会首先统计先前查询日志中频繁出现的Query查询,并根据这些频繁出现的Query查询计算对应的Hash值并进行打标标记。在对商品数据建引擎索引时,根据商品数据出现高频Query查询数据的情况打上相应的标记,如果在线计算阶段判断出查询串出现高频Query的情况,便通过标记召回快速检索出对应的文档。现有静态Cache技术的处理对象通常是文档中固定的某一维字段(通常为文本字段如商品的标题字段),对搜索请求的处理通常也是基于单层逻辑与关系的,例如:“A”AND“B”。
随着商务搜索需求的日益增多,客观上要求搜索引擎具备在商品数据集中进行多维度(标题、类目、属性等)、以及复杂逻辑关系(逻辑与、逻辑或、逻辑非)的快速检索功能,然而现有的静态Cache技术因为仅能针对一维字段和单层逻辑与进行处理,因此对于上述复杂检索需求的商务搜索来说,搜索引擎通常要执行多次根据倒排索引召回检索结果的操作,导致搜索引擎性能低下,无法很好地满足线上实时返回搜索结果的需求,从而无法对商务搜索提供有效的支持。
发明内容
本申请提供一种基于静态Cache的搜索方法和装置,以提升搜索效率。本申请另外提供一种用于静态Cache的索引数据生成方法和装置,以及一种用于获取查询语法树标识的方法和装置。
本申请提供一种基于静态Cache的搜索方法,包括:
接收来自客户端的搜索请求;
根据搜索请求中包含的查询信息,生成查询语法树;
在所述查询语法树中查找是否存在预先生成的高频语法树;若存在,按照从根节点到叶子节点的顺序用预先计算出的所述高频语法树的唯一标识替换所述查询信息中的、与所述高频语法树对应的部分查询信息;所述高频语法树的唯一标识用于在检索阶段从索引库中快速召回与所述部分查询信息对应的搜索结果;
根据替换后的查询信息对索引库进行检索,获取与所述搜索请求对应的搜索结果,并返回给所述客户端。
可选的,如果在所述查询语法树中没有找到所述预先生成的高频语法树,则直接根据所述搜索请求包含的查询信息对索引库进行检索。
可选的,所述搜索请求中的查询信息包括:一个或者一个以上数据对,以及代表数据对之间逻辑关系的逻辑运算符;所述数据对包括索引名及对应的索引值,所述逻辑关系包括:逻辑与、逻辑或、或者逻辑非。
可选的,在接收来自客户端的搜索请求之前,执行下述操作:
根据查询日志中的查询信息,生成高频语法树配置信息;
查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据。
可选的,所述根据查询日志中的查询信息,生成高频语法树配置信息包括:
针对查询日志中的每条查询信息,生成按照预先设定的规约原则处理后的查询语法树及其唯一标识;
将在查询日志中出现次数满足设定要求的查询语法树作为高频语法树;高频语法树及其唯一标识共同组成所述高频语法树配置信息。
可选的,所述针对查询日志中的每条查询信息,生成按照预先设定的规约原则处理后的查询语法树及其唯一标识是指,针对查询日志中的每条查询信息,执行下述操作:
根据查询信息,生成对应的查询语法树;所述查询语法树的每个叶子节点包括:查询信息中的一对索引名和索引值,非叶子节点代表下一级子节点之间的逻辑关系;
按照预先设定的规约原则,对所述查询语法树执行规约处理,得到经规约处理后的查询语法树;
按照预先设定的规则,计算所述经规约处理后的查询语法树的唯一标识。
可选的,所述预先设定的规约原则包括:
对于逻辑与,将A&(B&C)或者(A&B)&C都规约为A&B&C;
对于逻辑或,将(A|B)|C或者A|(B|C)都规约为A|B|C;
对于逻辑非,将A&(B not C)或者(B not C)&A都规约为(A&B)not C。
可选的,所述按照预先设定的规则,计算所述经规约处理后的查询语法树的唯一标识是指,按照从叶子节点到根节点的顺序,计算所述查询语法树的每个节点的Hash值,并将计算得到的根节点的Hash值作为所述查询语法树的唯一标识。
可选的,采用如下方式计算所述查询语法树的每个节点的Hash值:
对于叶子节点,采用该节点包含的索引名和索引值拼接而成的字符串作为预先选定的哈希算法的输入,计算对应的Hash值,并将所述Hash值作为该节点的Hash值;
对于逻辑与节点,采用下一级子节点Hash值的和作为该节点的Hash值;
对于逻辑或节点,采用下一级子节点Hash值的乘积作为该节点的Hash值;
对于逻辑非节点,先将下一级右子节点Hash值按位取反,然后将得到的值与下一级左子节点的Hash值求和,并将得到的值作为该节点的Hash值。
可选的,所述按照从叶子节点到根节点的顺序计算所述查询语法树的每个节点的Hash值,还包括:
对下一级子节点的Hash值执行移位操作,用执行移位操作后的Hash值计算所述下一级子节点的上一级节点的Hash值。
可选的,所述查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据是指,针对每一棵高频语法树,与每一个文档执行下述匹配操作:
根据执行匹配操作的高频语法树每个叶子节点的索引名,获取执行匹配操作的文档中的相应数据,并判断所述数据中是否包含所述叶子节点指定的索引值,若是,则判定所述文档与所述叶子节点匹配成功;
针对每一个非叶子节点,根据所述非叶子节点代表的逻辑关系、以及非叶子节点的下一级子节点与所述文档的匹配结果,获取所述文档与所述非叶子节点的匹配结果;
判断所述文档与根节点是否匹配成功;若是,判定所述文档与所述高频语法树匹配成功,将根据所述高频语法树的唯一标识检索所述文档的索引关系添加到索引库中,作为索引库的补充索引。
可选的,所述根据搜索请求中包含的查询信息,生成查询语法树,包括:
根据搜索请求中包含的查询信息,生成查询语法树;所述查询语法树的每个叶子节点包括:所述查询信息中的一对索引名和索引值,非叶子节点代表下一级子节点之间的逻辑关系;
按照与生成高频语法树配置信息相同的规约原则,对所述查询语法树执行规约处理,得到经规约处理后的查询语法树。
可选的,所述在所述查询语法树中查找是否存在预先生成的高频语法树,包括:
对所述查询语法树采用递归遍历的方式,采用与生成高频语法树唯一标识相同的算法,计算每个非叶子节点的各个子节点的各种可能组合的语法子树的唯一标识;
对计算出的每个语法子树的唯一标识,与所述高频语法树配置信息中的高频语法树的唯一标识进行匹配,如果匹配成功则判定所述查询语法树中存在预先生成的高频语法树。
可选的,所述根据替换后的查询信息对索引库进行检索,获取与所述搜索请求对应的搜索结果,并返回给所述客户端包括:
根据执行替换操作所用唯一标识对索引库进行检索,获取已静态缓存的、与所述唯一标识代表的部分查询信息对应的搜索结果;
根据未执行替换操作的其它部分查询信息,对索引库进行检索,获取对应的搜索结果;
按照查询信息包含的逻辑关系,对上述获取的两类搜索结果进行相应的处理,得到满足查询信息指定查询要求的搜索结果;所述相应的处理包括:合并搜索结果、提取搜索结果中的相同部分、或者从搜索结果中剔除与其他搜索结果相同的部分;
按照预先设定的排序算法,对经上述处理后的搜索结果进行排序,并将排序后的搜索结果返回给所述客户端。
相应的,本申请还提供一种基于静态Cache的搜索装置,包括:
搜索请求接收单元,用于接收来自客户端的搜索请求;
查询语法树生成单元,用于根据搜索请求中包含的查询信息,生成查询语法树;
静态缓存替换单元,用于在所述查询语法树中查找是否存在预先生成的高频语法树;若存在,按照从根节点到叶子节点的顺序用预先计算出的所述高频语法树的唯一标识替换所述查询信息中的、与所述高频语法树对应的部分查询信息;所述高频语法树的唯一标识用于在检索阶段从索引库中快速召回与所述部分查询信息对应的搜索结果;
搜索操作执行单元,用于根据替换后的查询信息对索引库进行检索,获取与所述搜索请求对应的搜索结果,并返回给所述客户端。
可选的,所述搜索请求接收单元接收的搜索请求中的查询信息包括:一个或者一个以上数据对,以及代表数据对之间逻辑关系的逻辑运算符;所述数据对包括索引名及其对应的索引值,所述逻辑关系包括:逻辑与、逻辑或、或者逻辑非。
可选的,所述装置还包括:
配置信息生成单元,用于在接收来自客户端的搜索请求之前,根据查询日志中的查询信息,生成高频语法树配置信息;
离线文档匹配单元,用于查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据。
可选的,所述配置信息生成单元包括:
查询日志语法树生成子单元,用于针对查询日志中的每条查询信息,生成按照预先设定的规约原则处理后的查询语法树及其唯一标识;
高频语法树选择子单元,用于将在查询日志中出现次数满足设定要求的查询语法树作为高频语法树;高频语法树及其唯一标识共同组成所述高频语法树配置信息。
可选的,所述查询日志语法树生成子单元包括:
查询日志处理控制子单元,用于针对查询日志中的每条查询信息,依次触发下列查询日志语法树生成子单元、查询日志语法树规约子单元和查询日志语法树标识计算子单元执行相应的动作;
查询日志语法树生成子单元,用于根据查询信息,生成对应的查询语法树;所述查询语法树的每个叶子节点包括:查询信息中的一对索引名和索引值,非叶子节点代表下一级子节点之间的逻辑关系;
查询日志语法树规约子单元,用于按照预先设定的规约原则,对所述查询日志语法树生成子单元生成的查询语法树执行规约处理,得到经规约处理后的查询语法树;
查询日志语法树标识计算子单元,用于按照预先设定的规则,计算所述查询日志语法树规约子单元输出的经规约处理后的查询语法树的唯一标识。
可选的,所述离线文档匹配单元包括:
离线文档匹配控制子单元,用于针对每一棵高频语法树,对每一个文档触发下列离线文档叶子节点匹配子单元、离线文档非叶子节点匹配子单元、以及判断及索引数据生成子单元进行相应的处理;
离线文档叶子节点匹配子单元,用于根据执行匹配操作的高频语法树每个叶子节点的索引名,获取执行匹配操作的文档中的相应数据,并判断所述数据中是否包含所述叶子节点指定的索引值,若是,则判定所述文档与所述叶子节点匹配成功;
离线文档非叶子节点匹配子单元,用于针对每一个非叶子节点,根据所述非叶子节点代表的逻辑关系、以及非叶子节点的下一级子节点与所述文档的匹配结果,获取所述文档与所述非叶子节点的匹配结果;
判断及索引数据生成子单元,用于判断所述文档与根节点是否匹配成功;若是,判定所述文档与所述高频语法树匹配成功,将根据所述高频语法树的唯一标识检索所述文档的索引关系添加到索引库中,作为索引库的补充索引。
可选的,所述查询语法树生成单元包括:
语法树生成子单元,用于根据搜索请求中包含的查询信息,生成查询语法树;所述查询语法树的每个叶子节点包括:查询信息中的一个数据对,所述数据对包括索引名和对应的索引值,非叶子节点代表下一级子节点之间的逻辑关系;
规约处理子单元,用于按照所述配置信息生成单元所用相同的规约原则,对所述查询语法树执行规约处理,得到经规约处理后的查询语法树。
可选的,所述静态缓存替换单元包括:
高频语法树查找子单元,用于在所述查询语法树中查找是否存在预先生成的高频语法树;
静态缓存替换执行子单元,用于当所述高频语法树查找子单元找到所述高频语法树时,按照从根节点到叶子节点的顺序用预先计算出的所述高频语法树的唯一标识替换所述查询信息中的、与所述高频语法树对应的部分查询信息;所述高频语法树的唯一标识用于在搜索阶段从索引库中快速召回与所述部分查询信息对应的搜索结果;
其中,所述高频语法树查找子单元包括:
语法子树标识计算子单元,用于对所述查询语法树采用递归遍历的方式,采用与生成高频语法树唯一标识相同的算法,计算每个非叶子节点的各个子节点的各种可能组合的语法子树的唯一标识;
语法子树匹配子单元,用于对计算出的每个语法子树的唯一标识,与所述高频语法树配置信息中的高频语法树的唯一标识进行匹配,如果匹配成功则判定所述查询语法树中存在预先生成的高频语法树。
可选的,所述搜索操作执行单元包括:
缓存替换搜索子单元,用于根据执行替换操作所用唯一标识对索引库进行检索,获取已静态缓存的、与所述唯一标识代表的部分查询信息对应的搜索结果;
常规搜索子单元,用于根据未执行替换操作的其它部分查询信息,对索引库进行检索,获取对应的搜索结果;
搜索结果处理子单元,用于按照查询信息包含的逻辑关系,对上述获取的两类搜索结果进行相应的处理,得到满足查询信息指定查询要求的搜索结果;所述相应的处理包括:合并搜索结果、提取搜索结果中的相同部分、或者从搜索结果中剔除与其他搜索结果相同的部分。
搜索结果排序子单元,用于按照预先设定的排序算法,对经上述处理后的搜索结果进行排序,并将排序后的搜索结果返回给所述客户端。
此外,本申请还提供一种用于静态Cache的索引数据生成方法,包括:
根据查询日志中的查询信息,生成高频语法树配置信息;
查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据。
可选的,所述根据查询日志中的查询信息,生成高频语法树配置信息包括:
针对查询日志中的每条查询信息,生成按照预先设定的规约原则处理后的查询语法树及其唯一标识;
将在查询日志中出现次数满足设定要求的查询语法树作为高频语法树;高频语法树及其唯一标识共同组成所述高频语法树配置信息。
可选的,所述针对查询日志中的每条查询信息,生成一颗按照预先设定的规约原则处理后的查询语法树及其唯一标识是指,针对查询日志中的每条查询信息,执行下述操作:
根据查询信息,生成对应的查询语法树;所述查询语法树的每个叶子节点包括:查询信息中的一对索引名和索引值,非叶子节点代表下一级子节点之间的逻辑关系;
按照预先设定的规约原则,对所述查询语法树执行规约处理,得到经规约处理后的查询语法树;
按照预先设定的规则,计算所述经规约处理后的查询语法树的唯一标识。
可选的,所述查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据是指,针对每一棵高频语法树,与每一个文档执行下述匹配操作:
根据执行匹配操作的高频语法树每个叶子节点包含的索引名,获取执行匹配操作的文档中的相应数据,并判断所述数据中是否包含所述叶子节点指定的索引值,若是,则判定所述文档与所述叶子节点匹配成功;
针对每一个非叶子节点,根据所述非叶子节点代表的逻辑关系、以及非叶子节点的下一级子节点与所述文档的匹配结果,获取所述文档与所述非叶子节点的匹配结果;
判断所述文档与根节点是否匹配成功;若是,判定所述文档与所述高频语法树匹配成功,将根据所述高频语法树的唯一标识检索所述文档的索引关系添加到索引库中,作为索引库的补充索引。
相应的,本申请还提供一种用于静态Cache的索引数据生成装置,包括:
配置信息生成单元,用于根据查询日志中的查询信息生成高频语法树配置信息;
离线文档匹配单元,用于查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据。
此外,本申请还提供一种用于获取查询语法树标识的方法,包括:
按照预先设定的规约原则,对查询语法树执行规约处理,得到规约语法树;
针对所述规约语法树的每个叶子节点,用该节点包含的查询字符串作为预先选定的哈希算法的输入,计算对应的Hash值,并将所述Hash值作为该叶子节点的Hash值;
针对所述规约语法树的每个非叶子节点,根据下一级子节点的Hash值和所述非叶子节点代表的逻辑关系,计算所述非叶子节点的Hash值;并将计算得到的根节点的Hash值作为所述查询语法树的唯一标识。
可选的,所述预先设定的规约原则包括:
对于逻辑与,将A&(B&C)或者(A&B)&C都规约为A&B&C;
对于逻辑或,将(A|B)|C或者A|(B|C)都规约为A|B|C;
对于逻辑非,将A&(B not C)或者(B not C)&A都规约为(A&B)not C。
可选的,所述针对每个非叶子节点,根据下一级子节点的Hash值和所述非叶子节点代表的逻辑关系,计算所述非叶子节点的Hash值,具体采用如下计算方式:
对于逻辑与节点,采用下一级子节点Hash值的和作为该节点的Hash值;
对于逻辑或节点,采用下一级子节点Hash值的乘积作为该节点的Hash值;
对于逻辑非节点,先将下一级右子节点Hash值按位取反,然后将得到的值与下一级左子节点的Hash值求和,并将得到的值作为该节点的Hash值。
可选的,所述针对每个非叶子节点,根据下一级子节点的Hash值和所述非叶子节点代表的逻辑关系,计算所述非叶子节点的Hash值,还包括:
对下一级子节点的Hash值执行移位操作,用执行移位操作后的Hash值计算所述下一级子节点的上一级节点的Hash值。
相应的,本申请还提供一种用于获取查询语法树标识的装置,包括:
规约语法树生成单元,用于按照预先设定的规约原则,对查询语法树执行规约处理,得到规约语法树;
叶子节点标识计算单元,针对所述规约语法树的每个叶子节点,用该节点包含的查询字符串作为预先选定的哈希算法的输入,计算对应的Hash值,并将所述Hash值作为该叶子节点的Hash值;
非叶子节点标识计算单元,用于针对所述规约语法树的每个非叶子节点,根据下一级子节点的Hash值和所述非叶子节点代表的逻辑关系,计算所述非叶子节点的Hash值;并将计算得到的根节点的Hash值作为所述查询语法树的唯一标识。
与现有技术相比,本申请实施例具有以下优点:
本申请实施例提供的基于静态Cache的搜索方法,通过根据客户端搜索请求中包含的查询信息生成查询语法树,并在所述查询语法树中查找已经预先生成的高频语法树,然后按照从根节点到叶子节点的顺序用预先计算出的所述高频语法树的唯一标识替换所述查询信息中的、与所述高频语法树对应的部分查询信息,从而在后续的搜索操作中能够根据所述唯一标识从索引库中快速召回与所述部分查询信息对应的搜索结果。采用本申请提供的上述方法,能够减少搜索引擎进行倒排召回的性能开销,有效提高搜索引擎对多维度、复杂逻辑关系的搜索请求的检索性能,从而对商务搜索提供有效支持。
本申请实施例提供的用于静态Cache的索引数据生成方法,通过根据查询日志中的查询信息,生成高频语法树配置信息,然后查找与所述配置信息中的高频语法树相匹配的文档,并生成根据高频语法树快速检索到与之匹配文档的索引数据,从而便于搜索引擎在执行复杂逻辑关系的搜索操作时,针对搜索请求中包含的高频查询信息,利用所述索引数据快速检索到对应的搜索结果。
本申请实施例提供的用于获取查询语法树标识的方法,对查询语法树进行规约处理,然后采用预先选定的Hash算法计算规约后语法树的叶子节点的Hash值,进一步计算非叶子节点的Hash值,并将最终计算得到的根节点的Hash值作为所述查询语法树的唯一标识。采用本申请提供的上述方法,不仅能够为查询语法树生成唯一标识,而且能够为形式不同、但是查询内容实质上相同的查询语法树生成一个统一的唯一标识,从而为查询语法树的查找、匹配、替换等操作提供依据。
附图说明
图1是本申请的一种基于静态Cache的搜索方法的实施例的流程图;
图2是本申请的针对查询日志中的查询信息生成查询语法树信息的处理流程图;
图3是本申请实施例提供的对逻辑与关系进行规约的图形化表示;
图4是本申请实施例提供的对逻辑或关系进行规约的图形化表示;
图5是本申请实施例提供的对逻辑非关系进行规约的图形化表示;
图6是本申请实施例提供的针对复杂语法树进行规约处理的示意图;
图7是本申请的离线文档与高频语法树匹配的处理流程图;
图8是本申请实施例提供的高频语法树与文档进行离线匹配的示意图;
图9是本申请实施例提供的用已经静态缓存的高频语法树标识进行在线查询替换的示意图;
图10是本申请的一种基于静态Cache的搜索装置的实施例的示意图;
图11是本申请的一种用于静态Cache的索引数据生成方法的实施例的流程图;
图12是本申请的一种用于静态Cache的索引数据生成装置的实施例的示意图;
图13是本申请的一种用于获取查询语法树标识的方法实施例的流程图;
图14是本申请的一种用于获取查询语法树标识的装置实施例的示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本申请中,分别提供了一种基于静态Cache的搜索方法和装置、一种用于静态Cache的索引数据生成方法和装置、以及一种用于获取查询语法树标识的方法和装置。在下面的实施例中逐一进行详细说明。
请参考图1,其为本申请的一种基于静态Cache的搜索方法实施例的流程示意图。所述方法包括如下步骤:
步骤101:根据查询日志中的查询信息,生成高频语法树配置信息。
本步骤与后续的步骤102共同组成了本实施例技术方案的预处理部分。本步骤的主要任务是,根据查询日志中记录的查询信息,生成高频语法树配置信息,从而为步骤102执行的离线文档匹配操作选定匹配范围。
生成高频语法树配置信息的过程,主要包括针对查询日志中的每条查询信息生成对应的查询语法树信息、以及从生成的查询语法树中选择高频语法树这样两个处理过程。其中,针对查询日志中的每条查询信息生成对应的查询语法树信息的处理过程包括子步骤101-1至101-3,下面结合附图2对每个子步骤作详细说明。
步骤101-1:根据查询日志中的查询信息,生成对应的查询语法树。
所述查询信息通常包含一个或者一个以上数据对,以及代表数据对之间逻辑关系的逻辑运算符,所述数据对包括索引名及对应的索引值。采用本申请实施例提供的基于静态Cache的搜索方法,由于可以有效提升搜索引擎的执行效率,因此支持的查询信息可以更为复杂,不仅可以支持多维索引,而且可以支持多种复杂逻辑关系。
所述多维索引,是指查询信息可以不仅仅针对文档中的某一特定的一维字段(例如:标题)指定,而是可以针对与文档相关的多类数据指定,例如:标题、正文、类目、属性等,因此查询信息通常包含索引名和索引值,索引名就是上面列举的标题、正文、类目、属性等,索引值则是指索引名对应的数据中包含的具体值,例如要求搜索标题中包含“T恤”的文档,则查询信息中包含这样一组索引名和索引值——(标题:T恤)。
在所述多种复杂逻辑关系中,每组查询信息(索引名:索引值)之间的逻辑关系不仅仅可以包括逻辑与(AND)关系,还可以包含其它逻辑关系,例如逻辑或(OR)、或者逻辑非(NOT)。其中,逻辑与关系,要求关系运算符两侧的条件必须同时成立;而逻辑或关系,则要求关系运算符两侧的条件可以只有其中之一成立;逻辑非关系,要求关系运算符左侧的条件成立而关系运算符右侧的条件不成立。例如:(标题:T恤)NOT(类目:女装),则表示要查询标题中包含“T恤”,但是不属于“女装”类目的搜索结果。
本步骤中,根据当前处理的查询日志中的某一条查询信息,生成与该查询信息对应的查询语法树。通常所说的语法树,是指按照语法规则对句子进行推导形成的树,是反映句子语法结构的树状表示,本申请实施例所述的查询语法树,则是指反映查询信息的语法结构的树状表示。查询语法树通常包括叶子节点和非叶子节点,其中每个叶子节点包括:查询信息中的一个数据对,所述数据对包括索引名和对应的索引值(例如,标题:T恤)。非叶子节点包括下一级子节点之间的逻辑关系。根据查询信息生成查询语法树,属于现有技术,是目前搜索引擎系统通常都具备的基本功能,在此不再赘述。
需要说明的是,本申请实施例提供的方法也可以应用在一维索引的搜索场景中,在这种情况下,由于索引名只有默认的一种,例如:标题,因此查询信息中通常只包含索引值,上述步骤生成的查询语法树的叶子节点中就只包含索引值,而不包含索引名。
步骤101-2:按照预先设定的规约原则,对所述查询语法树执行规约处理,得到经规约处理后的查询语法树。
在本步骤中对步骤101-1生成的查询语法树进行规约处理,得到一颗精简的、并且是确定的语法树。之所以要这样处理,是因为可能存在这样的两条或者多条查询信息:从表面上看查询信息的表达形式并不完全相同,但是所述两条或者多条查询信息所表达的查询请求是一致的,也就是说查询信息的内容实质上是相同的。在这种情况下,通过语法树的规约操作,可以将上述形式上不同、但实质上相同的查询信息对应的查询语法树规约成为统一的语法树,从而保证后续的步骤105能够正确地找到预先生成的高频语法树并进行相应的动态替换操作。
在本实施例的一个具体例子中,采用递归遍历查询语法树的程序进行规约处理,所述预先设定的规约原则如下所示:
对于逻辑与,将A&(B&C)或者(A&B)&C都规约为A&B&C,其中A&B&C为规约后的序列化表示,请参见附图3,其为对逻辑与关系进行规约的图形化表示;
对于逻辑或,将(A|B)|C或者A|(B|C)都规约为A|B|C,其中A|B|C为规约后的序列化表示,请参见附图4,其为对逻辑或关系进行规约的图形化表示;
对于逻辑非,将A&(B not C)或者(B not C)&A都规约为(A&B)not C,其中(A&B)not C为规约后的序列化表示,请参见附图5,其为对逻辑非关系进行规约的图形化表示。
例如,采用上述规约原则,对查询信息E AND(D NOT(C AND(A AND B)))OR(F ORG)对应的复杂语法树进行规约处理,可以得到序列化表示为(E AND D NOT(A AND B ANDC))OR F OR G的查询语法树。请参见附图6,其为针对该例子的规约结果示意图。
在本实施例的上述具体例子中,采用上述规约原则进行查询语法树的规约,在其他实施方式中,可以采用不同于上述原则的其他原则进行规约,只要能够通过规约操作针对形式不同、但本质相同的查询信息得到统一的、确定的查询语法树即可。
步骤101-3:按照预先设定的规则,计算所述经规约处理后的查询语法树的唯一标识。
为了能够在步骤105中实现线上的快速查找与动态替换过程,可以预先计算在步骤101-2中得到的查询语法树的唯一标识,所述标识用于唯一地识别或区分不同的查询语法树。
计算所述查询语法树的唯一标识可以采用不同的算法,本实施例的一个具体例子中,采用递归遍历语法树的方式、按照从叶子节点到根节点的顺序计算所述查询语法树的每个节点的64bit的Hash值,并将计算得到的根节点的Hash值作为所述查询语法树的唯一标识。
具体说,针对经规约处理后的查询语法树的不同节点采用如下所示的不同方式计算该节点的Hash值:
对于叶子节点,根据该节点包含的索引名和索引值拼接而成的字符串,计算对应的Hash值,并将所述Hash值作为该节点的Hash值;对于逻辑与节点,采用下一级子节点Hash值的和作为该节点的Hash值;对于逻辑或节点,采用下一级子节点Hash值的乘积作为该节点的Hash值;对于逻辑非节点,先将下一级右子节点Hash值按位取反,然后将得到的值与下一级左子节点的Hash值求和,并将得到的值作为该节点的Hash值。以下为上述各种节点的Hash值计算方法汇总(其中,node1、node2......noden分别代表当前节点的下一级子节点):
hash64(叶子节点)=hash64(索引名称+索引值);
hash64(AND节点)=sum(hash64(node1),hash64(node2),...hash64(noden));
hash64(OR节点)=mul(hash64(node1),hash64(node2),…hash64(noden));
hash64(NOT节点)=sum(hash64(node1),hash64(node2),…hash64(noden))+~(hash64(noderight))。
此外,在本实施例的上述具体例子中,在采用递归遍历方式计算查询语法树的Hash值的过程中,每当将所述查询语法树当前层次节点的Hash值返回上一层时,需要对当前层次节点的Hash值执行右移一位的操作,然后再参与上一层节点的Hash值的计算。采用上述方式计算得到的根节点的Hash值即为所述查询语法树的唯一标识。
在本实施例的上述具体例子中,采用计算64位Hash值的方式生成查询语法树的唯一标识,在其他实施方式中,可以计算不同长度的Hash值,例如:128bit或者32bit等。需要说明的是,在上述具体例子中,由于采用上述算法得到的64bitHash值可能发生碰撞的几率极低,可以忽略不计,因此没有进行相应的处理,如果其他实施方式采用长度较短的Hash值作为查询语法树的唯一标识,可能需要考虑发生碰撞的情况,并添加相应的碰撞检测步骤和碰撞处理步骤。
上述具体例子中,在计算上一级节点的Hash值时采用了自定义的加法、乘法、取反、移位等计算公式,在其他实施方式中可以采用其他算法进行计算;在所述具体例子中,采用计算Hash值的方式生成经规约处理后的查询语法树的唯一标识,在其他实施方式中可以采用不同于Hash算法的其他算法进行求解,只要保证根据某棵查询语法树计算得到的值能够唯一标识所述查询语法树即可。
经过上述步骤101-1至101-3的处理,就得到了查询日志中的某一条查询信息对应的查询语法树及其唯一标识。对查询日志中的每一条查询信息依次采用上述步骤进行处理,就可以得到查询日志中每条查询信息对应的查询语法树及其唯一标识。
在采用上述步骤101-1至101-3处理查询日志中的每一条查询信息的过程中,还可以统计每条查询信息及对应的查询语法树在查询日志中出现的次数。由于在上述处理过程中,首先对每条查询信息对应的查询语法树进行了规约处理,然后生成了规约后查询语法树的唯一标识,也就是说,本质上相同的查询信息或者本质上相同的查询语法树对应同一个唯一标识,因此在查询日志经过上述预处理得到的所有唯一标识中,某个唯一标识出现的次数,即为该标识对应的查询语法树或者查询信息在查询日志中出现的次数。
仍以本实施例的上述具体例子为例,如果两棵经规约处理后的查询语法树的Hash值相同,则可以认为是相同的查询语法树,对应的查询信息相同。因此,在统计查询语法树在查询日志中的出现次数时,每计算出一条查询信息对应的查询语法树的Hash值,可以与之前计算得到的Hash值进行比较,也可以采用散列表进行快速定位查找,如果存在相同的Hash值,则将对应的经规约处理后的查询语法树的出现次数加一。将查询日志中的查询信息处理完毕,就获知了每棵经规约处理后的查询语法树的出现次数,并将满足设定要求的上述查询语法树作为高频语法树。
这里所述的设定要求,可以根据具体实施的需求进行设定,例如:将预处理得到的所有经规约处理后的查询语法树按照出现次数从多到少的顺序排序,将位于前1000位的查询语法树作为所述高频语法树,或者将出现次数大于特定数值的查询语法树作为高频语法树。所有高频语法树及其唯一标识共同组成本申请实施例所述的高频语法树配置信息。
在具体的实施过程中,高频语法树可以采用专门的树状数据结构进行存储,也可以采用序列化的表示形式进行存储。
在具体的实施过程中,上述高频语法树的生成过程是比较耗时的,因此可以采用MapReduce进行处理,加快高频语法树的生成。
步骤102:查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据。
上面描述了生成高频语法树配置信息的预处理过程。本申请实施例提供的基于静态Cache的搜索方法,还可以根据上述预处理过程生成的高频语法树配置信息,离线进行文档与高频语法树的匹配,并生成根据高频语法树检索到与之匹配文档的索引数据。具体说,针对高频语法树配置信息中的每一棵高频语法树,按照步骤102-1至102-3依次与每一个文档执行匹配操作,下面结合附图7对每一个步骤作详细说明。
步骤102-1:根据执行匹配操作的高频语法树的每个叶子节点的索引名,获取执行匹配操作的文档中的相应数据;并判断所述数据中是否包含所述叶子节点指定的索引值,若是,则判定所述文档与所述叶子节点匹配成功。
对所述高频语法树进行递归遍历访问一直到该语法树的叶子节点,根据每个叶子节点包含的索引名,获取该叶子节点在所述文档中的相应数据。然后判断所述相应数据中是否包含该叶子节点指定的索引值,若包含,说明所述文档符合所述高频语法树中的该叶子节点对应的查询要求,因此所述文档与该叶子节点匹配成功。在具体实施中,为了便于处理,可以将所述匹配成功的叶子节点的值指定为True;将匹配不成功的叶子节点的值指定为False。
例如:某个叶子节点的索引名为“标题”,对应的索引值为“T恤”,因此本步骤先获取所述文档的标题信息,然后在标题信息中查找是否包含“T恤”这个查询词,如果包含,说明所述文档符合“标题包含T恤”这一查询要求,因此该叶子节点的值为True,否则为False。
步骤102-2:针对每一个非叶子节点,根据所述非叶子节点包含的逻辑关系、以及所述非叶子节点的下一级子节点与所述文档的匹配结果,获取所述文档与所述非叶子节点的匹配结果。
具体说,当所述文档符合所述非叶子节点代表的查询要求时,所述文档与所述非叶子节点匹配成功。在具体实施中,为了便于处理,如果在步骤102-1中将与所述文档匹配成功的叶子节点的值指定为True,将匹配不成功的叶子节点的值指定为False,那么在本步骤中,当所述文档与所述非叶子节点匹配成功时,将所述非叶子节点的值指定为True,否则为False。
对于逻辑与(AND)节点,只有该节点的所有子节点的值都为True的情况下该节点的值才为True,否则为False;对于逻辑或(OR)节点,只要该节点的其中任一个子节点的值为True,则该节点的值即为True,否则为False;对于逻辑非(NOT)节点,只有当该节点的非NOT部分的子节点的值为True,NOT部分子节点的值为False,该节点的值才为True,否则为False。
下面以一个简单的例子说明上述各类节点的匹配过程。请参见附图8,其为本申请实施例提供的高频语法树与文档进行离线匹配的示意图,图中高频语法树的序列化表示为:
(E:e AND D:d NOT(A:a AND B:b AND C:c))OR F:f OR G:g
在该例子中,包含两个子节点的逻辑与节点,因为两个子节点的值都为True(该文档的E数据中包含e,该文档的D数据中包含d,),因此该逻辑与节点的值为True;而有三个子节点的逻辑与节点,因为其中一个子节点的值为False(该文档的C数据中不包含c),因此该节点的值为False;同样的道理,NOT节点因左子节点的值为True,而右子节点的值为False,因此该NOT节点的值为True;根节点为逻辑或节点,共有三个子节点,其中逻辑非子节点的值为True,因此该根节点的值为True。
步骤102-3:判断所述文档与根节点是否匹配成功;若是,判定所述文档与所述高频语法树匹配成功,将根据所述高频语法树的唯一标识检索所述文档的索引关系添加到索引库中,作为索引库的补充索引。
执行步骤102-2的计算,最后会得到所述文档与根节点的匹配结果,如果匹配成功,将根据所述高频语法树的唯一标识检索所述文档的索引关系添加到索引库中,作为索引库的补充索引。有了该索引信息,如果在线搜索请求的查询语法树中存在所述高频语法树,也就是说存在可以被静态Cache替换的部分查询信息,则可以用所述高频语法树的唯一标识替换所述部分查询信息,并根据所述唯一标识快速从索引库中检索到满足查询要求的文档,减少搜索引擎进行倒排召回的次数,从而提高搜索引擎的执行效率。
采用上面描述的方式,在判断出某个文档与某棵高频语法树匹配成功时,就将该高频语法树的唯一标识与该文档之间的索引关系添加到倒排索引库的补充索引中。在具体实现过程中,也可以针对每一棵高频语法树,对每一个文档循环执行上述步骤102-1至102-3,当发现某个文档与某棵高频语法树匹配成功时,可以将该高频语法树的唯一标识记录在该文档的打标信息中,整个循环处理过程完毕后,再根据所有文档记录的打标信息,生成高频语法树唯一标识与文档之间的索引关系,并添加到倒排索引库中,作为常规索引的补充索引。上述两种方式,仅仅是实施方式的细节变更,并不影响本申请的核心,都在本申请的保护范围之内。
通过步骤102-1至步骤102-3,完成了文档与高频语法树的离线匹配过程。需要说明的是,如果高频语法树配置信息中存储的是高频语法树的序列化表示,则需要首先对高频语法树配置信息中的每一棵高频语法树信息进行反序列化处理,还原为经规约处理后的高频语法树,然后再针对每一颗高频语法树采用步骤102-1至步骤102-3依次检查每一个文档是否与所述高频语法树匹配。
通过上述步骤101(生成高频语法树配置信息)和步骤102(离线文档匹配)这两个预处理过程,建立起了高频语法树唯一标识与文档之间的索引关系,由于高频语法树对应的查询信息在线上搜索中出现的频率相对比较高,因此上述处理过程相当于针对线上可能还会多次出现的查询信息,预先获取了对应的搜索结果并进行了存储,从而可以减少在线搜索阶段的计算量。
由于上述过程是根据已存在的查询日志以及文档离线完成的,并不是根据线上的搜索请求动态计算的,因此上述过程也通常称作离线静态Cache过程,在该过程中生成的高频语法树与文档之间的索引关系通常称作离线静态Cache数据。该数据通常存储在内存中,在具体实施过程中,如果数据量比较大,超过了内存使用限制,也可以使用SSD盘(固态硬盘—Solid State Drives的英文简称)进行存储。即使采用SSD盘进行存储,由于采用本申请的技术方案,合并了进行倒排召回的IO操作,也能提高搜索引擎的性能。
需要说明的是,上述步骤101(生成高频语法树配置信息)和步骤102(离线文档匹配)属于离线预处理过程,该预处理过程通常是定期执行的,每次接收到客户端的搜索请求时,可以不执行上述步骤101和步骤102,而是直接执行后续的步骤103-106步骤,利用最近一次预处理生成的高频语法树配置信息和索引数据,进行部分查询信息的动态替换、并执行相应的检索操作就可以了。
步骤103:接收来自客户端的搜索请求。
来自客户端的搜索请求中的查询信息包括:一个或者一个以上数据对,以及代表数据对之间逻辑关系的逻辑运算符;所述数据对包括索引名及对应的索引值,所述逻辑关系包括:逻辑与、逻辑或、或者逻辑非。关于查询信息的详细说明,请参见步骤101中的描述,此处不再赘述。
步骤104:根据搜索请求中包含的查询信息,生成查询语法树。
首先,根据搜索请求中包含的查询信息,生成一棵查询语法树;所述查询语法树的每个叶子节点包括:查询信息中的一个数据对,所述数据对包括索引名和对应的索引值,非叶子节点代表下一级子节点之间的逻辑关系。生成查询语法树的方法,属于现有技术,此处不再赘述。
然后,按照与生成高频语法树配置信息相同的规约原则,对所述查询语法树进行规约处理,得到经规约处理后的查询语法树。需要说明的是,本步骤对查询语法树进行规约处理并不是必需的,之所以要进行规约处理,是为了提高后续步骤105中的匹配成功率,最大限度地发挥本技术方案的效果。具体说,按照生成高频语法树配置信息相同的规约原则进行规约处理,使得与某高频语法树形式不同但是本质上相同的查询信息或者部分查询信息能够生成与所述高频语法树相同的树状结构,从而能够在步骤105中计算得到相同的唯一标识并匹配成功、然后执行正确的替换操作。具体的规约处理过程,请参见步骤101-2中的说明。
步骤105:在所述查询语法树中查找是否存在预先生成的高频语法树;若存在,按照从根节点到叶子节点的顺序用预先计算出的所述高频语法树的唯一标识替换所述查询信息中的、与所述高频语法树对应的部分查询信息。
对于在步骤104中生成的查询语法树进行递归遍历,采用与生成高频语法树唯一标识相同的算法,计算每个非叶子节点的各个子节点的各种可能组合的语法子树的唯一标识。
之所以要计算每个非叶子节点的各个子节点的各种可能组合的语法子树的唯一标识,是为了尽可能找出当前查询信息中的能够被已经静态缓存的高频语法树替换的部分。因此需要对所述查询语法树的非叶子节点的各个子节点进行二元性枚举,此处的二元性枚举是针对单一节点的包含、不包含这两个状态而言的,也就是说要枚举非叶子节点包含或者不包含各个子节点的各种组合,例如,某非叶子节点有3个子节点A、B、C,则需要枚举A B C、A B、A C,B C这四种组合方式;并计算各种组合方式对应的语法子树的唯一标识,而且计算唯一标识应该采用与生成高频语法树唯一标识相同的算法,这样才能保证与某高频语法树相同的语法子树能够计算得到与所述高频语法树相同的唯一标识。
对计算出的每个语法子树的唯一标识,与所述高频语法树配置信息中的高频语法树的唯一标识逐一进行匹配,如果匹配成功则说明所述语法子树与所述高频语法树相同,也就是说在所述查询语法树中存在预先生成的高频语法树。
在上述递归遍历查询语法树的过程中,需要自底向上的将已经计算出来的当前节点的唯一标识返回给上层节点,以便在上层节点再次通过枚举的方法尽可能找到已经被静态缓存的更高层次的语法子树。
通过上述递归遍历过程,在所述查询语法树中找到了一棵或者多棵预先生成的高频语法树,就可以按照从根节点到叶子节点的顺序用找到的高频语法树的唯一标识替换所述查询信息中的、与该高频语法树对应的部分查询信息。按照从根节点到叶子节点的顺序进行替换,是为了优先替换所述查询语法树中存在的最高层的高频语法树,最大限度地利用已经静态缓存的搜索结果,从而尽可能减少需要进行倒排召回的次数,获得最优的实施效果。
在本实施例的一个具体例子中,在预处理统计过程中采用计算Hash值的方式计算高频语法树的唯一标识,在线查询替换过程也是采用同样的算法计算当前查询语法树的各个语法子树的唯一标识,采用这种计算Hash值作为唯一标识的方式,那么所述语法子树的唯一标识与配置信息中的高频语法树的唯一标识进行匹配的过程就比较简单,直接查看计算出的语法子树的Hash值是否在高频语法树Hash值对应的散列表中存在即可,如果存在就说明该语法子树对应的部分查询信息已经在离线阶段进行了静态缓存。
下面以本实施例的一个具体例子来进一步说明本步骤的替换过程。请参见图9,其为本实施例提供的用已经静态缓存的高频语法树标识进行在线查询替换的示意图。在该例子中,来自客户端的搜索请求中的查询信息为:
E:e AND(D:d NOT(C:c AND(A:a AND B:b)))OR(F:f OR G:g);
经规约处理后的查询语法树的序列化表示为:
(E:e AND D:d NOT(A:a AND B:b AND C:c))OR F:f OR G:g;
在本步骤中采用递归遍历的方法计算各个子节点的唯一标识,得到:
节点1的Hash值为:Hash_1=sum(hashD>>1,hashE>>1);
节点2的Hash值为:Hash_2=sum(hashA>>1,hashB>>1,hashC>>1);
节点3的Hash值为:Hash_3=(Hash_1>>1)+(~(Hash_2>>1));
节点3与节点G的逻辑或关系对应的子树的Hash值为:
Hash_3_g=(Hash_3>>1)*(hashG>>1);
如果节点3与节点G的逻辑或关系对应的子树的Hash值:Hash_3_g已经在高频语法树配置中存在(即:Hash_3_g与高频语法树配置中的某棵高频语法树的Hash值相同),说明节点3与节点G的逻辑或关系对应的部分查询信息可以被静态Cache替换,用已缓存的高频语法树的Hash值进行替换后,原先的查询信息被优化为如下的形式:
执行动态替换后的查询信息=Tag:Hash_3_g OR F:f;
其中,Tag为打标字段,用于标识对应的索引值不是常规的索引值,而是采用本申请提供的方法对部分查询信息进行静态Cache替换后的索引值,因此在后续利用该索引值进行检索时,应该检索在离线文档匹配阶段生成的补充索引信息;Hash_3_g为打标字段的值,利用该值执行一次检索就可以从补充索引中快速检索出与被替换掉的部分查询信息对应的搜索结果。在本实施例的上述具体例子中,采用打标字段Tag作为进行静态Cache替换的标识,在其他实施方式中,可以采用其他字段形式或者用其他方法进行标识。
需要说明的是,上述例子仅仅是说明动态替换过程的示意性的例子,其中并没有完整地给出采用二元性枚举得到的各种子树的Hash值的计算过程,例如:A:a AND B:b子树、B:b AND C:c子树、A:a AND C:c子树等,在实际的实施过程中,要计算各种组合方式的语法子树的唯一标识,并与配置信息中的高频语法树的唯一标识进行匹配。
在上述具体例子中,在所述查询语法树中仅找到一棵能够被静态Cache替换的高频语法树,考虑如下场景:如果所述查询语法树中存在两棵能够被静态Cache替换的高频语法树,一棵为节点1对应的子树,即:E:e AND D:d子树,另一颗为节点3与节点G的逻辑或关系对应的子树,那么在执行替换操作时,要按照从根节点到叶子节点的顺序进行。也就是说,先替换节点3与节点G的逻辑或关系对应的部分查询信息,在该替换过程中,E:e AND D:d子树也被一起替换掉了,因此后续不必再针对该子树执行相应的替换操作了。采用从根节点到叶子节点的顺序进行替换,可以保证将所述查询语法树中存在的尽可能大、或者说层次尽可能高的高频语法树用已经静态缓存的唯一标识进行替换,从而能够最大限度地简化原始查询信息、提高搜索引擎的执行效率。
步骤106:根据替换后的查询信息对索引库进行检索,获取与所述搜索请求对应的搜索结果,并返回给所述客户端。
完成步骤105的动态替换处理后,就可以按照常规的搜索流程进行搜索结果的召回了。针对查询信息中包含的执行了动态替换的索引值(即:已经静态缓存的索引值),查找对应的倒排索引数据,即可召回已经静态缓存的搜索结果;针对查询信息中的剩余的其他部分查询信息,按照常规的处理方法,逐一查找常规的倒排索引数据,获取对应的搜索结果。然后按照查询信息包含的逻辑关系,对获取的搜索结果进行相应的处理,例如计算交集、和集等操作,并按照预先定义的策略对得到的结果进行排序。
仍以步骤103中的具体例子为例,进行动态替换后的查询信息为:Tag:Hash_3_gOR F:f。针对该查询信息,只需要进行两次倒排召回。第一组索引名和索引值为tag:Hash_3_g,索引名tag表明对应的索引值是经过静态缓存处理的,因此直接在索引库中的补充索引中进行检索,可以召回与Hash_3_g对应的文档或者文档列表;第二组索引名和索引值为F:f,在索引库中的常规索引中进行检索,召回满足查询条件F:f的文档或者文档列表。由于这两组之间是逻辑或的关系,因此将两次召回的文档汇总在一起,并按照预先定义的排序算法进行排序,就得到客户端用户所需的搜索结果。
通过上面的描述可以看出,对于复杂查询E:e AND(D:d NOT(C:c AND(A:a AND B:b)))OR(F:f OR G:g)来说,由于采用了本申请提供的基于静态Cache的搜索方法,与其中部分查询信息(E:e AND D:d NOT(A:a AND B:b AND C:c))OR G:g相关的搜索结果已经预先进行了静态缓存、生成了相应的索引数据,并通过在线执行动态替换操作,从而使得搜索引擎原本要执行的多次倒排召回操作,减少为两次,针对召回结果进行的求交集或者和集等操作也相应减少,从而有效提高搜索引擎的搜索性能。
需要说明的是,如果在步骤105中没有在查询语法树中找到预先生成的高频语法树,也就是说没有执行用高频语法树的唯一标识替换对应的查询信息的操作,那么在本步骤中直接根据所述搜索请求包含的原始查询信息执行搜索操作,即:查找常规的倒排索引数据,获取对应的搜索结果。
本申请提供的基于静态Cache的搜索方法,通过根据客户端搜索请求中包含的查询信息生成查询语法树,并在所述查询语法树中查找预先生成的高频语法树,然后按照从根节点到叶子节点的顺序用预先计算出的所述高频语法树的唯一标识替换所述查询信息中的、与该高频语法树对应的部分查询信息,从而在后续的搜索操作中能够根据所述唯一标识从索引库中快速召回与所述部分查询信息对应的搜索结果。采用本申请提供的上述方法,能够减少搜索引擎进行倒排召回的性能开销,有效提高搜索引擎对多维度、复杂逻辑关系的搜索请求的检索性能,从而对商务搜索提供有效支持。
在上述的实施例中,提供了一种基于静态Cache的搜索方法,与之相对应的,本申请还提供一种基于静态Cache的搜索装置。请参看图10,其为本申请的一种基于静态Cache的搜索装置的实施例示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种基于静态Cache的搜索装置,包括:配置信息生成单元1001,用于在接收来自客户端的搜索请求之前,根据查询日志中的查询信息,生成高频语法树配置信息;离线文档匹配单元1002,用于查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据。搜索请求接收单元1003,用于接收来自客户端的搜索请求;查询语法树生成单元1004,用于根据搜索请求中包含的查询信息,生成查询语法树;静态缓存替换单元1005,用于在所述查询语法树中查找是否存在预先生成的高频语法树;若存在,按照从根节点到叶子节点的顺序用预先计算出的所述高频语法树的唯一标识替换所述查询信息中的、与所述高频语法树对应的部分查询信息;所述高频语法树的唯一标识用于在搜索阶段从索引库中快速召回与所述部分查询信息对应的搜索结果;搜索操作执行单元1006,用于根据替换后的查询信息对索引库进行检索,获取与所述搜索请求对应的搜索结果,并返回给所述客户端。
可选的,如果所述静态缓存替换单元在所述查询语法树中没有找到预先生成的高频语法树,则所述搜索操作执行单元用于直接根据所述搜索请求包含的查询信息执行搜索操作。
可选的,所述搜索请求接收单元接收的搜索请求中的查询信息包括:一个或者一个以上数据对,以及代表数据对之间逻辑关系的逻辑运算符;所述数据对包括索引名及其对应的索引值,所述逻辑关系包括:逻辑与、逻辑或、或者逻辑非。
可选的,所述配置信息生成单元包括:
查询日志语法树生成子单元,用于针对查询日志中的每条查询信息,生成按照预先设定的规约原则处理后的查询语法树及其唯一标识;
高频语法树选择子单元,用于将在查询日志中出现次数满足设定要求的查询语法树作为高频语法树;高频语法树及其唯一标识共同组成所述高频语法树配置信息。
可选的,所述查询日志语法树生成子单元包括:
查询日志处理控制子单元,用于针对查询日志中的每条查询信息,依次触发下列查询日志语法树生成子单元、查询日志语法树规约子单元和查询日志语法树标识计算子单元执行相应的动作;
查询日志语法树生成子单元,用于根据查询信息,生成对应的查询语法树;所述查询语法树的每个叶子节点包括:查询信息中的一对索引名和索引值,非叶子节点代表下一级子节点之间的逻辑关系;
查询日志语法树规约子单元,用于按照预先设定的规约原则,对所述查询日志语法树生成子单元生成的查询语法树执行规约处理,得到经规约处理后的查询语法树;
查询日志语法树标识计算子单元,用于按照预先设定的规则,计算所述查询日志语法树规约子单元输出的经规约处理后的查询语法树的唯一标识。
可选的,所述查询日志语法树规约子单元采用的所述预先设定的规约原则包括:
对于逻辑与,将A&(B&C)或者(A&B)&C都规约为A&B&C;
对于逻辑或,将(A|B)|C或者A|(B|C)都规约为A|B|C;
对于逻辑非,将A&(B not C)或者(B not C)&A都规约为(A&B)not C。
可选的,所述查询日志语法树标识计算子单元具体用于,按照从叶子节点到根节点的顺序,计算所述查询语法树的每个节点的Hash值,并将计算得到的根节点的Hash值作为所述查询语法树的唯一标识。
可选的,所述查询日志语法树标识计算子单元包括:
查询日志标识计算控制子单元,用于按照从叶子节点到根节点的顺序,根据每个节点的类型或者代表的逻辑关系,触发下列相应的子单元计算所述节点的唯一标识;
叶子节点计算子单元,用于针对叶子节点,采用该节点包含的索引名和索引值拼接而成的字符串作为预先选定的哈希算法的输入,计算对应的Hash值,并将所述Hash值作为该节点的Hash值;
逻辑与节点计算子单元,用于针对逻辑与节点,采用下一级子节点Hash值的和作为该节点的Hash值;
逻辑或节点计算子单元,用于针对逻辑或节点,采用下一级子节点Hash值的乘积作为该节点的Hash值;
逻辑非节点计算子单元,用于针对逻辑非节点,先将下一级右子节点Hash值按位取反,然后将得到的值与下一级左子节点的Hash值求和,并将得到的值作为该节点的Hash值。
可选的,所述查询日志语法树标识计算子单元还包括:
移位操作子单元,用于对计算得到的下一级子节点的Hash值执行移位操作,并输出执行移位操作后的Hash值供所述下一级子节点的上一级节点计算Hash值使用。
可选的,所述离线文档匹配单元包括:
离线文档匹配控制子单元,用于针对每一棵高频语法树,对每一个文档触发下列离线文档叶子节点匹配子单元、离线文档非叶子节点匹配子单元、以及判断及索引数据生成子单元进行相应的处理;
离线文档叶子节点匹配子单元,用于根据执行匹配操作的高频语法树每个叶子节点的索引名,获取执行匹配操作的文档中的相应数据,并判断所述数据中是否包含所述叶子节点指定的索引值,若是,则判定所述文档与所述叶子节点匹配成功;
离线文档非叶子节点匹配子单元,用于针对每一个非叶子节点,根据所述非叶子节点代表的逻辑关系、以及非叶子节点的下一级子节点与所述文档的匹配结果,获取所述文档与所述非叶子节点的匹配结果;
判断及索引数据生成子单元,用于判断所述文档与根节点是否匹配成功;若是,判定所述文档与所述高频语法树匹配成功,将根据所述高频语法树的唯一标识检索所述文档的索引关系添加到索引库中,作为索引库的补充索引。
可选的,所述查询语法树生成单元包括:
语法树生成子单元,用于根据搜索请求中包含的查询信息,生成查询语法树;所述查询语法树的每个叶子节点包括:查询信息中的一对索引名和索引值,非叶子节点代表下一级子节点之间的逻辑关系;
规约处理子单元,用于按照所述配置信息生成单元所用相同的规约原则,对所述查询语法树执行规约处理,得到经规约处理后的查询语法树。
可选的,所述静态缓存替换单元包括:
高频语法树查找子单元,用于在所述查询语法树中查找是否存在预先生成的高频语法树;
静态缓存替换执行子单元,用于当所述高频语法树查找子单元找到所述高频语法树时,按照从根节点到叶子节点的顺序用预先计算出的所述高频语法树的唯一标识替换所述查询信息中的、与所述高频语法树对应的部分查询信息;所述高频语法树的唯一标识用于在搜索阶段从索引库中快速召回与所述部分查询信息对应的搜索结果;
其中,所述高频语法树查找子单元包括:
语法子树标识计算子单元,用于对所述查询语法树采用递归遍历的方式,采用与生成高频语法树唯一标识相同的算法,计算每个非叶子节点的各个子节点的各种可能组合的语法子树的唯一标识;
语法子树匹配子单元,用于对计算出的每个语法子树的唯一标识,与所述高频语法树配置信息中的高频语法树的唯一标识进行匹配,如果匹配成功则判定所述查询语法树中存在预先生成的高频语法树。
可选的,所述搜索操作执行单元包括:
缓存替换搜索子单元,用于根据执行替换操作所用唯一标识对索引库进行检索,获取已静态缓存的、与所述唯一标识代表的部分查询信息对应的搜索结果;
常规搜索子单元,用于根据未执行替换操作的其它部分查询信息,对索引库进行检索,获取对应的搜索结果;
搜索结果处理子单元,用于按照查询信息包含的逻辑关系,对上述获取的两类搜索结果进行相应的处理,得到满足查询信息指定查询要求的搜索结果;所述相应的处理包括:合并搜索结果、提取搜索结果中的相同部分、或者从搜索结果中剔除与其他搜索结果相同的部分。
搜索结果排序子单元,用于按照预先设定的排序算法,对经上述处理后的搜索结果进行排序,并将排序后的搜索结果返回给所述客户端。
此外,本申请还提供一种用于静态Cache的索引数据生成方法。请参考图11,其为本申请提供的一种用于静态Cache的索引数据生成方法实施例的流程图,本实施例与第一实施例步骤相同的部分不再赘述。本申请提供的一种用于静态Cache的索引数据生成方法包括:
步骤1101:根据查询日志中的查询信息,生成高频语法树配置信息。
本步骤包括两个处理过程:针对查询日志中的每条查询信息,生成按照预先设定的规约原则处理后的查询语法树及其唯一标识;将在查询日志中出现次数满足设定要求的查询语法树作为高频语法树,高频语法树及其唯一标识共同组成所述高频语法树配置信息。
其中所述针对查询日志中的每条查询信息,生成一棵按照预先设定的规约原则处理后的查询语法树及其唯一标识是指,针对查询日志中的每条查询信息,首先,根据查询信息,生成对应的查询语法树,所述查询语法树的每个叶子节点包括:查询信息中的一对索引名和索引值,非叶子节点代表下一级子节点之间的逻辑关系;然后,按照预先设定的规约原则,对所述查询语法树执行规约处理,得到经规约处理后的查询语法树;最后,按照预先设定的规则,计算所述经规约处理后的查询语法树的唯一标识。
步骤1102:查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据。
本步骤针对每一棵高频语法树,对每一个文档执行下述匹配操作:根据执行匹配操作的高频语法树每个叶子节点包含的索引名,获取执行匹配操作的文档中的相应数据,并判断所述数据中是否包含所述叶子节点指定的索引值,若是,则判定所述文档与所述叶子节点相匹配;根据非叶子节点包含的逻辑关系、以及非叶子节点的下一级子节点与所述文档的匹配结果,获取所述文档与各个非叶子节点的匹配结果;判断所述文档与根节点是否匹配成功;若是,判定所述文档与所述高频语法树匹配成功,将根据所述高频语法树的唯一标识检索所述文档的索引关系添加到索引库中,作为索引库的补充索引。
本申请提供的用于静态Cache的索引数据生成方法,通过根据查询日志中的查询信息,生成高频语法树配置信息,然后查找与所述配置信息中的高频语法树相匹配的文档,并生成根据高频语法树快速检索到与之匹配文档的索引数据,从而便于搜索引擎在执行复杂逻辑关系的搜索操作时,针对搜索请求中包含的高频查询信息,利用所述索引数据快速检索到对应的搜索结果。
上述的实施例中,提供了一种用于静态Cache的索引数据生成方法,与之相对应的,本申请还提供一种用于静态Cache的索引数据生成装置。请参看图12,其为本申请的一种用于静态Cache的索引数据生成装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种用于静态Cache的索引数据生成装置,包括:配置信息生成单元1201,用于根据查询日志中的查询信息,生成高频语法树配置信息;离线文档匹配单元1202,用于查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据。
可选的,所述配置信息生成单元包括:
查询日志语法树生成子单元,用于针对查询日志中的每条查询信息,生成按照预先设定的规约原则处理后的查询语法树及其唯一标识;
高频语法树选择子单元,用于将在查询日志中出现次数满足设定要求的查询语法树作为高频语法树;高频语法树及其唯一标识共同组成所述高频语法树配置信息。
可选的,所述查询日志语法树生成子单元包括:
查询日志处理控制子单元,用于针对查询日志中的每条查询信息,依次触发下列查询日志语法树生成子单元、查询日志语法树规约子单元和查询日志语法树标识计算子单元执行相应的动作;
查询日志语法树生成子单元,用于根据查询信息,生成对应的查询语法树;所述查询语法树的每个叶子节点包括:查询信息中的一对索引名和索引值,非叶子节点代表下一级子节点之间的逻辑关系;
查询日志语法树规约子单元,用于按照预先设定的规约原则,对所述查询日志语法树生成子单元生成的查询语法树执行规约处理,得到经规约处理后的查询语法树;
查询日志语法树标识计算子单元,用于按照预先设定的规则,计算所述查询日志语法树规约子单元输出的经规约处理后的查询语法树的唯一标识。
可选的,离线文档匹配单元包括:
离线文档匹配控制子单元,用于针对每一棵高频语法树,对每一个文档触发下列离线文档叶子节点匹配子单元、离线文档非叶子节点匹配子单元、以及判断及索引数据生成子单元进行相应的处理;
离线文档叶子节点匹配子单元,用于根据执行匹配操作的高频语法树每个叶子节点的索引名,获取执行匹配操作的文档中的相应数据,并判断所述数据中是否包含所述叶子节点指定的索引值,若是,则判定所述文档与所述叶子节点匹配成功;
离线文档非叶子节点匹配子单元,用于针对每一个非叶子节点,根据非叶子节点代表的逻辑关系、以及非叶子节点的下一级子节点与所述文档的匹配结果,获取所述文档与所述非叶子节点的匹配结果;
判断及索引数据生成子单元,用于判断所述文档与根节点是否匹配成功;若是,判定所述文档与所述高频语法树匹配成功,将根据所述高频语法树的唯一标识检索所述文档的索引关系添加到索引库中,作为索引库的补充索引。
此外,本申请还提供一种用于获取查询语法树标识的方法。请参考图13,其为本申请提供的一种用于获取查询语法树标识的方法实施例的流程图,本实施例与第一实施例步骤相同的部分不再赘述。本申请提供的一种用于获取查询语法树标识的方法包括:
步骤1301:按照预先设定的规约原则,对查询语法树执行规约处理,得到规约语法树。
本实施例的一个具体例子采用的所述预先设定的规约原则包括:
对于逻辑与,将A&(B&C)或者(A&B)&C都规约为A&B&C;
对于逻辑或,将(A|B)|C或者A|(B|C)都规约为A|B|C;
对于逻辑非,将A&(B not C)或者(B not C)&A都规约为(A&B)not C。
步骤1302:针对所述规约语法树的每个叶子节点,用该节点包含的查询字符串作为预先选定的哈希算法的输入,计算对应的Hash值,并将所述Hash值作为该叶子节点的Hash值。
步骤1303:针对所述规约语法树的每个非叶子节点,根据下一级子节点的Hash值和所述非叶子节点代表的逻辑关系,计算所述非叶子节点的Hash值;并将计算得到的根节点的Hash值作为所述查询语法树的唯一标识。
在本实施例的一个具体例子中,采用如下计算方式计算所述非叶子节点的Hash值:
对于逻辑与节点,采用下一级子节点Hash值的和作为该节点的Hash值;
对于逻辑或节点,采用下一级子节点Hash值的乘积作为该节点的Hash值;
对于逻辑非节点,先将下一级右子节点Hash值按位取反,然后将得到的值与下一级左子节点的Hash值求和,并将得到的值作为该节点的Hash值。
此外,在计算过程中还可以针对下一级子节点的Hash值执行移位操作,用执行移位操作后的Hash值计算所述下一级子节点的上一级节点的Hash值。
本申请提供的用于获取查询语法树标识的方法,对查询语法树进行规约处理,然后采用预先选定的Hash算法计算规约后语法树的叶子节点的Hash值,进一步计算非叶子节点的Hash值,并将最终计算得到的根节点的Hash值作为所述查询语法树的唯一标识。采用本申请提供的上述方法,不仅能够为查询语法树生成唯一标识,而且能够为形式不同、但是查询内容实质上相同的查询语法树生成一个统一的唯一标识,从而为查询语法树的查找、匹配、替换等操作提供依据。
上述的实施例中,提供了一种用于获取查询语法树标识的方法,与之相对应的,本申请还提供一种用于获取查询语法树标识的装置。请参看图14,其为本申请的一种用于获取查询语法树标识的装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种用于获取查询语法树标识的装置,包括:规约语法树生成单元1401,用于按照预先设定的规约原则,对查询语法树执行规约处理,得到规约语法树;叶子节点标识计算单元1402,针对所述规约语法树的每个叶子节点,用该节点包含的查询字符串作为预先选定的哈希算法的输入,计算对应的Hash值,并将所述Hash值作为该叶子节点的Hash值;非叶子节点标识计算单元1403,用于针对所述规约语法树的每个非叶子节点,根据下一级子节点的Hash值和所述非叶子节点代表的逻辑关系,计算所述非叶子节点的Hash值;并将计算得到的根节点的Hash值作为所述查询语法树的唯一标识。
可选的,所述规约语法树生成单元采用的预先设定的规约原则包括:
对于逻辑与,将A&(B&C)或者(A&B)&C都规约为A&B&C;
对于逻辑或,将(A|B)|C或者A|(B|C)都规约为A|B|C;
对于逻辑非,将A&(B not C)或者(B not C)&A都规约为(A&B)not C。
可选的,所述非叶子节点标识计算子单元包括:
非叶子节点标识计算控制子单元,用于按照从最底层非叶子节点到根节点的顺序,根据每个非叶子节点代表的逻辑关系,触发下列相应的子单元计算所述节点的唯一标识,并将计算得到的根节点的Hash值作为所述查询语法树的唯一标识;
逻辑与节点计算子单元,用于针对逻辑与节点,采用下一级子节点Hash值的和作为该节点的Hash值;
逻辑或节点计算子单元,用于针对逻辑或节点,采用下一级子节点Hash值的乘积作为该节点的Hash值;
逻辑非节点计算子单元,用于针对逻辑非节点,先将下一级右子节点Hash值按位取反,然后将得到的值与下一级左子节点的Hash值求和,并将得到的值作为该节点的Hash值。
可选的,所述非叶子节点标识计算子单元还包括:
移位操作子单元,用于对下一级子节点的Hash值执行移位操作,并输出执行移位操作后的Hash值供所述下一级子节点的上一级节点计算Hash值使用。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

Claims (33)

1.一种基于静态Cache的搜索方法,其特征在于,包括:
接收来自客户端的搜索请求;
根据搜索请求中包含的查询信息,生成所述搜索请求中包含的查询信息对应的查询语法树;
在所述查询语法树中查找是否存在预先生成的高频语法树;若存在,按照从根节点到叶子节点的顺序用预先计算出的所述高频语法树的唯一标识替换所述查询信息中的、与所述高频语法树对应的部分查询信息;所述高频语法树的唯一标识用于在检索阶段从索引库中快速召回与所述部分查询信息对应的搜索结果;
根据替换后的查询信息对索引库进行检索,获取与所述搜索请求对应的搜索结果,并返回给所述客户端。
2.根据权利要求1所述的基于静态Cache的搜索方法,其特征在于,如果在所述查询语法树中没有找到所述预先生成的高频语法树,则直接根据所述搜索请求包含的查询信息对索引库进行检索。
3.根据权利要求1所述的基于静态Cache的搜索方法,其特征在于,所述搜索请求中的查询信息包括:一个或者一个以上数据对,以及代表数据对之间逻辑关系的逻辑运算符;所述数据对包括索引名及对应的索引值,所述逻辑关系包括:逻辑与、逻辑或、或者逻辑非。
4.根据权利要求1-3任一所述的基于静态Cache的搜索方法,其特征在于,在接收来自客户端的搜索请求之前,执行下述操作:
根据查询日志中的查询信息,生成高频语法树配置信息;
查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据。
5.根据权利要求4所述的基于静态Cache的搜索方法,其特征在于,所述根据查询日志中的查询信息,生成高频语法树配置信息包括:
针对查询日志中的每条查询信息,生成按照预先设定的规约原则处理后的查询语法树及其唯一标识;
将在查询日志中出现次数满足设定要求的查询语法树作为高频语法树;高频语法树及其唯一标识共同组成所述高频语法树配置信息。
6.根据权利要求5所述的基于静态Cache的搜索方法,其特征在于,所述针对查询日志中的每条查询信息,生成按照预先设定的规约原则处理后的查询语法树及其唯一标识是指,针对查询日志中的每条查询信息,执行下述操作:
根据所述查询日志中的每条查询信息,生成所述查询日志中的每条查询信息对应的查询语法树;所述查询语法树的每个叶子节点包括:查询信息中的一对索引名和索引值,非叶子节点代表下一级子节点之间的逻辑关系;
按照预先设定的规约原则,对所述查询语法树执行规约处理,得到经规约处理后的查询语法树;
按照预先设定的规则,计算所述经规约处理后的查询语法树的唯一标识。
7.根据权利要求6所述的基于静态Cache的搜索方法,其特征在于,所述预先设定的规约原则包括:
对于逻辑与,将A&(B&C)或者(A&B)&C都规约为A&B&C;
对于逻辑或,将(A|B)|C或者A|(B|C)都规约为A|B|C;
对于逻辑非,将A&(B not C)或者(B not C)&A都规约为(A&B)not C。
8.根据权利要求6所述的基于静态Cache的搜索方法,其特征在于,所述按照预先设定的规则,计算所述经规约处理后的查询语法树的唯一标识是指,按照从叶子节点到根节点的顺序,计算所述查询语法树的每个节点的Hash值,并将计算得到的根节点的Hash值作为所述查询语法树的唯一标识。
9.根据权利要求8所述的基于静态Cache的搜索方法,其特征在于,采用如下方式计算所述查询语法树的每个节点的Hash值:
对于叶子节点,采用该节点包含的索引名和索引值拼接而成的字符串作为预先选定的哈希算法的输入,计算对应的Hash值,并将所述Hash值作为该节点的Hash值;
对于逻辑与节点,采用下一级子节点Hash值的和作为该节点的Hash值;
对于逻辑或节点,采用下一级子节点Hash值的乘积作为该节点的Hash值;
对于逻辑非节点,先将下一级右子节点Hash值按位取反,然后将得到的值与下一级左子节点的Hash值求和,并将得到的值作为该节点的Hash值。
10.根据权利要求8-9任一所述的基于静态Cache的搜索方法,其特征在于,所述按照从叶子节点到根节点的顺序计算所述查询语法树的每个节点的Hash 值,还包括:
对下一级子节点的Hash值执行移位操作,用执行移位操作后的Hash值计算所述下一级子节点的上一级节点的Hash值。
11.根据权利要求5所述的基于静态Cache的搜索方法,其特征在于,所述查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据是指,针对每一棵高频语法树,与每一个文档执行下述匹配操作:
根据执行匹配操作的高频语法树每个叶子节点的索引名,获取执行匹配操作的文档中的相应数据,并判断所述数据中是否包含所述叶子节点指定的索引值,若是,则判定所述文档与所述叶子节点匹配成功;
针对每一个非叶子节点,根据所述非叶子节点代表的逻辑关系、以及非叶子节点的下一级子节点与所述文档的匹配结果,获取所述文档与所述非叶子节点的匹配结果;
判断所述文档与根节点是否匹配成功;若是,判定所述文档与所述高频语法树匹配成功,将根据所述高频语法树的唯一标识检索所述文档的索引关系添加到索引库中,作为索引库的补充索引。
12.根据权利要求5所述的基于静态Cache的搜索方法,其特征在于,所述根据搜索请求中包含的查询信息,生成查询语法树,包括:
根据搜索请求中包含的查询信息,生成查询语法树;所述查询语法树的每个叶子节点包括:所述查询信息中的一对索引名和索引值,非叶子节点代表下一级子节点之间的逻辑关系;
按照与生成高频语法树配置信息相同的规约原则,对所述查询语法树执行规约处理,得到经规约处理后的查询语法树。
13.根据权利要求5所述的基于静态Cache的搜索方法,其特征在于,所述在所述查询语法树中查找是否存在预先生成的高频语法树,包括:
对所述查询语法树采用递归遍历的方式,采用与生成高频语法树唯一标识相同的算法,计算每个非叶子节点的各个子节点的各种可能组合的语法子树的唯一标识;
对计算出的每个语法子树的唯一标识,与所述高频语法树配置信息中的高频语法树的唯一标识进行匹配,如果匹配成功则判定所述查询语法树中存在预先生成的高频语法树。
14.根据权利要求1所述的基于静态Cache的搜索方法,其特征在于,所述根据替换后的查询信息对索引库进行检索,获取与所述搜索请求对应的搜索结果,并返回给所述客户端包括:
根据执行替换操作所用唯一标识对索引库进行检索,获取已静态缓存的、与所述唯一标识代表的部分查询信息对应的搜索结果;
根据未执行替换操作的其它部分查询信息,对索引库进行检索,获取对应的搜索结果;
按照查询信息包含的逻辑关系,对上述获取的两类搜索结果进行相应的处理,得到满足查询信息指定查询要求的搜索结果;所述相应的处理包括:合并搜索结果、提取搜索结果中的相同部分、或者从搜索结果中剔除与其他搜索结果相同的部分;
按照预先设定的排序算法,对经上述处理后的搜索结果进行排序,并将排序后的搜索结果返回给所述客户端。
15.一种基于静态Cache的搜索装置,其特征在于,包括:
搜索请求接收单元,用于接收来自客户端的搜索请求;
查询语法树生成单元,用于根据搜索请求中包含的查询信息,生成所述搜索请求中包含的查询信息对应的查询语法树;
静态缓存替换单元,用于在所述查询语法树中查找是否存在预先生成的高频语法树;若存在,按照从根节点到叶子节点的顺序用预先计算出的所述高频语法树的唯一标识替换所述查询信息中的、与所述高频语法树对应的部分查询信息;所述高频语法树的唯一标识用于在检索阶段从索引库中快速召回与所述部分查询信息对应的搜索结果;
搜索操作执行单元,用于根据替换后的查询信息对索引库进行检索,获取与所述搜索请求对应的搜索结果,并返回给所述客户端。
16.根据权利要求15所述的基于静态Cache的搜索装置,其特征在于,所述搜索请求接收单元接收的搜索请求中的查询信息包括:一个或者一个以上数据对,以及代表数据对之间逻辑关系的逻辑运算符;所述数据对包括索引名及对应的索引值,所述逻辑关系包括:逻辑与、逻辑或、或者逻辑非。
17.根据权利要求15-16任一所述的基于静态Cache的搜索装置,其特征在于,所述装置还包括:
配置信息生成单元,用于在接收来自客户端的搜索请求之前,根据查询日志中的查询信息,生成高频语法树配置信息;
离线文档匹配单元,用于查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据。
18.根据权利要求17所述的基于静态Cache的搜索装置,其特征在于,所述配置信息生成单元包括:
查询日志语法树生成子单元,用于针对查询日志中的每条查询信息,生成按照预先设定的规约原则处理后的查询语法树及其唯一标识;
高频语法树选择子单元,用于将在查询日志中出现次数满足设定要求的查询语法树作为高频语法树;高频语法树及其唯一标识共同组成所述高频语法树配置信息。
19.根据权利要求18所述的基于静态Cache的搜索装置,其特征在于,所述查询日志语法树生成子单元包括:
查询日志处理控制子单元,用于针对查询日志中的每条查询信息,依次触发下列查询日志语法树生成子单元、查询日志语法树规约子单元和查询日志语法树标识计算子单元执行相应的动作;
查询日志语法树生成子单元,用于根据所述查询日志中的每条查询信息,生成所述查询日志中的每条查询信息对应的查询语法树;所述查询语法树的每个叶子节点包括:查询信息中的一对索引名和索引值,非叶子节点代表下一级子节点之间的逻辑关系;
查询日志语法树规约子单元,用于按照预先设定的规约原则,对所述查询日志语法树生成子单元生成的查询语法树执行规约处理,得到经规约处理后的查询语法树;
查询日志语法树标识计算子单元,用于按照预先设定的规则,计算所述查询日志语法树规约子单元输出的经规约处理后的查询语法树的唯一标识。
20.根据权利要求18所述的基于静态Cache的搜索装置,其特征在于,所述离线文档匹配单元包括:
离线文档匹配控制子单元,用于针对每一棵高频语法树,对每一个文档触发下列离线文档叶子节点匹配子单元、离线文档非叶子节点匹配子单元、以及判断及索引数据生成子单元进行相应的处理;
离线文档叶子节点匹配子单元,用于根据执行匹配操作的高频语法树每个叶子节点的索引名,获取执行匹配操作的文档中的相应数据,并判断所述数据中是否包含所述叶子节点指定的索引值,若是,则判定所述文档与所述叶子节点匹配成功;
离线文档非叶子节点匹配子单元,用于针对每一个非叶子节点,根据所述非叶子节点代表的逻辑关系、以及非叶子节点的下一级子节点与所述文档的匹配结果,获取所述文档与所述非叶子节点的匹配结果;
判断及索引数据生成子单元,用于判断所述文档与根节点是否匹配成功;若是,判定所述文档与所述高频语法树匹配成功,将根据所述高频语法树的唯一标识检索所述文档的索引关系添加到索引库中,作为索引库的补充索引。
21.根据权利要求18所述的基于静态Cache的搜索装置,其特征在于,所述查询语法树生成单元包括:
语法树生成子单元,用于根据搜索请求中包含的查询信息,生成查询语法树;所述查询语法树的每个叶子节点包括:查询信息中的一对索引名和索引值,非叶子节点代表下一级子节点之间的逻辑关系;
规约处理子单元,用于按照所述配置信息生成单元所用相同的规约原则,对所述查询语法树执行规约处理,得到经规约处理后的查询语法树。
22.根据权利要求18所述的基于静态Cache的搜索装置,其特征在于,所述静态缓存替换单元包括:
高频语法树查找子单元,用于在所述查询语法树中查找是否存在预先生成的高频语法树;
静态缓存替换执行子单元,用于当所述高频语法树查找子单元找到所述高频语法树时,按照从根节点到叶子节点的顺序用预先计算出的所述高频语法树的唯一标识替换所述查询信息中的、与所述高频语法树对应的部分查询信息;所述高频语法树的唯一标识用于在搜索阶段从索引库中快速召回与所述部分查询信息对应的搜索结果;
其中,所述高频语法树查找子单元包括:
语法子树标识计算子单元,用于对所述查询语法树采用递归遍历的方式,采用与生成高频语法树唯一标识相同的算法,计算每个非叶子节点的各个子节点的各种可能组合的语法子树的唯一标识;
语法子树匹配子单元,用于对计算出的每个语法子树的唯一标识,与所述高频语法树配置信息中的高频语法树的唯一标识进行匹配,如果匹配成功则判定所述查询语法树中存在预先生成的高频语法树。
23.根据权利要求15所述的基于静态Cache的搜索装置,其特征在于,所述搜索操作执行单元包括:
缓存替换搜索子单元,用于根据执行替换操作所用唯一标识对索引库进行检索,获取已静态缓存的、与所述唯一标识代表的部分查询信息对应的搜索结果;
常规搜索子单元,用于根据未执行替换操作的其它部分查询信息,对索引库进行检索,获取对应的搜索结果;
搜索结果处理子单元,用于按照查询信息包含的逻辑关系,对上述获取的两类搜索结果进行相应的处理,得到满足查询信息指定查询要求的搜索结果;所述相应的处理包括:合并搜索结果、提取搜索结果中的相同部分、或者从搜索结果中剔除与其他搜索结果相同的部分;
搜索结果排序子单元,用于按照预先设定的排序算法,对经上述处理后的搜索结果进行排序,并将排序后的搜索结果返回给所述客户端。
24.一种用于静态Cache的索引数据生成方法,其特征在于,包括:
根据查询日志中的查询信息,生成高频语法树配置信息;
查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据。
25.根据权利要求24所述的用于静态Cache的索引数据生成方法,其特征在于,所述根据查询日志中的查询信息,生成高频语法树配置信息包括:
针对查询日志中的每条查询信息,生成按照预先设定的规约原则处理后的查询语法树及其唯一标识;
将在查询日志中出现次数满足设定要求的查询语法树作为高频语法树;高频语法树及其唯一标识共同组成所述高频语法树配置信息。
26.根据权利要求25所述的用于静态Cache的索引数据生成方法,其特征在于,所述针对查询日志中的每条查询信息,生成一颗按照预先设定的规约原则处理后的查询语法树及其唯一标识是指,针对查询日志中的每条查询信息,执行下述操作:
根据查询信息,生成对应的查询语法树;所述查询语法树的每个叶子节点包括:查询信息中的一对索引名和索引值,非叶子节点代表下一级子节点之间的逻辑关系;
按照预先设定的规约原则,对所述查询语法树执行规约处理,得到经规约处理后的查询语法树;
按照预先设定的规则,计算所述经规约处理后的查询语法树的唯一标识。
27.根据权利要求25所述的用于静态Cache的索引数据生成方法,其特征在于,所述查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据是指,针对每一棵高频语法树,与每一个文档执行下述匹配操作:
根据执行匹配操作的高频语法树每个叶子节点包含的索引名,获取执行匹配操作的文档中的相应数据,并判断所述数据中是否包含所述叶子节点指定的索引值,若是,则判定所述文档与所述叶子节点匹配成功;
针对每一个非叶子节点,根据所述非叶子节点代表的逻辑关系、以及非叶子节点的下一级子节点与所述文档的匹配结果,获取所述文档与所述非叶子节点的匹配结果;
判断所述文档与根节点是否匹配成功;若是,判定所述文档与所述高频语法树匹配成功,将根据所述高频语法树的唯一标识检索所述文档的索引关系添加到索引库中,作为索引库的补充索引。
28.一种用于静态Cache的索引数据生成装置,其特征在于,包括:
配置信息生成单元,用于根据查询日志中的查询信息生成高频语法树配置信息;
离线文档匹配单元,用于查找与所述配置信息中的高频语法树相匹配的文档,生成根据高频语法树快速检索到与之匹配文档的索引数据。
29.一种用于获取查询语法树标识的方法,其特征在于,包括:
按照预先设定的规约原则,对查询语法树执行规约处理,得到规约语法树;
针对所述规约语法树的每个叶子节点,用该节点包含的查询字符串作为预先选定的哈希算法的输入,计算对应的Hash值,并将所述Hash值作为该叶子节点的Hash值;
针对所述规约语法树的每个非叶子节点,根据下一级子节点的Hash值和所述非叶子节点代表的逻辑关系,计算所述非叶子节点的Hash值;并将计算得到的根节点的Hash值作为所述查询语法树的唯一标识。
30.根据权利要求29所述的用于获取查询语法树标识的方法,其特征在于,所述预先设定的规约原则包括:
对于逻辑与,将A&(B&C)或者(A&B)&C都规约为A&B&C;
对于逻辑或,将(A|B)|C或者A|(B|C)都规约为A|B|C;
对于逻辑非,将A&(B not C)或者(B not C)&A都规约为(A&B)not C。
31.根据权利要求29-30任一所述的用于获取查询语法树标识的方法,其特征在于,所述针对每个非叶子节点,根据下一级子节点的Hash值和所述非叶子节点代表的逻辑关系,计算所述非叶子节点的Hash值,具体采用如下计算方式:
对于逻辑与节点,采用下一级子节点Hash值的和作为该节点的Hash值;
对于逻辑或节点,采用下一级子节点Hash值的乘积作为该节点的Hash值;
对于逻辑非节点,先将下一级右子节点Hash值按位取反,然后将得到的值与下一级左子节点的Hash值求和,并将得到的值作为该节点的Hash值。
32.根据权利要求31所述的用于获取查询语法树标识的方法,其特征在于,所述针对每个非叶子节点,根据下一级子节点的Hash值和所述非叶子节点代表的逻辑关系,计算所述非叶子节点的Hash值,还包括:
对下一级子节点的Hash值执行移位操作,用执行移位操作后的Hash值计算所述下一级子节点的上一级节点的Hash值。
33.一种用于获取查询语法树标识的装置,其特征在于,包括:
规约语法树生成单元,用于按照预先设定的规约原则,对查询语法树执行规约处理,得到规约语法树;
叶子节点标识计算单元,针对所述规约语法树的每个叶子节点,用该节点包含的查询字符串作为预先选定的哈希算法的输入,计算对应的Hash值,并将所述Hash值作为该叶子节点的Hash值;
非叶子节点标识计算单元,用于针对所述规约语法树的每个非叶子节点,根据下一级子节点的Hash值和所述非叶子节点代表的逻辑关系,计算所述非叶子节点的Hash值;并将计算得到的根节点的Hash值作为所述查询语法树的唯一标识。
CN201410352816.0A 2014-07-23 2014-07-23 基于静态Cache的搜索方法、索引数据生成方法以及装置 Active CN105335402B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201410352816.0A CN105335402B (zh) 2014-07-23 2014-07-23 基于静态Cache的搜索方法、索引数据生成方法以及装置
HK16106489.7A HK1218452A1 (zh) 2014-07-23 2016-06-07 基於靜態 的搜索方法、索引數據生成方法以及裝置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410352816.0A CN105335402B (zh) 2014-07-23 2014-07-23 基于静态Cache的搜索方法、索引数据生成方法以及装置

Publications (2)

Publication Number Publication Date
CN105335402A CN105335402A (zh) 2016-02-17
CN105335402B true CN105335402B (zh) 2018-12-04

Family

ID=55285939

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410352816.0A Active CN105335402B (zh) 2014-07-23 2014-07-23 基于静态Cache的搜索方法、索引数据生成方法以及装置

Country Status (2)

Country Link
CN (1) CN105335402B (zh)
HK (1) HK1218452A1 (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108121733B (zh) * 2016-11-29 2021-10-15 北京国双科技有限公司 一种数据的查询方法及装置
US10445361B2 (en) * 2016-12-15 2019-10-15 Microsoft Technology Licensing, Llc Caching of subgraphs and integration of cached subgraphs into graph query results
US10242223B2 (en) 2017-02-27 2019-03-26 Microsoft Technology Licensing, Llc Access controlled graph query spanning
CN107491534B (zh) * 2017-08-22 2020-11-20 北京百度网讯科技有限公司 信息处理方法和装置
CN108009245B (zh) * 2017-11-30 2021-02-26 平安养老保险股份有限公司 产品价值获取方法、装置、计算机设备及存储介质
CN110580306A (zh) * 2018-06-07 2019-12-17 西门子传感器与通讯有限公司 信息查询的方法、装置、系统及介质
CN111143359A (zh) * 2019-12-18 2020-05-12 口碑(上海)信息技术有限公司 查询语句生成方法及装置
CN115004169A (zh) * 2020-03-27 2022-09-02 深圳市欢太科技有限公司 用户选取方法、装置、服务器及存储介质
US11966401B2 (en) * 2020-12-24 2024-04-23 ActionIQ Query tree labeling and processing
CN113157646A (zh) * 2021-05-06 2021-07-23 日照蓝鸥信息科技有限公司 一种档案数字化信息管理系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101719156A (zh) * 2009-12-30 2010-06-02 南开大学 一种在关系型数据库中无缝集成纯xml查询引擎的系统
CN102063488A (zh) * 2010-12-29 2011-05-18 南京航空航天大学 一种基于语义的代码搜索方法
CN102542002A (zh) * 2011-12-08 2012-07-04 北京空间飞行器总体设计部 一种卫星遥测数据处理系统以及其实现方法
CN103365924A (zh) * 2012-04-09 2013-10-23 北京大学 一种搜索信息的方法、装置和终端

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101719156A (zh) * 2009-12-30 2010-06-02 南开大学 一种在关系型数据库中无缝集成纯xml查询引擎的系统
CN102063488A (zh) * 2010-12-29 2011-05-18 南京航空航天大学 一种基于语义的代码搜索方法
CN102542002A (zh) * 2011-12-08 2012-07-04 北京空间飞行器总体设计部 一种卫星遥测数据处理系统以及其实现方法
CN103365924A (zh) * 2012-04-09 2013-10-23 北京大学 一种搜索信息的方法、装置和终端

Also Published As

Publication number Publication date
HK1218452A1 (zh) 2017-02-17
CN105335402A (zh) 2016-02-17

Similar Documents

Publication Publication Date Title
CN105335402B (zh) 基于静态Cache的搜索方法、索引数据生成方法以及装置
US10019492B2 (en) Stop word identification method and apparatus
KR20100106464A (ko) 데이터 클러스터와 유의어의 탐색과 수정에 대한 방법 및 시스템
CN110008306A (zh) 一种数据关系分析方法、装置及数据服务系统
US11762879B2 (en) Information traceability method and system based on blockchain
Boyko A look trough methods of intellectual data analysis and their applying in informational systems
CN111666468A (zh) 一种基于团簇属性在社交网络中搜索个性化影响力社区的方法
CN111125199B (zh) 一种数据库访问方法、装置及电子设备
US10565188B2 (en) System and method for performing a pattern matching search
CN110532282A (zh) 数据查询方法及装置
CN102622358A (zh) 一种搜索信息的方法和系统
CN109885651A (zh) 一种问题推送方法和装置
CN108241709A (zh) 一种数据集成方法、装置和系统
US20150012563A1 (en) Data mining using associative matrices
US20230273924A1 (en) Trimming blackhole clusters
CN111522918A (zh) 数据汇聚方法、装置、电子设备及计算机可读存储介质
CN104182546A (zh) 数据库的数据查询方法及装置
Chester et al. Explanations for skyline query results.
Qiu et al. Big data linkage for product specification pages
CN112765118B (zh) 一种日志查询方法、装置、设备及存储介质
CN111552856A (zh) 一种微博舆情传播路径分析方法
CN111460088A (zh) 相似文本的检索方法、装置和系统
CN105808745B (zh) 一种数据检索方法及服务器
CN110222156A (zh) 发现实体的方法和装置、电子设备、计算机可读介质
CN113139389B (zh) 基于动态优化的图模型语义查询扩展方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1218452

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant