发明内容
有鉴于此,本申请提供一种终端数据搜索的实现方法,应用于搜索引擎,包括:
在满足设定条件时,根据从数据管理方获取的可搜索数据项的描述生成索引,所述数据项描述中包括所述数据管理方每个可搜索数据项的标识;
根据来自用户搜索请求中的搜索字符串,在索引中查找与所述搜索字符串匹配的数据项标识;
采用所述数据项标识从数据管理方获取对应的数据项;基于获取的数据项向用户生成结果。
本申请提供的一种终端数据搜索的实现方法,应用于数据管理方,包括:
根据搜索引擎获取数据项描述的请求,向搜索引擎提供可搜索数据项的描述,其中包括每个可搜索数据项的标识;
根据搜索引擎携带有数据项标识的获取数据项的请求,将对应于所述数据项标识的数据项返回给搜索引擎。
本申请还提供了一种终端数据搜索的实现装置,应用于搜索引擎,包括:
索引生成单元,用于在满足设定条件时,根据从数据管理方获取的可搜索数据项的描述生成索引,所述数据项描述中包括所述数据管理方每个可搜索数据项的标识;
索引查找单元,用于根据来自用户搜索请求中的搜索字符串,在索引中查找与所述搜索字符串匹配的数据项标识;
搜索结果单元,用于采用所述数据项标识从数据管理方获取对应的数据项;基于获取的数据项生成搜索结果。
本申请提供的一种终端数据搜索的实现装置,应用于数据管理方,包括:
数据项描述提供单元,用于根据搜索引擎获取数据项描述的请求,向搜索引擎提供可搜索数据项的描述,其中包括每个可搜索数据项的标识;
数据项提供单元,用于根据搜索引擎携带有数据项标识的获取数据项的请求,将对应于所述数据项标识的数据项返回给搜索引擎。
由以上技术方案可见,本申请的实施例中,搜索引擎从数据管理方获取数据项描述,生成索引,在搜索时通过索引中与用户的搜索字符串相匹配的数据项标识,从数据管理方得到对应的数据项,使得搜索过程在搜索引擎上统一实现,具有统一的召回率和准确率,为用户选择搜索字符串提供了便利;同时避免了在数据管理方分别实现搜索导致的重复工作。
具体实施方式
本申请的实施例提出一种新的终端数据搜索的实现方法,每个数据管理方将可搜索数据项的描述提供给搜索引擎,供搜索引擎生成索引,与用户的搜索字符串进行匹配,再通过索引中匹配数据项的标识从数据管理方获得数据项,以生成搜索结果,从而由搜索引擎统一进行对各个数据管理方可搜索数据项的搜索,无需由数据管理方自行实现搜索功能,并且能够达到统一的召回率和准确率,以解决现有技术中存在的问题。
本申请实施例应用在终端上,由搜索引擎接收用户的搜索字符串,对数据管理方的数据进行搜索,并向用户返回搜索结果。终端可以是手机、平板电脑、PC(Personal Computer,个人电脑)、笔记本等设备。
本申请的实施例中,数据管理方是终端上对作为搜索对象的数据具有操作权限和维护功能的主体,例如可以是一个App内的业务功能单元,也可以是一个App。数据管理方通常包括业务组件(用来管理数据的功能组件)和存储组件(用来存储被搜索数据的功能组件,如文件或数据库);在一些应用场景中,搜索引擎对数据库存储组件的访问必须通过数据管理方的业务组件进行,也就是说搜索引擎不能直接访问数据管理方的存储组件;在另一些应用场景中,搜索引擎可以通过数据管理方的业务组件来访问存储组件,也可以直接访问存储组件。
搜索引擎可以为一个到多个数据管理方的数据提供搜索服务。例如,当数据管理方是一个到多个App内的业务功能单元时,搜索引擎可以是该App内的一个功能单元;当数据管理方是一个到多个App时,搜索引擎可以是在该终端上为多个App提供搜索服务的一个独立App。
本申请的实施例中,数据搜索的实现方法应用于搜索引擎的流程如图1所示,应用在数据管理方的流程如图2所示。
在数据管理方,步骤210,根据搜索引擎获取数据项描述的请求,向搜索引擎提供可搜索数据项的描述,其中包括每个可搜索数据项的标识。
数据项是匹配于用户的搜索字符串的数据单位,根据数据管理方的具体实现,可以是数据库表中的一条记录、或者一个文件等。数据项描述是对某个数据项的内容或属性的表达,数据管理方可以直接将数据项本身作为数据项描述(例如文件,在对文件内容的搜索场景中),也可以将数据项中的一部分作为数据项描述(例如数据库表记录中的一到多个字段),还可以为数据项生成数据项描述(例如文件的存储位置)。数据项描述中包括数据项标识,对某个数据管理方而言,数据项标识唯一的对应于一条可搜索的数据项,例如,如果数据项是数据库表的记录,其标识可以是该数据库表的主键;如果数据项是文件,其标识可以是该文件包括文件名的存储路径。可搜索数据项是数据管理方开放给搜索引擎,可供用户进行搜索的数据项。
搜索引擎可以在满足预定条件时,向数据管理方发送获取数据项描述的请求。预定条件可以根据应用场景的实际需求来确定,在一个例子中,可以由管理员为搜索引擎设置每个数据管理方的接口,也可以由数据管理方主动向搜索引擎注册其为搜索引擎提供的接口,在搜索引擎收到用户的搜索请求后,如果搜索引擎还没有为该搜索请求针对的数据管理方建立索引,则采用设置或注册的接口向对应的数据管理方发送获取数据项描述的请求;在另一个例子中,可以由数据管理方在可搜索的数据项描述发生变化时,向搜索引擎发送建立索引的通知,搜索引擎在收到通知后,向发出通知的数据管理方发送获取数据项描述的请求。
数据管理方在收到搜索引擎获取数据项描述的请求后,向搜索引擎提供可搜索数据项的描述,其中包括每个可搜索数据项的标识。
在搜索引擎上,步骤210,在满足设定条件时,根据从数据管理方获取的可搜索数据项的描述生成索引,数据项描述中包括该数据管理方每个可搜索数据项的标识。
如前所述,在满足设定条件时,搜索引擎向数据管理方请求数据项描述。在收到数据管理方返回的数据项描述后,搜索引擎根据该数据管理方每个可搜索数据项的描述生成索引。
根据数据项描述生成索引的具体方式可以参照现有技术实现,如单分词、双分词、拼音分词等等;此外,索引可以采用各种关键词描述方式,例如中文、英文、部分中文或部分英文、全拼、简拼、部分全拼等等;索引也可以各种存储形式,例如在缓存中建立索引,或者将索引保存在索引文件中等等;本申请的实施例对上述均不做限定。
需要说明的是,生成的索引中包括数据项标识,用来向数据项所属的数据管理方获取对应的数据项。
在搜索引擎上,步骤220,根据来自用户搜索请求中的搜索字符串,在索引中查找与该搜索字符串匹配的数据项标识。
当用户需要进行搜索时,在终端上输入搜索字符串,搜索引擎按照用户输入的搜索字符串,在索引中查找该搜索字符串匹配的数据项标识。
搜索引擎查找索引的方式,可以参照现有技术实现,不再赘述。
在搜索引擎上,步骤230,采用该数据项标识从数据管理方获取对应的数据项;基于获取的数据项生成搜索结果。
在数据管理方,步骤320,根据搜索引擎携带有数据项标识的获取数据项的请求,将对应于该数据项标识的数据项返回给搜索引擎。
对在索引中找到的每一个与用户的搜索字符串匹配的数据项标识,搜索引擎向该数据项标识所属的数据管理方发送获取数据项的请求,在请求中携带要获取的数据项标识。搜索引擎可以在一个获取数据项请求中携带一个到多个数据项标识。
由于数据项标识唯一对应于数据管理方的一个可搜索数据项,在搜索引擎提供一个到多个数据项标识后,数据管理方可以根据数据项标识找到对应的数据项,并将该数据项或这些数据项返回给搜索引擎。
搜索引擎根据从一个至多个数据管理方获取的数据项生成搜索结果,在终端上展示给用户。根据数据项生成展现给用户的搜索结果的方式可以参照现有技术实现。
可见,本申请的实施例中,由数据管理方向搜索引擎提供可搜索数据项的描述,供搜索引擎生成索引,在搜索时搜索引擎通过索引中与用户的搜索字符串相匹配的数据项标识,从数据管理方得到对应的数据项来生成搜索结果,由搜索引擎统一进行对各个数据管理方可搜索数据项的搜索,达到统一的召回率和准确率,提升了用户的搜索体验;同时避免了在数据管理方分别实现搜索导致的工作量,减少了数据管理方接入搜索服务的障碍。
如前所述,搜索引擎可以将索引保存在缓存中,以可以将索引以索引文件的形式保存。在缓存中实现的索引具有查询速度快的优点,但是当接入搜索引擎的数据管理方较多或数据项较多时,索引占用的缓存容量会变得过大,而影响到App或终端的性能。以文件形式保存的索引可以在基本不影响查询效率的情况下,减少对内存的占用。
当数据管理方的数据项描述发生变化时,该变化可能会使得搜索引擎所建立的索引不再准确。为了维护索引与数据项描述的一致性,可以按照变化后的数据项描述来对索引进行更新。
在一种实现方式中,数据管理方可以在可搜索的数据项描述发生变化时,向搜索引擎发送建立索引的通知。搜索引擎在收到建立索引的通知后,读取该数据管理方所有可搜索的数据项描述,重新生成索引。
在另一种实现方式中,数据管理方可以在可搜索的数据项描述发生变化时,向搜索引擎发送数据项描述变化的通知,其中包括发生变化的数据项标识。搜索引擎在收到数据项描述变化的通知后,从中提取发生变化的数据项标识,利用该数据项标识向数据管理方获取变化后的数据项描述。搜索引擎在索引中删除与变化前的该数据项描述关联的内容,添加根据变化后的该数据项描述生成的内容。例如,在可搜索数据项为数据库表记录的应用场景中,数据项描述可以是包括数据库表主键(通常作为数据项标识)在内的一个到多个字段;可以为这些数据库表的字段注册钩子函数(hook),注册后的钩子函数将在这些字段发生变化时发出通知,这样搜索引擎即可在数据项描述发生变化后收到通知,从而及时更新需要随之修改的索引内容。根据应用场景中数据库的类型,可以选用现有技术中对应数据库类型提供的钩子函数,也可以参照现有技术自行实现这样的钩子函数。
在本申请的应用示例一中,在一个App内,搜索引擎为多个业务功能单元提供搜索服务,每个业务功能单元的业务组件与搜索引擎进行交互,其可搜索的数据项为各自业务数据库表中的记录,搜索引擎不能直接访问业务数据库。其交互关系如图3所示。
管理员为搜索引擎配置各个业务功能单元的业务组件的访问接口。
当搜索引擎收到用户的搜索字符串后,查看搜索字符串关联的业务的索引是否已经建立,如果尚未建立,则通过该业务的业务组件接口向对应的业务功能单元发送获取数据项描述的请求,业务组件在收到请求后,从作为搜索对象的业务数据库表中读取每条记录的主键(本应用示例中的数据项描述和数据项标识),并返回给搜索引擎。搜索引擎根据接收的主键,在缓存中建立该业务的索引。
如果与搜索字符串关联的业务的索引已经建立,或在该业务的索引建立后,搜索引擎在该业务的索引中查找与搜索字符串匹配的主键。索引查找完毕后,搜索引擎将所有找到的主键在获取数据项的请求中发送给业务组件,业务组件从业务数据库中读取这个或这些主键所在的记录,返回给搜索引擎。
搜索引擎对返回的各条记录进行加工,生成搜索结果,呈现给用户。
如果可搜索数据库表的主键发生变化,业务组件向搜索引擎发送建立索引的通知。搜索引擎重新向业务组件获取所有记录的主键,生成该业务的新索引,并替换缓存中的该业务原来的索引。
在本申请的应用示例二中,搜索引擎为多个业务功能单元提供搜索服务,每个业务功能单元的业务组件与搜索引擎进行交互,其可搜索的数据项为各自业务数据库表中的记录,搜索引擎通过业务组件来获得业务数据库中的记录,但当业务数据库中的数据项描述发生变化时,由业务数据库通知搜索引擎发生变化的记录的数据项标识。其交互关系如图4所示。
管理员在搜索引擎上配置业务组件的访问接口、作为搜索对象的业务数据库表、以及作为数据项描述的业务数据库表的字段;在业务数据库上为作为数据项描述的业务数据库表的字段(其中包括作为数据项标识的主键)配置钩子函数、以及当这些字段发生变化时通知的目的方接口(即搜索引擎的接口)。
当搜索引擎收到用户的搜索字符串后,查看搜索字符串关联的业务的索引是否已经建立,如果尚未建立,则通过该业务的业务组件接口向对应的业务组件发送获取数据项描述的请求,业务组件在收到请求后,从作为搜索对象的数据库表中读取每条记录的主键,返回给搜索引擎。搜索引擎根据接收的主键,建立该业务的索引并保存在索引文件中。
如果与搜索字符串关联的业务的索引已经建立,或在该业务的索引建立后,搜索引擎在该业务的索引中查找与搜索字符串匹配的主键。索引查找完毕后,搜索引擎将所有找到的主键在获取数据项的请求中发送给业务组件,业务组件从业务数据库中读取这个或这些主键所在的记录,返回给搜索引擎。
搜索引擎对返回的各条记录进行加工,生成搜索结果,呈现给用户。
如果可搜索数据库表的主键发生变化,检测到变化的钩子函数向搜索引擎发送数据项描述变化的通知,其中包括发生变化的记录的主键。搜索引擎收到数据项描述变化的通知,采用其中的主键通过业务组件获取到发生变化的记录中用作数据项描述的字段。搜索引擎根据该主键查找索引文件,删除所有该主键关联的内容(如果发生变化的是主键,则搜索引擎要查找并删除所有与变化前的主键关联的内容);搜索引擎根据变化后的用作数据项描述的字段生成新的索引内容,并添加到该业务的索引中。
与上述流程实现对应,本申请的实施例还提供了一种应用搜索引擎的数据搜索实现装置,和一种应用于数据管理方的数据搜索实现装置。这两种装置均可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为逻辑意义上的装置,是通过终端的CPU(Central Process Unit,中央处理器)将对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了图5所示的CPU、内存以及非易失性存储器之外,终端通常还包括用于进行无线信号收发的芯片等其他硬件。
图6所示为本申请实施例提供的一种数据搜索的实现装置,应用于搜索引擎,包括索引生成单元、索引查找单元和搜索结果单元,其中:索引生成单元用于在满足设定条件时,根据从数据管理方获取的可搜索数据项的描述生成索引,所述数据项描述中包括所述数据管理方每个可搜索数据项的标识;索引查找单元用于根据来自用户搜索请求中的搜索字符串,在索引中查找与所述搜索字符串匹配的数据项标识;搜索结果单元用于采用所述数据项标识从数据管理方获取对应的数据项;基于获取的数据项生成搜索结果。
可选的,所述设定条件包括:收到用户的搜索请求,并且尚未为所述搜索请求针对的数据管理方建立索引;和/或,收到数据管理方建立索引的通知;所述装置还包括:数据项描述请求单元,用于向数据管理方发送获取数据项描述的请求,接收数据管理方返回的可搜索数据项的描述。
一个例子中,所述装置还包括描述变化通知接收单元、描述变化获取单元和索引更新单元,其中:描述变化通知接收单元用于从数据管理方接收数据项描述变化的通知,其中包括发生变化的数据项标识;描述变化获取单元用于根据发生变化的数据项标识,获取变化后的数据项描述;索引更新单元用于删除索引中与变化前的所述数据项描述关联的内容,在索引中添加根据变化后的所述数据项描述生成的内容。
上述例子中,所述可搜索数据项的数据项描述可以包括:至少一个数据库表的字段,其中包括数据项标识;所述数据库表注册有当所述字段发生变化时发送通知的钩子函数;所述数据项描述变化通知单元具体用于:接收在所述数据库表注册的钩子函数在可搜索数据项描述发生变化时发送的通知。
上述例子中,所述数据项标识包括:所述数据库表的主键。
可选的,所述索引采用缓存方式保存,或保存在索引文件中。
图7所示为本申请实施例提供的一种数据搜索的实现装置,应用于数据管理方,包括数据项描述提供单元和数据项提供单元,其中:数据项描述提供单元用于根据搜索引擎获取数据项描述的请求,向搜索引擎提供可搜索数据项的描述,其中包括每个可搜索数据项的标识;数据项提供单元用于根据搜索引擎携带有数据项标识的获取数据项的请求,将对应于所述数据项标识的数据项返回给搜索引擎。
可选的,所述装置还包括:索引建立通知单元,用于在可搜索的数据项描述发生变化时,向搜索引擎发送建立索引的通知。
一个例子中,所述装置还包括数据项描述变化通知单元,用于在可搜索的数据项描述发生变化时,向搜索引擎发送数据项描述变化的通知,其中包括发生变化的数据项标识,供搜索引擎更新与发生变化的数据项描述关联的索引。
上述例子中,所述可搜索数据项的数据项描述可以包括:至少一个数据库表的字段,其中包括数据项标识;所述数据库表注册有当所述字段发生变化时发送通知的钩子函数;所述数据项描述变化的通知包括:在所述钩子函数监测到所述字段发生变化时发送的通知。
可选的,所述数据项标识包括:所述数据库表的主键。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。