CN116226497A - 检索方法、介质、装置和计算设备 - Google Patents
检索方法、介质、装置和计算设备 Download PDFInfo
- Publication number
- CN116226497A CN116226497A CN202310219380.7A CN202310219380A CN116226497A CN 116226497 A CN116226497 A CN 116226497A CN 202310219380 A CN202310219380 A CN 202310219380A CN 116226497 A CN116226497 A CN 116226497A
- Authority
- CN
- China
- Prior art keywords
- document
- memory
- index
- target
- content
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
- G06F16/9532—Query formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/332—Query formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开的实施方式提供了一种检索方法、介质、装置和计算设备,涉及计算机技术领域,该检索方法包括:获取待检索内容,对待检索内容进行分词处理,得到目标关键词;根据目标关键词查询内存中的倒排索引,得到目标关键词对应的有序文档编号,内存中的倒排索引包含关键词、文档编号以及关键词与文档编号的映射关系;根据有序文档编号查询内存中的正排索引,从内存中获得待检索内容对应的目标文档,内存中的正排索引包含文档编号、文档内容以及文档编号与文档内容的映射关系,倒排索引和正排索引是通过内存映射文件机制从磁盘映射到内存中的。本公开能够大大提高检索效率。
Description
技术领域
本公开的实施方式涉及计算机技术领域,更具体地,本公开的实施方式涉及一种检索方法、介质、装置和计算设备。
背景技术
本部分旨在为权利要求书中陈述的本公开的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
搜索引擎(Search Engine)是指根据用户需求与一定算法,运用特定策略从互联网检索出指定信息反馈给用户的一门检索技术。使用搜索引擎进行检索,是获取信息的重要手段。
目前,可以通过基于磁盘的搜索引擎进行检索。具体的,在进行检索时,搜索引擎将倒排索引包含的词典(即关键词与位图的映射关系)拷贝到内存中,根据待检索内容对应的目标关键词,在词典中确定目标关键词对应的位图,并访问磁盘获取位图对应的位图内容,对获取到的位图内容进行逻辑运算(比如取交集或并集等)得到目标文档编号;搜索引擎通过目标文档编号访问正排索引,从磁盘中获得目标文档编号对应的文档内容,并将文档内容输出给用户。但通过上述方式进行检索,存在检索效率较低的问题。
发明内容
本公开提供一种检索方法、介质、装置和计算设备,以解决通过目前方式进行检索,存在的检索效率较低的问题。
在本公开实施方式的第一方面中,提供了一种检索方法,包括:
获取待检索内容;
对待检索内容进行分词处理,得到目标关键词;
根据目标关键词查询内存中的倒排索引,得到目标关键词对应的有序文档编号,内存中的倒排索引包含关键词、文档编号以及关键词与文档编号的映射关系;
根据有序文档编号查询内存中的正排索引,从内存中获得待检索内容对应的目标文档,内存中的正排索引包含文档编号、文档内容以及文档编号与文档内容的映射关系,倒排索引和正排索引是通过内存映射文件机制从磁盘映射到内存中的。
第二方面,本公开实施例提供一种检索装置,包括:
第一获取模块,用于获取待检索内容;
处理模块,用于对待检索内容进行分词处理,得到目标关键词;
第二获取模块,用于根据目标关键词查询内存中的倒排索引,得到目标关键词对应的有序文档编号,内存中的倒排索引包含关键词、文档编号以及关键词与文档编号的映射关系;
第三获取模块,用于根据有序文档编号查询内存中的正排索引,从内存中获得待检索内容对应的目标文档,内存中的正排索引包含文档编号、文档内容以及文档编号与文档内容的映射关系,倒排索引和正排索引是通过内存映射文件机制从磁盘映射到内存中的。
第三方面,本公开实施例提供一种计算设备,包括:处理器,以及与处理器通信连接的存储器;
存储器存储计算机执行指令;
处理器执行存储器存储的计算机执行指令,以实现如本公开第一方面所述的检索方法。
第四方面,本公开实施例提供一种存储介质,存储介质中存储有计算机程序指令,计算机程序指令被执行时,实现如本公开第一方面所述的检索方法。
第五方面,本公开实施例提供一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现如本公开第一方面所述的检索方法。
本公开实施例提供的检索方法、介质、装置和计算设备,通过获取待检索内容,对待检索内容进行分词处理,得到目标关键词;根据目标关键词查询内存中的倒排索引,得到目标关键词对应的有序文档编号,内存中的倒排索引包含关键词、文档编号以及关键词与文档编号的映射关系;根据有序文档编号查询内存中的正排索引,从内存中获得待检索内容对应的目标文档,内存中的正排索引包含文档编号、文档内容以及文档编号与文档内容的映射关系,倒排索引和正排索引是通过内存映射文件机制从磁盘映射到内存中的。由于本公开的倒排索引和正排索引通过内存映射文件机制从磁盘映射到了内存中的,能够更加简单高效的利用内存,倒排索引和正排索引的查询均是在内存中进行,而不需要频繁地与磁盘进行交互,因此,能够大大提高检索效率。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,其中:
图1为相关技术提供的磁盘索引文件加载过程的示意图;
图2为本公开实施例提供的一种应用场景示意图;
图3为本公开一实施例提供的检索方法的流程图;
图4为本公开一实施例提供的倒排索引包含的关键词与文档编号的映射关系的示意图;
图5为本公开一实施例提供的正排索引结构的示意图;
图6为本公开另一实施例提供的检索方法的流程图;
图7为本公开一实施例提供的倒排索引的数据结构的示意图;
图8为本公开另一实施例提供的倒排索引的数据结构的示意图;
图9为本公开又一实施例提供的倒排索引的数据结构的示意图;
图10为本公开一实施例提供的检索装置的结构示意图;
图11为本公开一实施例提供的存储介质示意图;
图12为本公开一实施例提供的计算设备的结构示意图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本公开的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本公开的实施方式可以实现为一种***、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。本公开所涉及的数据可以为经用户授权或者经过各方充分授权的数据,本公开实施方式/实施例可以互相组合。
根据本公开的实施方式,提出了一种检索方法、介质、装置和计算设备。
在本文中,需要理解的是,所涉及的术语:
咆哮位图(Roaring Bitmap),是压缩Bitmap的一种方法,压缩率高且计算与、或等逻辑运算速度快;Roaring Bitmap可以看成一个容器,存储uint32(一种数据类型)的数值;首先,将32bit uint(一种数据类型)类型数据划分为2^16个桶(即使用数据的前16位二进制作为桶的编号),每个桶有一个容器(Container)来存放一个数值的低16位;在存储和查询数值时,将数值k划分为高16位和低16位,取高16位值找到对应的桶,然后再将低16位值存放在相应的Container中;根据每个Container内值的稠密分别进行存储,值数量小于4096个的低密度使用一个数组(array)来存放,对于大于4096个元素的高密度值使用位图(bitset)来存放;
内存映射文件机制(MMAP),是Linux(一种操作***)***的内存映射文件机制,不仅可以实现共享内存,其本身提供了不同于一般普通文件的访问方式,进程可以像读写内存一样对普通文件进行操作;内存映射文件机制可以使得进程之间通过映射同一个普通文件实现共享内存,普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问;内存映射文件机制并不分配空间,只是将文件映射到调用进程的地址空间里;
读取-拷贝-更新(Read-Copy-Update,RCU),是Linux***中比较重要的一种同步机制;多线程读无需加锁,但更新数据的时候,需要先复制一份副本,在副本上完成修改,再一次性地替换旧数据,这是Linux***内核实现的一种针对“读多写少”的共享数据的同步机制;
字典树(Trie),又称前缀树,是一种有序树,用于保存关联数组,其中的键通常是字符串;与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定;一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串;一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值;存储的键(key)共享前缀,故而可以支持前缀查询;
有穷状态转换器(Finite State Transducer,FST),是一种类似Trie的结构,其具有三个优点:(1)空间占用小;通过对词典中单词前缀和后缀的重复利用,压缩了存储空间;(2)查询速度快,O(len(str))的查询时间复杂度;(3)支持前缀查询;FST给定一个key,除了能判断是否存在,还能输出一个关联的值。
此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
需要说明的是,本公开所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
下面参考本公开的若干代表性实施方式,详细阐释本公开的原理和精神。
发明概述
本发明人发现,搜索引擎能够根据关键词对***内的一些信息进行快速搜索,从海量的数据中,在较短的时间内找到用户想要的信息。使用搜索引擎进行检索,是获取信息的重要手段。目前,可以通过基于磁盘的搜索引擎进行检索,比如通过开源的搜索引擎(ElasticSearch,ES)进行检索。但是,检索过程需要频繁地与磁盘进行交互,而磁盘的速度慢于内存和中央处理器(Central Processing Unit,CPU)的速度,从而导致整个检索的效率较低。当数据有变动的时候,需要修改倒排索引或正排索引,在修改过程中,为了不影响检索过程(读进程),往往需要使用读写锁,导致降低检索速度。此外,由于写进程也需要从磁盘获取索引数据并将更新的结果保存到磁盘,与磁盘交互导致写进程速度较慢。
基于磁盘的搜索引擎在设计的过程中存在的主要问题包括:(1)难以同时兼具计算密集型与输入输出(Input Output,IO)密集型任务;(2)磁盘与内存及CPU存在数量级性能差距,磁盘资源属于瓶颈,而计算量富余。此外,图1为相关技术提供的磁盘索引文件加载过程的示意图,如图1所示,基于磁盘的搜索引擎加载索引文件(比如图1中的倒排索引和正排索引)时,操作***(Operating System,OS)从磁盘加载索引文件至内存中,内存缓存索引文件,以减少再次读取索引文件的时间(即磁盘IO时间)。当再次读取索引文件时,基于磁盘的搜索引擎在内存中再申请一个大缓冲区,然后读取索引文件,OS把内存中缓存的索引文件通过内核再次拷贝至用户空间内基于磁盘的搜索引擎所申请的缓冲区中。若索引文件很大,则会浪费大量物理内存,若此时内存不足,则会触发OS将读取的索引文件回写到磁盘的交换(swap)区域。基于磁盘的搜索引擎在使用完索引文件时,关闭对索引文件的使用。因此,基于磁盘的搜索引擎每次加载索引文件,不仅要重新申请内存来缓存索引文件,并且OS还拷贝了一次索引文件,而索引数据本来就缓存在内存中,导致检索效率较低。
基于上述问题,本公开提供一种检索方法、介质、装置和计算设备,通过采用基于内存映射文件机制的全内存式搜索引擎,能够更加简单高效地利用内存,保证所有查询都尽可能在内存中进行,避免进行磁盘查询,提高检索效率。
另外,倒排索引采用了RCU延迟释放机制,可以在无需加锁的情况下,进行多进程检索以及单进程修改索引;倒排索引采用了内存高效的FST和Roaring Bitmap实现,在具有高检索性能的同时,能够节约内存。
应用场景总览
首先参考图2对本公开提供的方案的应用场景进行示例说明。图2为本公开实施例提供的一种应用场景示意图,如图2所示,本应用场景中,服务器201获取用户通过手机202输入的待检索内容,服务器201根据待检索内容,确定待检索内容对应的目标文档,将目标文档发送给手机202。手机202显示目标文档,供用户查看。其中,服务器201根据待检索内容,确定待检索内容对应的目标文档的具体实现过程可以参见下述各实施例的方案。
需要说明的是,图2仅是本公开实施例提供的一种应用场景的示意图,本公开实施例不对图2中包括的设备进行限定,也不对图2中设备之间的位置关系进行限定。例如,在图2所示的应用场景中,还可以包括数据存储设备,该数据存储设备相对服务器201可以是外部存储器,也可以是集成在服务器201中的内部存储器。
示例性方法
下面结合图2的应用场景,参考图3来描述根据本公开示例性实施方式的用于检索方法。需要注意的是,上述应用场景仅是为了便于理解本公开的精神和原理而示出,本公开的实施方式在此方面不受任何限制。相反,本公开的实施方式可以应用于适用的任何场景。
首先,通过具体实施例介绍检索方法。
图3为本公开一实施例提供的检索方法的流程图。本公开实施例的方法可以应用于计算设备中,该计算设备可以是服务器或服务器集群等。如图3所示,本公开实施例的方法包括:
S301、获取待检索内容。
本公开实施例中,待检索内容可以是用户向执行本方法实施例的电子设备输入的,或者,是其它设备向执行本方法实施例的电子设备发送的。待检索内容比如为歌曲名称。
S302、对待检索内容进行分词处理,得到目标关键词。
该步骤中,在获取到待检索内容后,可以采用相关技术对待检索内容进行分词处理,得到至少一个目标关键词。对于具体如何进行分词处理,可参考目前的相关技术。
S303、根据目标关键词查询内存中的倒排索引,得到目标关键词对应的有序文档编号,内存中的倒排索引包含关键词、文档编号以及关键词与文档编号的映射关系。
该步骤中,倒排索引是搜索引擎的核心内容,是搜索引擎高效查询的关键,快速的检索过程主要依赖倒排表。倒排索引包含关键词与文档编号的映射关系,可以通过读取原始文档的方式来预先构建倒排索引,在搜索引擎启动时,将完整的倒排索引文件拷贝(touch)到内存中,该内存比如为物理内存。示例性地,图4为本公开一实施例提供的倒排索引包含的关键词与文档编号的映射关系的示意图,如图4所示,401对应的行表示倒排索引包含的文档编号,文档编号从1开始排序,可以理解,每个文档编号均有对应的文档内容;402对应的列表示倒排索引包含的关键词。基于图4,可以快速查询到包含某个关键词的所有文档,从而得到关键词对应的有序文档编号。以关键词是“十年”为例,包含“十年”的文档对应的文档编号取值为1,未包含“十年”的文档对应的文档编号取值为0,可以得到403对应的行表示的有序文档编号。关键词通常可以称为Term,有序文档编号可以称为倒排链,倒排索引本质上即为关键词到倒排链的映射。
示例性地,假设有个上亿量级的文档集,需要检索包含“Search Engine”这个短语的文档,通常是通过扫描该上亿量级的文档集,来得到包含“Search Engine”这个短语的文档,但检索效率比较低。而通常情况下,“Search”和“Engine”这两个词并不是很常见,上亿量级的文档集中可能只有几万篇文档包含“Search”,另有几万篇文档包含“Engine”,若能确定包含“Search”的文档集合,以及包含“Engine”的文档集合,则可以对两个文档集合取交集,来得到包含“Search Engine”这个短语的文档,这也是倒排索引的核心原理。
可选的,倒排索引采用FST存储关键词与文档编号的映射关系。
为了最大限度的节约内存使用量,在构建倒排索引时,采用高效且节省内存的FST结构,能够保证大多数关键词索引尽可能占用少的内存。通过目标关键词查询FST,可以获得目标关键词的倒排链(即目标关键词对应的有序文档编号)。
可选的,有序文档编号是通过Roaring Bitmap方法进行压缩的。
示例性地,参考图4,关键词“十年”对应的有序文档编号可以理解为关键词“十年”对应的位图,因此,可以通过Roaring Bitmap方法对有序文档编号进行压缩,以节省内存。对于具体如何通过Roaring Bitmap方法进行压缩,可参考目前相关技术。
S304、根据有序文档编号查询内存中的正排索引,从内存中获得待检索内容对应的目标文档,内存中的正排索引包含文档编号、文档内容以及文档编号与文档内容的映射关系,倒排索引和正排索引是通过内存映射文件机制从磁盘映射到内存中的。
该步骤中,正排索引即为文档编号到文档具体内容的映射,可以通过读取原始文档的方式来预先构建正排索引,在搜索引擎启动时,将完整的倒排索引文件和正排索引文件基于内存映射文件机制从磁盘touch到内存中,该内存比如为物理内存。
可以理解,通过内存映射文件机制,可以将磁盘上的索引文件映射到内存中的一片区域,当使用这块内存时,即相当于使用磁盘上的索引文件。内存映射文件机制具有如下优势:(1)以访问内存的方式访问索引文件,简化数据结构设计;在搜索引擎的内部实现中,并没有针对磁盘存储设计数据结构,而是完全使用了内存型数据结构,即通过指定内存分配器的方式,将需要存储到磁盘中的数据结构分配到映射的内存空间中;(2)能够直接利用内存映射文件进行跨进程通信,多进程共享同一索引文件,因此,搜索引擎实现读进程和写进程分离,读进程和写进程互不影响,支持高并发查询的同时,还可以支持实时索引文件更新,具体可参考下述实施例;(3)操作***自动将内存中的修改同步到磁盘上,不需要编写特别的I/O序列化机制,内存数据可以实时保存到磁盘。
示例性地,图5为本公开一实施例提供的正排索引结构的示意图,如图5所示,正排索引包含文档编号、文档内容以及文档编号与文档内容的映射关系(即图5中的字典),可以根据文档编号查询正排索引,得到目标文档。例如,文档编号为2的文档(即图5中的文档2)包括多个字段(比如字段2),其中,501为具体的字段示例,包括字段标识(IDentity,ID)、名称、等级、状态、艺名等字段,以字段2为例,字段2对应的概要包括字段类型、字段所在的位置、字段是否是索引、字段是否是关联字段等。
该步骤中,在得到目标关键词对应的有序文档编号后,可以根据有序文档编号查询内存中的正排索引,从内存中获得待检索内容对应的目标文档,输出目标文档,以便于用户查看。
本公开实施例提供的检索方法,通过获取待检索内容,对待检索内容进行分词处理,得到目标关键词;根据目标关键词查询内存中的倒排索引,得到目标关键词对应的有序文档编号,内存中的倒排索引包含关键词、文档编号以及关键词与文档编号的映射关系;根据有序文档编号查询内存中的正排索引,从内存中获得待检索内容对应的目标文档,内存中的正排索引包含文档编号、文档内容以及文档编号与文档内容的映射关系,倒排索引和正排索引是通过内存映射文件机制从磁盘映射到内存中的。由于本公开实施例的倒排索引和正排索引通过内存映射文件机制从磁盘映射到了内存中的,能够更加简单高效的利用内存,倒排索引和正排索引的查询均是在内存中进行,而不需要频繁地与磁盘进行交互,因此,能够大大提高检索效率。
图6为本公开另一实施例提供的检索方法的流程图。在上述实施例的基础上,本公开实施例对检索方法进行进一步说明。如图6所示,本公开实施例的方法可以包括:
S601、获取待检索内容。
该步骤的具体描述可以参见图3所示实施例中S301的相关描述,此处不再赘述。
S602、对待检索内容进行分词处理,得到目标关键词。
该步骤的具体描述可以参见图3所示实施例中S302的相关描述,此处不再赘述。
S603、根据目标关键词查询内存中的倒排索引,得到目标关键词对应的有序文档编号,内存中的倒排索引包含关键词、文档编号以及关键词与文档编号的映射关系。
该步骤的具体描述可以参见图3所示实施例中S303的相关描述,此处不再赘述。
对于目标关键词的个数为多个的情况,本公开实施例中,图3中S304步骤可以进一步包括如下的S604和S605两个步骤:
S604、将多个目标关键词分别对应的有序文档编号进行合并处理,得到合并处理后的有序文档编号。
示例性地,每个目标关键词对应的有序文档编号即每个目标关键词对应的倒排链,可以将多个目标关键词分别对应的倒排链进行快速合并处理(比如取交集或并集等)。由于倒排链基于Roaring Bitmap实现,合并处理的速度很快(比如上亿级别的数据量可在几毫秒内完成),对倒排链合并处理完成后,得到最终的合并处理后的有序文档编号。
S605、根据合并处理后的有序文档编号查询内存中的正排索引,从内存中获得待检索内容对应的目标文档,内存中的正排索引包含文档编号、文档内容以及文档编号与文档内容的映射关系,倒排索引和正排索引是通过内存映射文件机制从磁盘映射到内存中的。
参考上述S304步骤的示例,在得到合并处理后的有序文档编号后,可以根据合并处理后的有序文档编号查询内存中的正排索引,从内存中获得待检索内容对应的目标文档,输出目标文档,以便于用户查看。可以理解,整个检索过程均是在内存中进行,且由于倒排索引采用FST存储关键词与文档编号的映射关系,以及通过Roaring Bitmap方法对有序文档编号进行压缩,因此,在几亿的数据量中检索耗时只需要几毫秒。
当倒排索引或正排索引中的文档需要修改某些字段或者需要新增/删除文档时,则会导致修改倒排索引或正排索引。搜索引擎启动时,除了将完整的倒排索引文件和正排索引文件touch到内存中,还会基于RCU机制启动多个读进程(用于处理检索请求)和一个写进程,多个进程通过内存映射文件机制共享同一倒排索引文件和正排索引文件,读进程和写进程分离,互不影响,无需加锁。其中,在倒排索引文件或正排索引文件很大的情况下,可以分成多个文件块。在修改倒排索引或正排索引时,操作***自动将内存中的修改同步到磁盘上,不需要编写特别的I/O序列化机制,不用担心内存数据丢失。对于如何修改倒排索引或正排索引,可参考下述S606至S610步骤。
S606、响应于面向正排索引***第一文档的执行指令,在正排索引的末尾***第一文档,并在正排索引中记录第一文档的文档编号以及第一文档的文档编号与文档内容的映射关系。
示例性地,面向正排索引***第一文档的执行指令可以是用户向执行本方法实施例的电子设备输入的,或者,是其它设备向执行本方法实施例的电子设备发送的。在向正排索引***第一文档时,可以在正排索引的末尾***第一文档,能够有效提高对正排索引的修改速度。
S607、响应于修改正排索引中第二文档的执行指令,通过拷贝的方式获得第二文档对应的第三文档;对第三文档进行修改,获得修改后的第三文档;将第二文档替换为修改后的第三文档。
示例性地,修改正排索引中第二文档的执行指令可以是用户向执行本方法实施例的电子设备输入的,或者,是其它设备向执行本方法实施例的电子设备发送的。在修改正排索引中第二文档时,可以先拷贝第二文档(即原文档),得到第三文档,对第三文档进行修改,获得修改后的第三文档,将第二文档替换为修改后的第三文档,从而实现对原文档的延迟释放。
S608、响应于从正排索引中删除第四文档的执行指令,基于RCU机制,将第四文档从内存中删除,并将第四文档的文档编号标记为已删除。
示例性地,从正排索引中删除第四文档的执行指令可以是用户向执行本方法实施例的电子设备输入的,或者,是其它设备向执行本方法实施例的电子设备发送的。正排索引基于RCU机制实现,写进程不影响读进程,多个读进程可以无锁并发执行。基于RCU机制,可以延迟释放内存,通过设置一个稍大的延迟释放时长(比如10秒钟),来保证所有读进程都读取完成后才释放内存。具体的,响应于从正排索引中删除第四文档的执行指令,在达到延迟释放时长时,将第四文档从内存中删除,并将第四文档的文档编号标记为已删除。可以通过一个倒排链来专门标记删除的文档编号,且倒排链的改动也只需要在末尾修改即可。
S609、响应于面向倒排索引中目标文档编号的修改指令,在正排索引的末尾新建第五文档,记录第五文档的文档编号以及第五文档的文档编号与文档内容的映射关系,并将目标文档编号标记为已删除;在倒排索引包含的文档编号的末尾增加第五文档的文档编号,并增加关键词与第五文档的文档编号的映射关系。
示例性地,面向倒排索引中目标文档编号的修改指令可以是用户向执行本方法实施例的电子设备输入的,或者,是其它设备向执行本方法实施例的电子设备发送的。考虑到基于Roaring Bitmap实现的倒排链很难在中间***或删除文档编号,因此,搜索引擎可以采用标记删除旧文档,然后再增加新文档的方式来修改倒排索引。具体的,响应于面向倒排索引中目标文档编号的修改指令,在正排索引的末尾新建第五文档,记录第五文档的文档编号以及第五文档的文档编号与文档内容的映射关系,并将目标文档编号标记为已删除,在倒排索引包含的文档编号的末尾增加第五文档的文档编号,并增加关键词与第五文档的文档编号的映射关系,能够有效提高对倒排索引的修改速度。可以通过一个倒排链来专门标记删除的文档编号,且倒排链的改动也只需要在末尾修改即可。
可选的,按照预设时长更新倒排索引和正排索引,以删除冗余映射关系。
示例性地,预设时长比如为24小时。参考S608和S609步骤,随着对倒排索引和正排索引的不断修改,相应的文档数量越来越大,索引结构会越来越冗余。因此,搜索引擎每天更新倒排索引和正排索引,以删除冗余映射关系,即重新生成无冗余的倒排索引和正排索引。另外,搜索引擎还可以进行不变性判定,只有可能会影响到倒排索引时,才会真的更新倒排索引,否则只更新正排索引的字段值。通过上述方式,能够保证倒排索引和正排索引的索引结构的冗余度不会特别高,检索耗时不会受到明显的影响。
S610、响应于面向倒排索引增加新的映射关系的执行指令,若新的映射关系支持前缀查询,则通过Trie存储新的映射关系;若新的映射关系不支持前缀查询,则通过哈希表存储新的映射关系。
示例性地,面向倒排索引增加新的映射关系的执行指令可以是用户向执行本方法实施例的电子设备输入的,或者,是其它设备向执行本方法实施例的电子设备发送的。由于倒排索引采用FST存储关键词与文档编号的映射关系,而FST是不可改变的,因此,在面向倒排索引增加新的映射关系时,可以通过Trie或哈希表存储新的映射关系。图7为本公开一实施例提供的倒排索引的数据结构的示意图,如图7所示,倒排索引的数据结构为FST,FST支持前缀查询。图8为本公开另一实施例提供的倒排索引的数据结构的示意图,如图8所示,倒排索引的数据结构为Trie,Trie支持前缀查询,因此,若新的映射关系支持前缀查询,则可以通过Trie存储新的映射关系。图9为本公开又一实施例提供的倒排索引的数据结构的示意图,如图9所示,倒排索引的数据结构为哈希表,哈希表不支持前缀查询,因此,若新的映射关系不支持前缀查询,则可以通过哈希表存储新的映射关系。
本公开实施例提供的检索方法,通过获取待检索内容,对待检索内容进行分词处理,得到目标关键词;根据目标关键词查询内存中的倒排索引,得到目标关键词对应的有序文档编号;将多个目标关键词分别对应的有序文档编号进行合并处理,得到合并处理后的有序文档编号;根据合并处理后的有序文档编号查询内存中的正排索引,从内存中获得待检索内容对应的目标文档。由于本公开实施例的倒排索引和正排索引通过内存映射文件机制从磁盘映射到了内存中的,能够更加简单高效的利用内存,倒排索引和正排索引的查询均是在内存中进行,而不需要频繁地与磁盘进行交互,因此,能够大大提高检索效率。响应于面向正排索引***第一文档的执行指令,在正排索引的末尾***第一文档,能够有效提高对正排索引的修改速度;响应于修改正排索引中第二文档的执行指令,通过拷贝的方式获得第二文档对应的第三文档,对第三文档进行修改,获得修改后的第三文档;将第二文档替换为修改后的第三文档,能够实现对第二文档的延迟释放;基于RCU机制删除正排索引中的文档,能够保证写进程不影响读进程,多个读进程可以无锁并发执行,有助于提高检索效率;在修改倒排索引中目标文档编号时,采用标记删除旧文档,然后再增加新文档的方式来修改倒排索引,能够有效提升检索效率。
综上,本公开实施例提供的技术方案,至少具有如下优势:
(1)能够大幅提升大数据集检索速度;在数亿级别的数据量情况下,检索平均耗时在10ms以内;在实时性要求极高的场景下,可以在几毫秒内完成大部分检索需求,相比开源的搜索引擎ES,速度快了3倍以上;
(2)支持高每秒查询率(queries per second,qps)实时修改索引内容;写进程非常高效,由于均是在倒排索引和正排索引的尾部***修改内容,速度快,可支持几万qps的实时索引更新;同时,由于采用了RCU延迟释放机制,无需加锁,写进程不会影响查询速度和查询结果的正确性;
(3)成本可控,数据安全有保障;倒排索引采用内存高效的FST和Roaring Bitmap实现,可以节约内存,比如10亿级别的数据集,构建索引后大小仅需几百G内存,普通的物理机服务器即可部署检索服务;此外,由于采用了内存映射文件机制,在修改倒排索引或正排索引时,操作***自动将内存中的修改同步到磁盘上,即使服务器宕机,索引数据也可以保存到磁盘上,不会丢失。
本公开实施例提供的技术方案,能够解决大数据集(比如上亿级别)检索时,难以同时满足高并发量查询、低时延(比如10毫秒以内)以及索引数据实时更新频繁的问题。
示例性装置
在介绍了本公开示例性实施方式的介质之后,接下来,参考图10对本公开示例性实施方式的检索装置进行说明。本公开示例性实施方式的装置,可以实现前述检索方法实施例中的各个过程,并达到相同的功能和效果。
图10为本公开一实施例提供的检索装置的结构示意图,如图10所示,本公开实施例的检索装置1000包括:第一获取模块1001、处理模块1002、第二获取模块1003和第三获取模块1004。其中:
第一获取模块1001,用于获取待检索内容。
处理模块1002,用于对待检索内容进行分词处理,得到目标关键词。
第二获取模块1003,用于根据目标关键词查询内存中的倒排索引,得到目标关键词对应的有序文档编号,内存中的倒排索引包含关键词、文档编号以及关键词与文档编号的映射关系。
第三获取模块1004,用于根据有序文档编号查询内存中的正排索引,从内存中获得待检索内容对应的目标文档,内存中的正排索引包含文档编号、文档内容以及文档编号与文档内容的映射关系,倒排索引和正排索引是通过内存映射文件机制从磁盘映射到内存中的。
在一种可能的实施方式中,倒排索引采用FST存储关键词与文档编号的映射关系。
在一种可能的实施方式中,目标关键词的个数为多个,第三获取模块1004可以具体用于:将多个目标关键词分别对应的有序文档编号进行合并处理,得到合并处理后的有序文档编号;根据合并处理后的有序文档编号查询内存中的正排索引,从内存中获得待检索内容对应的目标文档。
在一种可能的实施方式中,该检索装置1000还包括***模块1005,用于响应于面向正排索引***第一文档的执行指令,在正排索引的末尾***第一文档,并在正排索引中记录第一文档的文档编号以及第一文档的文档编号与文档内容的映射关系。
在一种可能的实施方式中,该检索装置1000还包括第一修改模块1006,用于响应于修改正排索引中第二文档的执行指令,通过拷贝的方式获得第二文档对应的第三文档;对第三文档进行修改,获得修改后的第三文档;将第二文档替换为修改后的第三文档。
在一种可能的实施方式中,该检索装置1000还包括删除模块1007,用于响应于从正排索引中删除第四文档的执行指令,基于RCU机制,将第四文档从内存中删除,并将第四文档的文档编号标记为已删除。
在一种可能的实施方式中,该检索装置1000还包括第二修改模块1008,用于响应于面向倒排索引中目标文档编号的修改指令,在正排索引的末尾新建第五文档,记录第五文档的文档编号以及第五文档的文档编号与文档内容的映射关系,并将目标文档编号标记为已删除;在倒排索引包含的文档编号的末尾增加第五文档的文档编号,并增加关键词与第五文档的文档编号的映射关系。
在一种可能的实施方式中,该检索装置1000还包括增加模块1009,用于响应于面向倒排索引增加新的映射关系的执行指令,若新的映射关系支持前缀查询,则通过Trie存储新的映射关系;若新的映射关系不支持前缀查询,则通过哈希表存储新的映射关系。
在一种可能的实施方式中,该检索装置1000还包括更新模块1010,用于按照预设时长更新倒排索引和正排索引,以删除冗余映射关系;和/或,有序文档编号是通过RoaringBitmap方法进行压缩的。
本公开实施例的装置,可以用于执行上述任一方法实施例中检索方法的方案,其实现原理和技术效果类似,此处不再赘述。
示例性介质
在介绍了本公开示例性实施方式的方法之后,接下来,参考图11对本公开示例性实施方式的存储介质进行说明。
图11为本公开一实施例提供的存储介质示意图。参考图11所示,存储介质1100中存储着根据本公开的实施方式的用于实现上述方法的程序产品,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本公开的程序产品不限于此。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开公开操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备。
示例性计算设备
在介绍了本公开示例性实施方式的方法、介质和装置之后,接下来,参考图12对本公开示例性实施方式的计算设备进行说明。
图12显示的计算设备1200仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
图12为本公开一实施例提供的计算设备的结构示意图,如图12所示,计算设备1200以通用计算设备的形式表现。计算设备1200的组件可以包括但不限于:上述至少一个处理单元1201、上述至少一个存储单元1202,连接不同***组件(包括处理单元1201和存储单元1202)的总线1203。示例性地,处理单元1201可以具体为处理器,存储单元1202存储计算机执行指令,处理单元1201执行存储单元1202存储的计算机执行指令,以实现上述的检索方法。
总线1203包括数据总线、控制总线和地址总线。
存储单元1202可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)12021和/或高速缓存存储器12022,可以进一步包括非易失性存储器形式的可读介质,例如只读存储器(ROM)12023。
存储单元1202还可以包括具有一组(至少一个)程序模块12024的程序/实用工具12025,这样的程序模块12024包括但不限于:操作***、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
计算设备1200也可以与一个或多个外部设备1204(例如键盘、指向设备等)通信。这种通信可以通过输入/输出(I/O)接口1205进行。并且,计算设备1200还可以通过网络适配器1206与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图12所示,网络适配器1206通过总线1203与计算设备1200的其它模块通信。应当理解,尽管图中未示出,可以结合计算设备1200使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID***、磁带驱动器以及数据备份存储***等。
应当注意,尽管在上文详细描述中提及了检索装置的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
此外,尽管在附图中以特定顺序描述了本公开方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本公开的精神和原理,但是应该理解,本公开并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本公开旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
Claims (10)
1.一种检索方法,包括:
获取待检索内容;
对所述待检索内容进行分词处理,得到目标关键词;
根据所述目标关键词查询内存中的倒排索引,得到所述目标关键词对应的有序文档编号,所述内存中的倒排索引包含关键词、文档编号以及关键词与文档编号的映射关系;
根据所述有序文档编号查询内存中的正排索引,从内存中获得所述待检索内容对应的目标文档,所述内存中的正排索引包含文档编号、文档内容以及文档编号与文档内容的映射关系,所述倒排索引和所述正排索引是通过内存映射文件机制从磁盘映射到所述内存中的。
2.根据权利要求1所述的检索方法,所述倒排索引采用有穷状态转换器FST存储关键词与文档编号的映射关系。
3.根据权利要求1所述的检索方法,所述目标关键词的个数为多个,所述根据所述有序文档编号查询内存中的正排索引,从内存中获得所述待检索内容对应的目标文档,包括:
将多个所述目标关键词分别对应的有序文档编号进行合并处理,得到合并处理后的有序文档编号;
根据所述合并处理后的有序文档编号查询内存中的正排索引,从内存中获得所述待检索内容对应的目标文档。
4.根据权利要求1至3中任一项所述的检索方法,还包括:
响应于面向所述正排索引***第一文档的执行指令,在所述正排索引的末尾***所述第一文档,并在所述正排索引中记录所述第一文档的文档编号以及所述第一文档的文档编号与文档内容的映射关系。
5.根据权利要求1至3中任一项所述的检索方法,还包括:
响应于修改所述正排索引中第二文档的执行指令,通过拷贝的方式获得所述第二文档对应的第三文档;
对所述第三文档进行修改,获得修改后的第三文档;
将所述第二文档替换为所述修改后的第三文档。
6.根据权利要求1至3中任一项所述的检索方法,还包括:
响应于从所述正排索引中删除第四文档的执行指令,基于读取-拷贝-更新RCU机制,将所述第四文档从内存中删除,并将所述第四文档的文档编号标记为已删除。
7.根据权利要求1至3中任一项所述的检索方法,还包括:
响应于面向所述倒排索引中目标文档编号的修改指令,在所述正排索引的末尾新建第五文档,记录所述第五文档的文档编号以及所述第五文档的文档编号与文档内容的映射关系,并将所述目标文档编号标记为已删除;
在所述倒排索引包含的文档编号的末尾增加所述第五文档的文档编号,并增加关键词与所述第五文档的文档编号的映射关系。
8.根据权利要求1至3中任一项所述的检索方法,还包括:
响应于面向所述倒排索引增加新的映射关系的执行指令,若所述新的映射关系支持前缀查询,则通过字典树Trie存储所述新的映射关系;若所述新的映射关系不支持前缀查询,则通过哈希表存储所述新的映射关系。
9.根据权利要求1至3中任一项所述的检索方法,还包括:
按照预设时长更新所述倒排索引和所述正排索引,以删除冗余映射关系;和/或,所述有序文档编号是通过咆哮位图Roaring Bitmap方法进行压缩的。
10.一种检索装置,包括:
第一获取模块,用于获取待检索内容;
处理模块,用于对所述待检索内容进行分词处理,得到目标关键词;
第二获取模块,用于根据所述目标关键词查询内存中的倒排索引,得到所述目标关键词对应的有序文档编号,所述内存中的倒排索引包含关键词、文档编号以及关键词与文档编号的映射关系;
第三获取模块,用于根据所述有序文档编号查询内存中的正排索引,从内存中获得所述待检索内容对应的目标文档,所述内存中的正排索引包含文档编号、文档内容以及文档编号与文档内容的映射关系,所述倒排索引和所述正排索引是通过内存映射文件机制从磁盘映射到所述内存中的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310219380.7A CN116226497A (zh) | 2023-03-08 | 2023-03-08 | 检索方法、介质、装置和计算设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310219380.7A CN116226497A (zh) | 2023-03-08 | 2023-03-08 | 检索方法、介质、装置和计算设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116226497A true CN116226497A (zh) | 2023-06-06 |
Family
ID=86587108
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310219380.7A Pending CN116226497A (zh) | 2023-03-08 | 2023-03-08 | 检索方法、介质、装置和计算设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116226497A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118069590A (zh) * | 2024-04-22 | 2024-05-24 | 极限数据(北京)科技有限公司 | 搜索数据库的正排索引处理方法、装置、介质和设备 |
-
2023
- 2023-03-08 CN CN202310219380.7A patent/CN116226497A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118069590A (zh) * | 2024-04-22 | 2024-05-24 | 极限数据(北京)科技有限公司 | 搜索数据库的正排索引处理方法、装置、介质和设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107247808B (zh) | 一种分布式NewSQL数据库***及图片数据查询方法 | |
CN110825748B (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
CN109213772B (zh) | 数据存储方法及NVMe存储*** | |
US11182356B2 (en) | Indexing for evolving large-scale datasets in multi-master hybrid transactional and analytical processing systems | |
EP3170106B1 (en) | High throughput data modifications using blind update operations | |
US9043334B2 (en) | Method and system for accessing files on a storage system | |
US9384201B2 (en) | Method of managing data of file system using database management system | |
KR20200122994A (ko) | 키 값 첨부 | |
CN105630865A (zh) | 用于内存列式存储的n比特压缩版本化列数据阵列 | |
US10521117B2 (en) | Unified table delta dictionary memory size and load time optimization | |
US11886401B2 (en) | Database key compression | |
US10289709B2 (en) | Interleaved storage of dictionary blocks in a page chain | |
Sarwat et al. | Generic and efficient framework for search trees on flash memory storage systems | |
KR20210058118A (ko) | CaseDB: 엣지컴퓨팅을 위한 저비용 Put-Intensive 키-벨류 저장장치 | |
CN116226497A (zh) | 检索方法、介质、装置和计算设备 | |
US10558636B2 (en) | Index page with latch-free access | |
US20180011897A1 (en) | Data processing method having structure of cache index specified to transaction in mobile environment dbms | |
CN109213760B (zh) | 非关系数据存储的高负载业务存储及检索方法 | |
CN114443722A (zh) | 缓存管理方法、装置、存储介质及电子设备 | |
CN112131200B (zh) | 一种基于cifs共享的分布式海量文件查询***和方法 | |
KR20090007926A (ko) | 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법 | |
CN111930684A (zh) | 基于hdfs的小文件处理方法、装置、设备及存储介质 | |
CN116627345A (zh) | 应用于海量value键值对的高性能KV缓存方法及装置 | |
US11055266B2 (en) | Efficient key data store entry traversal and result generation | |
Gong et al. | A write-optimized B-tree layer for NAND flash memory |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |