搜索方法、装置、***、以及命令转换器的生成方法
技术领域
本申请涉及计算机技术领域,尤其涉及一种搜索方法、装置、***以及一种命令转换器的生成方法。
背景技术
互联网中信息量异常庞大,而搜索功能可以方便快捷地从中获取需要的信息,为此,搜索引擎(下文简称引擎)应运而生。通过将特定的搜索命令(下文简称命令)发送至对应的引擎中,完成信息的搜索。通过不同的开发语言或不同的开发思路,开发人员开发出了多种引擎,比如Sol、ElasticSearch,均是基于Lucene的搜索引擎,又如分布式实时搜索引擎HA3等,这些均是不同的引擎,且各自具有不同的优缺点。所以应用程序开发人员会根据需求选定合适的引擎。
现有技术,应用程序(下文简称应用)的开发人员在选定合适的搜索引擎后,会在应用和引擎之间配置一个转换器,可以将应用发送的搜索请求(下文简称请求)转换为引擎可以识别的命令,并将搜索结果按照预设格式转换为应用可识别的应用结果,从而完成搜索。
然而,在实际应用中,应用可能会根据需求的变化而更换搜索引擎,比如现有搜索引擎的处理效率无法满足业务量的增长,所以需要更换处理效率更高的搜索引擎;或对应用进行优化改进时修改了搜索请求的输出格式,等。这就需要开发人员根据修改后的请求输出格式或变更后的搜索引擎接口,进行重新适配,如果多次修改请求格式或多次变更搜索引擎,则需要多次重新适配,这对于开发资源(包括人力、物力等)是一种浪费。
发明内容
本申请实施例提供一种搜索方法,以实现在应用或搜索引擎变化后,保证搜索功能可用的同时,减少开发资源的浪费。
本申请实施例提供一种搜索装置,以实现在应用或搜索引擎变化后,保证搜索功能可用的同时,减少开发资源的浪费。
本申请实施例提供一种搜索***,以实现在应用或搜索引擎变化后,保证搜索功能可用的同时,减少开发资源的浪费。
本申请实施例提供一种命令转换器的生成方法,以实现在应用或搜索引擎变化后,保证搜索功能可用的同时,减少开发资源的浪费。
为解决上述技术问题,本申请实施例是这样实现的:
本申请实施例采用下述技术方案:
一种搜索方法,包括:
接收应用发送的满足预设规范的搜索请求;
将所述搜索请求转换为与所述应用的需求匹配的搜索引擎可识别的搜索命令;
根据所述搜索命令以及所述搜索引擎进行搜索并生成搜索结果后,按照预定格式转换为应用可识别的应用结果;
将所述应用结果返回给所述应用。
优选地,将所述搜索请求转换为所述应用的需求匹配的搜索引擎可识别的搜索命令,包括:
确定与所述应用的需求匹配的搜索引擎;
对所述搜索请求进行解析;
通过与所述搜索引擎对应的命令转换器,对解析后的搜索请求进行转换,生成所述搜索引擎可识别的搜索命令。
优选地,确定与所述应用的需求匹配的搜索引擎,包括:
根据所述应用的指定信息,确定搜索引擎。
优选地,确定与所述应用的需求匹配的搜索引擎,包括:
根据所述应用的需求以及搜索引擎性能,确定搜索引擎。
优选地,所述方法包括:
对所述搜索请求进行语法解析,生成语法树;
通过与所述搜索引擎对应的命令转换器,对所述语法树中的信息进行转换,生成所述搜索引擎可识别的搜索命令。
一种搜索装置,包括:接收单元、第一转换单元、第二转换单元、返回单元,其中,
所述接收单元,接收应用发送的满足预设规范的搜索请求;
所述第一转换单元,将所述搜索请求转换为与所述应用的需求匹配的搜索引擎可识别的搜索命令;
所述第二转换单元,根据所述搜索命令以及所述搜索引擎进行搜索并生成搜索结果后,按照预定格式转换为应用可识别的应用结果;
所述返回单元,将所述应用结果返回给所述应用。
优选地,所述第一转换单元,
确定与所述应用的需求匹配的搜索引擎;
对所述搜索请求进行解析;
通过与所述搜索引擎对应的命令转换器,对解析后的搜索请求进行转换,生成所述搜索引擎可识别的搜索命令。
优选地,所述第一转换单元,
根据所述应用的指定信息,确定搜索引擎。
优选地,所述第一转换单元,
根据所述应用的需求以及搜索引擎性能,确定搜索引擎。
优选地,所述第一转换单元,
对所述搜索请求进行语法解析,生成语法树;
通过与所述搜索引擎对应的命令转换器,对所述语法树中的信息进行转换,生成所述搜索引擎可识别的搜索命令。
一种搜索***,包括:应用、搜索模块以及搜索引擎,其中,
应用,
发送满足预设规范的搜索请求,所述规范由搜索模块预先设定;
接收应用可识别的应用结果;
搜索模块,
将搜索请求转换为与应用的需求匹配的搜索引擎可识别的搜索命令;
将搜索命令发送至对应的搜索引擎;
按照预定格式将搜索结果转换为应用可识别的应用结果后,将应用结果发送至应用;
搜索引擎,
根据接收到的搜索命令进行搜索,并生成搜索结果。
一种命令转换器的生成方法,包括:
对满足预设规范的搜索请求进行解析,生成语法树;
根据所述语法树与搜索引擎在索引结构上的对应关系,生成针对所述搜索引擎的命令转换器。
由以上本申请实施例提供的技术方案可见,本申请实施例预先设定搜索请求的规范,当接收到应用发送的满足预设规范的搜索请求后,可以确定与应用的需求相匹配的搜索引擎,并将搜索请求转换为该搜索引擎可识别的搜索命令,在根据搜索命令和搜索引擎生成搜索结果后,还可以按照预定格式转换为应用可识别的应用结果,最终将应用结果返回给应用,完成搜索。相比于现有技术只要应用输出的搜索请求变化或变更搜索引擎就需要重新进行适配,导致开发资源过度浪费而言,本方法预先设定可接收的搜索请求的规范,所有应用可以均按照此规范发送搜索请求,无需考虑如何适配搜索引擎,就可以实现搜索功能,而作为搜索引擎,无需考虑如何适配应用,只需考虑如何与预设规范对接即可提供搜索服务,对于双方而言,均大幅减少了开发资源的浪费。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术在应用和搜索引擎之间配置转换器的示意图;
图2为现有技术在应用和搜索引擎之间配置转换器的示意图;
图3为本申请实施例1提供的一种搜索方法的流程示意图;
图4为本申请实施例1提供的一种搜索方法的示意图;
图5为本申请实施例2提供的一种命令转换器的生成方法的流程示意图;
图6为本申请实施例2生成语法树的示意图;
图7为本申请实施例3提供的搜索***的结构图;
图8为本申请实施例4提供的搜索装置的结构图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
实施例1
如前所述,现有技术,应用的开发人员需要根据搜索引擎的时效、性能、或者引擎可搜索的数据库的数据量选定合适的搜索引擎,在选定后,需要在应用和搜索引擎之间配置一个转换器,比如如图1所示,应用程序的接口输出的搜索请求的格式为“a”,搜索引擎“1”可识别的搜索命令的格式为“A”,所以需要在格式“a”和格式“A”之间配置一个转换器“aA1”,从而使得“a”格式的搜索请求由转换器“aA1”转换为“A”格式的搜索命令。但是,在实际应用中,应用程序可能会根据需求的变化而更换搜索引擎,比如如图2所示,应用程序的接口输出的搜索请求的格式修改为“b”,此时如果还需要与搜索引擎“1”适配,就需要配置一个转换器“bA1”。又如,如图2所示,应用程序的开发人员出于时效、性能的考虑,将搜索引擎“1”变更为搜索引擎“2”,此时就需要再次重新进行适配。如图可以看出,搜索请求的格式或搜索引擎,只要有一处发送变化,就需要重新进行适配,对于开发资源是一种严重浪费。基于上述缺陷,本申请实施例提供了一种搜索方法,以实现在应用或搜索引擎变化后,保证搜索功能可用的同时,减少开发资源的浪费。该方法的流程示意图如图3所示,包括下述步骤:
步骤11:接收应用发送的满足预设规范的搜索请求。
应用程序各种各样,生成的搜索请求也是各自有别,现有技术并没有统一搜索请求的格式、语句等,所以就导致了前文所述的问题,即只要搜索请求发生变化,就需要重新配置与搜索引擎之间的转换器。
而本步骤中,可以针对搜索请求预先设定一个规范,比如该规范中可以包含格式、语句等要求。应用程序在发送搜索请求时,需要满足这个预设规范才可以执行搜索。也就是将搜索请求进行统一,无论应用程序如何变化,只需要发送满足预设规范的搜索请求,就可以执行搜索。在实际应用中,可以将这种规范命名为FSQL(Free Structured QueryLanguage,自由结构化查询语言),即如果应用程序需要实现搜索功能,就需要按照FSQL规范输出搜索请求。
需要说明的是,在实际应用中,尤其是针对具有人机交互功能的应用程序而言,需要在用户界面中设置搜索入口,用于接收用户输入的搜索关键词等,而如何将用户输入的关键词转换为满足预设规范的搜索请求,可以作为隐含的技术特征包含在本步骤中,但该如何并非本方法重点,此处不过多讨论。即应用程序的开发人员在开发过程中,只需考虑如何将用户输入的搜索关键词转换为满足FSQL规范的搜索请求即可执行搜索。
步骤12:将该搜索请求转换为与该应用的需求匹配的搜索引擎对应的搜索命令。
在前一步骤中,已经接收到了应用发送的满足预设规范(FSQL规范)的搜索请求,本步骤就可以将该搜索请求转换为搜索引擎可识别的搜索命令。在现有技术中,应用程序只有一个与选定的搜索引擎之间的转换器,可以用于将接收到的用户输入的关键词转换为选定的搜索引擎可识别的搜索命令,而本步骤中,可以搭建一个搜索平台,该平台中可以包含多个转换器,每个转换器均可以将满足FSQL规范的搜索请求转换为对应的搜索引擎可识别的搜索命令,所以即使应用变更搜索引擎,只要存在对应的转换器就可以通过该搜索引擎实现搜索功能。所以本步骤就可以将搜索请求转换为与应用的需求匹配的搜索引擎对应的搜索命令。
具体地,可以细分为以下子步骤:
子步骤121:确定与该应用的需求匹配的搜索引擎。
由于应用众多,且选定的搜索引擎不尽相同,比如有1亿个应用程序,有n个搜索引擎,不同应用可以选定n个搜索引擎中的任意一个或多个,所以在进行转换前,可以先确定与应用的需求匹配的搜索引擎。则本子步骤可以包括:根据该应用的指定信息,确定搜索引擎。具体地,应用可以预先生成一个指定信息,可以通过该指定信息表示该应用需要的搜索引擎,比如就可以是搜索引擎“Sol”,则可以确定与该应用的需求相匹配的搜索引擎为搜索引擎“Sol”。
在实际应用中,搜索平台中可以包含多个搜索引擎,各个引擎的性能不尽相同,并且在工作过程中,各个引擎的负载也大不相同,所以本子步骤还可以包括:根据该应用的需求以及搜索引擎性能,确定搜索引擎。具体地,可以实时获取各个搜索引擎的性能,该性能可以包括负载率、空闲率、响应速度、数据量、搜索方式(全文索引、目录索引等)等。应用在发送搜索请求时可以附带本次请求的需求,比如可以是以数据量最大为主、或以响应速度为主、或以全文索引的搜索方式为主等。当接收到用户的需求后,就可以根据实时掌握的各个搜索引擎的性能,与应用的需求进行匹配,从而确定搜索引擎。
在实际应用中,可以将搜索引擎进行分类,同一类别的搜索引擎专门负责处理这一类别的搜索请求,比如类别可以根据关键词类别划分(体育类、数码类、音乐类、视频类等),也可以根据搜索方式划分(全文索引类、目录索引类等)。当接收到搜素请求后,可以根据分析出的搜索请求中关键词所属的类别确定出应用的需求,从而更准确地确定出与应用的需求相匹配的搜索引擎。
子步骤122:对该搜索请求进行解析。
前文已经介绍,该搜索请求是满足FSQL规范的,此时就可以对其进行解析,比如分析出其中的关键词,具体比如针对搜索文章而言,可以分析出标题、内容、日期等关键词。以便后续转换为搜索引擎可识别的搜索命令。
在实际应用中,针对满足FSQL规范的搜索请求,可以对该搜索请求进行语法解析,生成语法树,比如可以通过语法分析器进行分析,生成语法树,具体比如可以通过ANTLR语法分析器生成抽象语法树、或通过LALR语法分析器生成语法树等,以便后续转换为搜索引擎可识别的搜索命令。
子步骤123:通过与该搜索引擎对应的命令转换器,对解析后的搜索请求进行转换,生成该搜索引擎可识别的搜索命令。
在前一子步骤中解析出了关键词,或生成了语法树,在本子步骤中就可以根据对应的命令转换器对解析后的搜索请求进行转换,生成该搜索引擎可识别的搜索命令,比如,由FSQL规范的搜索请求转换至搜索引擎“Sol”可识别的搜索命令,就可以通过“FSQL→Sol”命令转换器进行转换,生成搜索引擎“Sol”可识别的搜索命令。
上一子步骤中提到了可以对搜索请求进行语法解析,生成语法树,所以本子步骤就可以包括:通过与该搜索引擎对应的命令转换器,对该语法树中的信息进行转换,生成该搜索引擎可识别的搜索命令。
需要说明的是,步骤121和步骤122均为步骤123的准备工作,不存在固定的先后顺序,在实际应用中完全可以先执行步骤122而后执行121,或一并执行步骤121和步骤122。
步骤13:根据该搜索命令以及该搜索引擎进行搜索并生成搜索结果后,按照预定格式转换为应用可识别的应用结果。
作为搜索引擎,当接收到搜索命令后,就可以执行搜索任务,并生成搜索结果,但是该搜索结果的格式只是搜索引擎可以识别的,且每个搜索引擎生成的搜索结果的格式大多不尽相同。在前文已经介绍,接收应用发送的搜索请求时是根据预设规范进行接收,则本步骤中,也需要按照预定格式转换为应用可识别的应用结果。具体地,搜索引擎可识别的数据库可以是进行格式化后的数据,比如应用程序可以有一个数据库,如果想要通过搜索引擎实现搜索功能,就需要将该数据库进行格式化,存储为搜索引擎可识别、可查询的数据库。此后,生成的搜索结果,依旧只有搜索引擎可识别,但应用程序未必能够识别,所以就需要按照预定格式进行转换,将搜索结果转换为应用可识别的应用结果。按照预定格式进行转换即为将应用的数据库(使搜索引擎可识别而)进行的格式化的反向格式化。在实际应用中,上述转换格式的功能可以集成在对应的转换器中,也可以单独存在。
步骤14:将该应用结果返回给该应用。
在前一步骤确定出应用可识别的应用结果后,本步骤就可以将该应用结果返回给该应用,从而完成搜索。
如图4所示,为本实施例提供的搜索方法的示意图,可以将此示意图看作一个搜索平台,如图所示,可以先接收满足FSQL规范的搜索请求,此后启动FSQL执行器,可以通过ANTLR语法分析器进行解析生成抽象语法树(abstract syntax tree,AST)。同时,还可以确定与应用的需求匹配的搜索引擎,如图所示,可以从HA3搜索引擎、Lucene搜索引擎、或其他搜索引擎中确定,在生成语法树以及确定出搜索引擎后,调用预先配置好的对应确定的出搜索引擎的转换器,对解析后的搜索请求进行转换,生成与搜索引擎可识别的搜索命令,如图所示,可以分别根据HA3转换器、Lucene转换器或其他转换器,生成HA3搜索命令、Lucene搜索命令或其他搜索命令。然后,搜索引擎可以根据可识别的搜索命令进行搜索并生成搜索结果,但此时的搜索结果并非应用可识别,还可以按照预定的格式,由对应的转换器,将搜索结果进行转换,生成应用可识别的应用结果,最终将应用结果返回给应用,完成搜索任务。
采用实施例1提供的方法,预先设定搜索请求的规范,当接收到应用发送的满足预设规范的搜索请求后,可以确定与应用的需求相匹配的搜索引擎,并将搜索请求转换为该搜索引擎可识别的搜索命令,在根据搜索命令和搜索引擎生成搜索结果后,还可以按照预定格式转换为应用可识别的应用结果,最终将应用结果返回给应用,完成搜索。相比于现有技术只要应用输出的搜索请求变化或变更搜索引擎就需要重新进行适配,导致开发资源过度浪费而言,本方法预先设定可接收的搜索请求的规范,所有应用可以均按照此规范发送搜索请求,无需考虑如何与适配搜索引擎,就可以实现搜索功能,大幅减少了开发资源的浪费。另外,应用还可以通过指定期望的搜索引擎实现搜索功能。
实施例2
在实施例1中介绍了如何进行搜索,结合图4可以看出,转换器作为连接搜索请求与搜素引擎的中间件,起到了非常重要的作用,不同的转换器可以将满足预定规范搜索请求转换为各自对应的搜索引擎可识别的搜索命令。基于与实施例1相同的发明思路。本申请实施例提供了一种命令转换器的生成方法,以实现在应用或搜索引擎变化后,保证搜索功能可用的同时,减少开发资源的浪费。该方法的流程如图5所示,包括下述步骤:
步骤21:对满足预设规范的搜索请求进行解析,生成语法树。
在前文已经介绍,可以对搜索请求进行语法解析,生成语法树,比如可以通过ANTLR语法分析器生成抽象语法树。
步骤22:根据该语法树与搜索引擎在索引结构上的对应关系,生成针对该搜索引擎的命令转换器。
每个搜索引擎,在索引结构上均有各自的特点,而前一步骤生成的语法树在索引结构上也有自身的特点,就如同格式的区别或语句的区别,所以可以通过分析确定出满足预设规范的搜索请求的语法树与搜索引擎在索引结构上的对应关系,从而生成针对该搜索引擎的命令转换器。
通过以下举例,具体说明“FSQL→HA3”命令转换器的生成过程。
比如,有满足FSQL规范的搜索请求:foo:"hello"AND bar:"world"&&filter=day>"2012-12-12"&&sort=createTime。
通过ANTLR语法分析器生成抽象语法树,确定出如图6所示的抽象语法树的示意图。
HA3搜索引擎有两种重要的索引结构,分别是倒排索引和正排索引。其中,倒排索引,可以快速定位关键词所在文档的位置和词频等;正排索引,可以用来进行过滤、统计、排序等。
如图6所示,根据分析可以确定出FSQL搜索请求需要快速定位关键词的倒排子句(query_clause)和排序过滤的正排子句(sort_clause、filter_clause)。所以就可以根据这种在索引结构上的对应关系,生成针对HA3搜索引擎的命令转换器。当接收到应用发送的满足FSQL规范的搜索请求,且确定与应用的需求相匹配的搜索引擎为HA3搜索引擎时,就可以根据前述方法生成的“FSQL→HA3”命令转换器,将满足FSQL规范的搜索请求转换为HA3搜索引擎可识别的搜索命令。
采用实施例2提供的方法,对满足预设规范的搜索请求进行解析,生成语法树,再根据语法树与搜索引擎在索引结构上的对应关系,生成针对搜索引擎的命令转换器。相比于现有技术需要与多个应用分别进行适配才能为该多个应用提供搜索服务而言,搜索引擎只要与预设规范的搜索请求进行一次适配,就可以同时为多个应用提供搜索服务,在实施例1的基础上,应用的开发人员也无需再关注如何适配搜索引擎,只需发送满足预设规范的搜索请求,即可通过多种搜索引擎实现搜索功能,很大程度减少了开发资源的浪费。
实施例3
基于相同的发明构思,实施例3提供了一种搜索***,以实现在应用或搜索引擎变化后,保证搜索功能可用的同时,减少开发资源的浪费。如图7所示,为该***的结构图,包括:应用31、搜索模块32以及搜索引擎33,其中,
应用31,可以
发送满足预设规范的搜索请求,该规范由搜索模块预先设定;接收应用可识别的应用结果。
应用程序的研发人员在研发过程中只需要考虑如何将接收到的用户输入的关键词,转换为满足预设规范的搜索请求即可,无需关注如何与搜索引擎对接。该规范由搜索模块预先设定,比如前文所提到的FSQL规范。在***中,只要满足预设规范,均可以实现搜索的功能。
搜索模块32,可以
将搜索请求转换为与应用的需求匹配的搜索引擎可识别的搜索命令;
将搜索命令发送至对应的搜索引擎;
按照预定格式将搜索结果转换为应用可识别的应用结果后,将应用结果发送至应用。
如何确定搜索引擎、以及如何转换搜索命令,在前文已经介绍。搜索模块中可以包含若干通过实施例2介绍的方法生成的命令转换器,即命令转换器集合,该命令转换器,可以由搜索模块的开发人员配置也可以由搜索引擎的开发人员配置,以便能够为应用提供搜索服务。只需关注如何将满足预设规范的搜索请求转换为各个搜索引擎可识别的搜索命令即可,无需关注与应用对接。
搜索引擎33,可以
根据接收到的搜索命令进行搜索,并生成搜索结果。
此为搜索引擎的基本功能。
在实际应用中,应用可以将自身的数据库存储为搜索引擎可识别、可查询的格式,比如,应用有大量的用户数据,如果想要通过HA3搜索引擎实现搜索功能,就需要将大量的用户数据进行格式化,转换为HA3搜索引擎可查询的格式。而在HA3搜索引擎根据搜索命令进行搜索并生成搜索结果后,搜索模块可以将搜索结果进行逆格式化,还原为应用可识别的应用结果,并返回给应用。
在一种实施方式中,搜索模块32,可以
确定与应用的需求匹配的搜索引擎;
对搜索请求进行解析;
通过与搜索引擎对应的命令转换器,对解析后的搜索请求进行转换,生成搜索引擎可识别的搜索命令。
在一种实施方式中,搜索模块32,可以
根据应用的指定信息,确定搜索引擎。
在一种实施方式中,搜索模块32,可以
根据应用的需求以及搜索引擎性能,确定搜索引擎。
在一种实施方式中,搜索模块32,可以
对所述搜索请求进行语法解析,生成语法树;
通过与所述搜索引擎对应的命令转换器,对所述语法树中的信息进行转换,生成所述搜索引擎可识别的搜索命令。
采用实施例3提供的***,搜索模块预先设定搜索请求的规范,当接收到应用发送的满足预设规范的搜索请求后,可以确定与应用的需求相匹配的搜索引擎,并将搜索请求转换为该搜索引擎可识别的搜索命令,在根据搜索命令和搜索引擎生成搜索结果后,还可以按照预定格式转换为应用可识别的应用结果,最终将应用结果返回给应用,完成搜索。相比于现有技术只要应用输出的搜索请求变化或变更搜索引擎就需要重新进行适配,导致开发资源过度浪费而言,本方法预先设定可接收的搜索请求的规范,所有应用可以均按照此规范发送搜索请求,无需考虑如何与适配搜索引擎,就可以实现搜索功能,而作为搜索引擎,无需考虑如何适配应用,只需考虑如何与预设规范对接即可提供搜索服务,对于双方而言,均大幅减少了开发资源的浪费。
实施例4
基于与前述实施例的发明思路,本申请实施例提供一种搜索装置,以实现在应用或搜索引擎变化后,保证搜索功能可用的同时,减少开发资源的浪费。如图8所示,为该装置的结构图,包括:接收单元41、第一转换单元42、第二转换单元43、返回单元44,其中,
所述接收单元41,可以接收应用发送的满足预设规范的搜索请求;
所述第一转换单元42,可以将所述搜索请求转换为与所述应用的需求匹配的搜索引擎可识别的搜索命令;
所述第二转换单元43,可以根据所述搜索命令以及所述搜索引擎进行搜索并生成搜索结果后,按照预定格式转换为应用可识别的应用结果;
所述返回单元44,可以将所述应用结果返回给所述应用。
在一种实施方式中,第一转换单元42,可以
确定与所述应用的需求匹配的搜索引擎;
对所述搜索请求进行解析;
通过与所述搜索引擎对应的命令转换器,对解析后的搜索请求进行转换,生成所述搜索引擎可识别的搜索命令。
在一种实施方式中,第一转换单元42,可以
根据所述应用的指定信息,确定搜索引擎。
在一种实施方式中,第一转换单元42,可以
根据所述应用的需求以及搜索引擎性能,确定搜索引擎。
在一种实施方式中,第一转换单元42,可以
对所述搜索请求进行语法解析,生成语法树;
通过与所述搜索引擎对应的命令转换器,对所述语法树中的信息进行转换,生成所述搜索引擎可识别的搜索命令。
采用实施例4提供的装置,预先设定搜索请求的规范,当接收到应用发送的满足预设规范的搜索请求后,可以确定与应用的需求相匹配的搜索引擎,并将搜索请求转换为该搜索引擎可识别的搜索命令,在根据搜索命令和搜索引擎生成搜索结果后,还可以按照预定格式转换为应用可识别的应用结果,最终将应用结果返回给应用,完成搜索。相比于现有技术只要应用输出的搜索请求变化或变更搜索引擎就需要重新进行适配,导致开发资源过度浪费而言,本方法预先设定可接收的搜索请求的规范,所有应用可以均按照此规范发送搜索请求,无需考虑如何与适配搜索引擎,就可以实现搜索功能,而作为搜索引擎,无需考虑如何适配应用,只需考虑如何与预设规范对接即可提供搜索服务,对于双方而言,均大幅减少了开发资源的浪费。另外,应用还可以通过指定期望的搜索引擎实现搜索功能。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字***“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、***或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于***实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。