CN112395387A - 全文检索方法及装置、计算机存储介质、电子设备 - Google Patents
全文检索方法及装置、计算机存储介质、电子设备 Download PDFInfo
- Publication number
- CN112395387A CN112395387A CN201910755509.XA CN201910755509A CN112395387A CN 112395387 A CN112395387 A CN 112395387A CN 201910755509 A CN201910755509 A CN 201910755509A CN 112395387 A CN112395387 A CN 112395387A
- Authority
- CN
- China
- Prior art keywords
- original document
- document
- index
- index information
- information
- 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/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
-
- 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/31—Indexing; Data structures therefor; Storage structures
- G06F16/316—Indexing structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开涉及计算机技术领域,提供了一种全文检索方法、全文检索装置、计算机存储介质、电子设备,其中,全文检索方法包括:获取原始文档,所述原始文档位于第一内存缓冲区中;根据KV(键值对)存储引擎为所述原始文档构建索引信息;当接收到用户对所述原始文档的查询请求时,通过索引读取接口获取所述索引信息对应的原始文档。本公开中的全文检索方法能够提高检索的实时性。
Description
技术领域
本公开涉及计算机技术领域,特别涉及一种全文检索方法、全文检索装置、计算机存储介质及电子设备。
背景技术
随着计算机及互联网技术的迅速发展,使得检索相关资料以及网页的困难度增加,普通网络用户想找到所需的资料简直如同大海捞针。为满足大众的信息检索需求,相关搜索引擎及其相关搜索架构应运而生。以Lucene(一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎)为例,它可以方便地嵌入各种实际应用中实现全文搜索/索引功能。
目前,为了提升全文检索的性能和节约磁盘空间,一般是在内存里缓存一批数据,定期将缓存的数据刷新(将内存缓存区的数据写入磁盘)至磁盘中以构建倒排索引,进而,可以通过构建的倒排索引检索到之前缓存的数据。这样就造成在刷新之前,内存中缓存的一批数据并不能立即被检索到,因而,检索的实时性较差。
因此,现有技术中的全文检索方法的实时性有待提高。
需要说明的是,上述背景技术部分公开的信息仅用于加强对本公开的背景的理解。
发明内容
本公开的目的在于提供一种全文检索方法、全文检索装置、计算机存储介质及电子设备,进而至少在一定程度上避免了现有技术中的全文检索方法的实时性较差的缺陷。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
根据本公开的第一方面,提供一种全文检索方法,包括:获取原始文档,所述原始文档位于第一内存缓冲区中;根据KV(键值对)存储引擎为所述原始文档构建索引信息;当接收到用户对所述原始文档的查询请求时,通过索引读取接口获取所述索引信息对应的原始文档。
在本公开的示例性实施例中,所述原始文档包含多个文档域,所述文档域映射对应的文档域值;所述根据KV存储引擎为所述原始文档构建索引信息,包括:获取所述文档域值对应的分词信息;基于所述KV存储引擎,将所述分词信息编码为对应的信息链表;将所述分词信息与所述信息链表作为所述原始文档对应的索引信息。
在本公开的示例性实施例中,所述方法还包括:间隔预设时间段之后,将所述原始文档与所述索引信息持久化处理至磁盘中。
在本公开的示例性实施例中,所述将所述原始文档与所述索引信息持久化处理至磁盘中,包括:若接收到目标指令,则将所述第一内存缓冲区设置为只读模式,并将所述第一内存缓冲区中的原始文档与所述索引信息移动至索引列表中;执行所述目标指令以将所述原始文档写入磁盘中;删除所述索引列表中的所述索引信息。
在本公开的示例性实施例中,在所述将所述第一内存缓冲区设置为只读模式,并将所述第一内存缓冲区中的原始文档与所述索引信息移动至索引列表中之后,所述方法还包括:创建第二内存缓冲区。
在本公开的示例性实施例中,在根据KV存储引擎为所述原始文档构建索引信息之前,所述方法还包括:将所述文档域值存储至所述KV存储引擎中。
在本公开的示例性实施例中,在根据KV存储引擎为所述原始文档构建索引信息之后,所述方法还包括:对所述文档域值进行聚合处理,并将聚合结果存储至所述KV存储引擎中。
根据本公开的第二方面,提供一种全文检索装置,包括:获取模块,用于获取原始文档,所述原始文档位于第一内存缓冲区中;构建模块,用于根据KV(键值对)存储引擎为所述原始文档构建索引信息;检索模块,用于当接收到用户对所述原始文档的查询请求时,通过索引读取接口获取所述索引信息对应的原始文档。
根据本公开的第三方面,提供一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的全文检索方法。
根据本公开的第四方面,提供一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行上述第一方面所述的全文检索方法。
由上述技术方案可知,本公开示例性实施例中的全文检索方法、全文检索装置、计算机存储介质及电子设备至少具备以下优点和积极效果:
在本公开的一些实施例所提供的技术方案中,一方面,通过获取位于第一内存缓冲区中的原始文档,并根据KV存储引擎为原始文档构建索引信息,能够快速为内存中的原始文档构建KV格式的索引信息,以便用户实时检索。另一方面,当接收到用户对原始文档的查询请求时,通过索引读取接口获取索引信息对应的原始文档,能够解决现有技术中在数据刷新之前,内存中缓存的数据无法被检索到的技术问题,提高了相关检索方法的实时性。
本公开应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出本公开一示例性实施例中全文检索方法的流程示意图;
图2示出本公开另一示例性实施例中全文检索方法的流程示意图;
图3示出本公开一示例性实施例中全文检索方法的算法流程图;
图4示出本公开再一示例性实施例中全文检索方法的流程示意图;
图5示出本公开一示例性实施例中全文检索方法的整体技术架构图;
图6示出本公开示例性实施例中全文检索装置的结构示意图;
图7示出本公开示例性实施例中计算机存储介质的结构示意图;
图8示出本公开示例性实施例中电子设备的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
本说明书中使用用语“一个”、“一”、“该”和“所述”用以表示存在一个或多个要素/组成部分/等;用语“包括”和“具有”用以表示开放式的包括在内的意思并且是指除了列出的要素/组成部分/等之外还可存在另外的要素/组成部分/等;用语“第一”和“第二”等仅作为标记使用,不是对其对象的数量限制。
此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。
目前,为了提升全文检索的性能和节约磁盘空间,一般是在内存里缓存一批数据,定期将缓存的数据Flush(刷新)至磁盘中以构建倒排索引,进而,可以通过构建好的倒排索引检索到之前缓存的数据。这样就造成在Flush之前,内存中缓存的一批数据并不能立即被检索到,只有等到Flush之后,倒排索引构建完成,才可以从磁盘中检索到之前缓存的数据,实现数据检索。因而,检索的实时性较差。
在本公开的实施例中,首先提供了一种全文检索方法,至少在一定程度上克服现有技术中提供的全文检索方法实时性较差的缺陷。
图1示出本公开一示例性实施例中全文检索方法的流程示意图,该全文检索方法的执行主体可以是对文档进行检索的服务器。
参考图1,根据本公开的一个实施例的全文检索方法包括以下步骤:
步骤S110,获取原始文档,所述原始文档位于第一内存缓冲区中;
步骤S120,根据KV(键值对)存储引擎为所述原始文档构建索引信息;
步骤S130,当接收到用户对所述原始文档的查询请求时,通过索引读取接口获取所述索引信息对应的原始文档。
在图1所示实施例所提供的技术方案中,一方面,通过获取位于第一内存缓冲区中的原始文档,并根据KV存储引擎为原始文档构建索引信息,能够快速为内存中的原始文档构建KV格式的索引信息,以便用户实时检索。另一方面,当接收到用户对原始文档的查询请求时,通过索引读取接口获取索引信息对应的原始文档,能够解决现有技术中在Flush之前,内存中缓存的数据无法被检索到的技术问题,提高了相关检索方法的实时性。
以下对图1中的各个步骤的具体实现过程进行详细阐述:
在步骤S110中,获取原始文档,所述原始文档位于第一内存缓冲区中。
在本公开的示例性实施例中,在获取原始文档之前,需要先创建一索引创建器(index writer),以便于后续创建索引,合并索引等过程。示例性的,可以通过文件锁来保证同一个存储路径下,只允许创建一个index writer。
在本公开的示例性实施例中,在创建好索引创建器(index writer)之后,可以在内存缓冲区中创建原始文档。
在本公开的示例性实施例中,原始文档可以是需要写入内存缓冲区中的文档,创建原始文档时会对应创建唯一的document ID,即文档的标识号,document ID可以是字符串的形式。示例性的,原始文档可以是一篇题为“学生守则”的文档,其对应的document ID可以是字符串“document1”。
在本公开的示例性实施例中,原始文档(document)可以包含多个文档域(document field),以及,不同的文档域映射对应的文档域值(field value)。
在本公开的示例性实施例中,上述文档域即上述原始文档的结构划分,示例性的,参考上述步骤的相关解释,当原始文档为一篇题为“学生守则”的文档时,则其文档域可以是:标题,摘要,作者,正文等等。
在本公开的示例性实施例中,上述文档域值即上述文档域包含的具体内容,示例性的,当文档域为“摘要”时,对应的文档域值可以是摘要内容,例如:“Students should beallowed to go out with their friends,but not allowed to drink beer”。当文档域为“作者”时,对应的文档域值可以是作者的名字,例如:“张三”。
在本公开的示例性实施例中,上述内存缓冲区即内存中的缓冲寄存器,可以暂时存放外设送来的数据。
在步骤S120中,根据KV(键值对)存储引擎为所述原始文档构建索引信息。
在本公开的示例性实施例中,在创建上述原始文档document之后,可以根据哈希算法计算出上述document ID对应的哈希值,进而,可以根据文档的哈希值分配对应的DWPT(Documents Writer Per Thread,每个线程的索引创建器,简称:DWPT,本质是对数据进行写处理的工作单元),以执行对该原始文档的写入操作。示例性的,计算出的哈希值为2时,可以分配编号为2的DWPT执行对上述原始文档的写入操作。每个DWPT都对应有一个独立的基于内存存储的KV存储引擎。
在本公开的示例性实施例中,参考步骤S110的相关解释,原始文档对应的document ID为字符串,为了起到区分不同文档的作用,字符串一般都比较长,占用的字节数(存储空间)比较大。因而,在分配好执行写入操作的DWPT之后,为了节约存储空间,DWPT会为上述原始文档创建一个内部ID,具体的,内部ID可以是数字的形式(例如:1、2、3),从而能够减少内存空间占用,加快数据写入速度。
在本公开的示例性实施例中,可以遍历上述原始文档(document)的所有域(field),进而,若判断出需要对上述文档域值(field value)进行存储,则可以将上述文档域值转换为KV格式,并存储至上述KV存储引擎中。需要说明的是,是否存储上述原始文档对应的域(field),可以根据用户实际需要自行设定,本公开对此不作特殊限定。
在本公开的示例性实施例中,可以根据上述KV存储引擎为原始文档构建索引信息。KV存储引擎即Key-Value(键值对)存储引擎,将数据以Key-Value的形式存储,能够保证数据的存储效率。Key-Value存储引擎具备前缀扫描(scan)的功能,即在获取到文档之后,可以根据文档的相关前缀信息进行扫描,以快速将文档存储至对应的数据分组中。需要说明的是,是否为上述原始文档构建索引信息,可以根据用户实际需要自行设定,本公开对此不作特殊限定。
在本公开的示例性实施例中,索引是一种对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。示例性的,上述索引信息可以是倒排索引,倒排索引是一种以关键字和文档编号结合,并以关键字作为主键的索引结构。它适用于快速的全文检索,可以根据单词快速获取包含这个单词的文档列表,减少了检索过程中的一些排序操作,从而能够提高检索速度。
在本公开的示例性实施例中,图2示意性示出本公开另一示例性实施例中全文检索方法的流程示意图,具体示出根据KV存储引擎为原始文档构建索引信息的流程示意图,以下结合图2对步骤S120进行解释。
在步骤S201中,获取所述文档域值对应的分词信息。
在本公开的示例性实施例中,可以获取上述文档域值对应的分词信息(term)。
在本公开的示例性实施例中,分词信息即对上述文档域值进行分词处理之后的信息,示例性的,参考上述步骤S110的相关解释,当文档域“摘要”对应的文档域值为“Students should be allowed to go out with their friends,but not allowed todrink beer”时,可以先将上述文档域值拆分为单个的单词,进而,去除其中的标点符号。进一步的,去除其中的停词(没有特别意义的非关键词,例如:should、be、to、out、with等),进而,可以将其中的大写字母变为小写,将单词转变为词根形式(例如:students到student,allowed到allow),从而可以得到上述文档域值对应的分词信息为“student”,“allow”,“go”,“their”,“friend”“allow”,“drink”,“beer”。
在步骤S202中,基于所述KV存储引擎,将所述分词信息编码为对应的信息链表。
在本公开的示例性实施例中,在得到上述文档域值对应的分词信息之后,可以将上述分词信息编码为对应的信息链表。信息链表即将上述分词信息、内部ID以及上述分词信息在上述原始文档中出现的频率对应起来形成的倒排记录表(Post list)。示例性的,参考上述步骤S120的相关解释,当DWPT为原始文档分配的内部ID为1时,示例性的,编码形成的信息链表可以如下表1所示:
分词信息(term) | 出现频率(frequency) | 内部ID |
student | 1 | 1 |
allow | 2 | 1 |
go | 1 | 1 |
their | 1 | 1 |
friend | 1 | 1 |
drink | 1 | 1 |
beer | 1 | 1 |
表1
在步骤S203中,将所述分词信息与所述信息链表作为所述原始文档对应的索引信息。
在本公开的示例性实施例中,在得到上述分词信息与上述信息链表之后,可以将上述分词信息与上述信息链表作为上述原始文档对应的索引信息。
在本公开的示例性实施例中,KV存储引擎可以将数据按照如下表2及表3所示的方式将数据以key-value的形式进行存储。参考表2,可以将[field ID]+[term]+[内部ID]作为key存储,参考上述步骤S110的相关解释,field ID可以是上述各个field(标题,摘要,作者,正文)等对应的标识号,示例性的,“标题”对应的field ID可以是“01”,“摘要”对应的field ID可以是“02”等,term即上述分词信息,内部ID即DWPT为上述document分配的ID。同时,参考表3,可以将分词信息term的出现频率[frequency]+标准化因子[norm](用于确定哪个文档更符合检索需求)+位置[location](分词信息在文档中出现的位置)等信息作为value进行存储。
表2
表3
在本公开的示例性实施例中,基于上述key-value的数据存储格式,KV存储引擎能够实现高性能的扫描(scan)数据。一条KV存储记录只包含一个分词信息对应的post list,从而只包含一个内部ID。因此不同的field ID+不同的term就可以确定唯一的一个key,即通过field ID+term组成的key进行前缀scan,就可以获得所有包含这个term的document的内部ID。从而实现检索到需要的文档数据。
在本公开的示例性实施例中,一方面,在内存中读写数据比磁盘要快一个数量级,因而,通过KV存储引擎的前缀scan功能能够比较快速的获取到满足需求的数据。另一方面,通过基于KV存储引擎在内存中构建索引信息,能够通过索引信息实时读取到内存中的数据,从而解决现有技术中的全文检索方法实时性较差的技术问题。
在本公开的示例性实施例中,在得到上述原始文档对应的索引信息之后,若判断出需要对上述文档域值进行聚合(将类似内容的文档域值进行统计,并聚合在一起,形成统一的数据分组。举例而言,可以统计文档域值为“学生”的所有文档对应的网页地址,进而,将网页地址聚合在一起,形成聚合结果),则可以对上述文档域值进行聚合处理,进而,可以将得到的聚合结果转换为KV格式并存储至上述KV存储引擎中。需要说明的是,是否存储上述文档域值的聚合结果,可以根据用户实际需要自行设定,本公开对此不作特殊限定。
在本公开的示例性实施例中,在将上述需要存储的域值,构建的索引信息以及上述聚合结果存储至KV存储引擎中之后,KV存储引擎可以将上述需要存储的域值,构建的索引信息以及上述聚合结果提交至内存缓冲区中。
在本公开的示例性实施例中,参考图3,图3示意性数据本公开一示例性实施例中全文检索方法的算法流程图,具体示出向内存缓冲区中写入数据的整体流程图,具体包括:
步骤S301,开始;
步骤S302,创建原始文档;
步骤S303,根据原始文档标识号计算哈希值,分配DWPT(每个线程的索引创建器);
步骤S304,分配内部标识号;
步骤S305,创建KV(键值对)存储引擎;
步骤S306,遍历原始文档所有的文档域;
步骤S307,判断是否存储文档域;
步骤S3071,若判定是,则缓存文档域;
步骤S3072,编码缓存文档域为KV(键值对)格式,并将缓存的文档域写入KV存储引擎;
步骤S308,若判定不存储文档域,则判断是否对上述原始文档创建索引信息;
步骤S3081,若需要构建索引信息,则对文档域对应的文档域值进行分词处理,产生分词信息;
步骤S3082,通过DWPT缓存分词信息;
步骤S3083,将分词信息编码为对应的KV格式的信息链表,并写入KV存储引擎;
步骤S309,若不需要构建索引信息,则判断是否需要存储文档域值(聚合结果);
步骤S3091,若需要存储,则可以通过DWPT缓存文档域值;
步骤S3092,将文档域值编码为KV(键值对)格式,并写入KV存储引擎;
步骤S310,KV存储引擎提交上述写入的数据;
步骤S311,结束。
继续参考图1,在步骤S130中,当接收到用户对所述原始文档的查询请求时,通过索引读取接口获取所述索引信息对应的原始文档。
在本公开的示例性实施例中,当接收到用户对上述原始文档的查询请求时,可以创建索引读取接口(index reader),并通过上述索引读取接口读取上述索引信息对应的原始文档。从而,能够在将数据写入磁盘中之前,当接收到对上述原始文档的查询请求时,可以实时查询到上述原始文档。从而能够解决现有技术中将数据写入磁盘之前无法检索到缓存数据的技术问题,提高全文检索的实时性。
在本公开的示例性实施例中,内存中只能暂存数据,不能长时间存储数据。因而,在间隔预设时间段(例如:1秒之后),可以将上述原始文档与上述原始文档对应的倒排索引持久化处理至磁盘中,以节约内存空间。需要说明的是,上述预设时间段可以设定为等间隔的时间段自动触发,也可以设定为人工手动触发,属于本公开的保护范围。
在本公开的示例性实施例中,图4示意性示出本公开再一示例性实施例中全文检索方法的流程示意图,具体示出将原始文档与索引信息持久化处理至磁盘中的流程示意图,以下结合图4对具体的实施方式进行解释。
在步骤S401中,若接收到目标指令,将所述第一内存缓冲区设置为只读模式,并将所述第一内存缓冲区中的原始文档与所述索引信息移动至索引列表中。
在本公开的示例性实施例中,若接收到上述索引创建器(index writer)广播的目标指令(例如:Flush指令),则可以将第一内存缓冲区设置为只读模式(只能读取内容,不能写入或修改内容),并将上述第一内存缓冲区中的原始文档以及索引信息移动至索引列表(index list)中。
在本公开的示例性实施例中,上述Flush指令能够实现将文件从内存缓冲区中强制刷新到硬盘中,同时清空内存缓冲区。
在本公开的示例性实施例中,上述索引列表可以是内存缓冲区和磁盘之间读取数据的接口,即通过将上述原始文档以及索引信息移动至述索引列表中,能够保证磁盘读取到内存缓冲区中的原始文档以及索引信息。
在本公开的示例性实施例中,在将上述原始文档以及索引信息移动至索引列表中之后,可以创建第二内存缓冲区以避免当前时刻其它数据无法写入的缺陷,确保数据写入和数据修改操作的同步进行。
在步骤S402中,执行所述目标指令以将所述原始文档写入磁盘中。
在本公开的示例性实施例中,可以执行上述目标指令以将上述原始文档写入磁盘中。从而,能够将原始文档存入磁盘中对应的数据分组(即segment,segment即具有相同特征的数据集合,例如:当原始文档为“学生守则”的相关内容时,可以将该文档写入“学生”对应的segment)中,以便后续使用时可以直接从磁盘中读取。一方面,基于磁盘的非易失性,可以长久保存数据,避免断电等因素导致的数据丢失,另一方面,还能够扩大数据存储的容量(磁盘的容量大于内存容量)。
在本公开的示例性实施例中,在将原始文档存入磁盘的同时,可以为上述原始文档构建磁盘中相应格式的倒排索引【示例性的,可以是FST(Finite State Transducers,有限状态传感器,功能类似于字典,可用于语音识别和自然语言处理)格式的倒排索引】,以便于将数据写入磁盘中之后,也能快速检索到相关文档数据。
在步骤S403中,删除所述索引列表中的所述索引信息。
在本公开的示例性实施例中,参考上述步骤的S402的相关解释,在将上述原始文档写入磁盘的时候,会构建磁盘上相应格式的倒排索引,因此,可以删除上述索引列表中索引信息,从而能够避免数据冗余对后续数据检索的影响。
在本公开的示例性实施例中,图5示意性示出本公开一示例性实施例中全文检索方法的整体技术架构图,以下结合图5对整体技术架构进行解释,具体包括:
首先,数据写入通过索引创建器来完成,具体的,可以通过索引创建器将数据以KV格式写入每个线程的索引创建器(DWPT)对应的KV存储引擎中,以实现将数据写入内存缓冲区中。进而,在数据被执行Flush指令之前,若需要读取数据,可以通过索引创建器来完成,具体的,可以通过索引读取接口从KV存储引擎中获取对应的数据,以实现对于内存中的数据读取。
其次,在间隔预设时间段之后,内存中的数据会被刷新至磁盘中,每次执行Flush指令的时候,每一个DWPT会独立生成一个数据分组(segment),存储在磁盘上,这个过程中会构建磁盘上对应格式的倒排索引等。在Flush指令执行之后,可以通过索引读取接口从磁盘上的数据分组中读取数据,以实现对于磁盘中的数据读取。同时,读取数据的同时,还有其它数据在持续写入,因而,数据分组的数量会随着数据写入操作的增加而增加。
本公开还提供了一种全文检索装置,图6示出本公开示例性实施例中全文检索装置的结构示意图;如图6所示,全文检索装置600可以包括获取模块601、构建模块602和检索模块603。其中:
获取模块601,用于获取原始文档,所述原始文档位于第一内存缓冲区中。
在本公开的示例性实施例中,获取模块用于获取位于第一内存缓冲区中的原始文档,其中,原始文档包含多个文档域,文档域映射对应的文档域值。
在本公开的示例性实施例中,获取模块用于若接收到对文档域值的存储指令,则将文档域值存储至所述KV存储引擎中。
在本公开的示例性实施例中,获取模块用于若接收到对文档域值的聚合指令,则对文档域值进行聚合处理,并将聚合结果存储至KV存储引擎中。
构建模块602,用于根据KV(键值对)存储引擎为所述原始文档构建索引信息。
在本公开的示例性实施例中,构建模块用于根据KV存储引擎为所述原始文档构建索引信息。
在本公开的示例性实施例中,构建模块用于获取文档域值对应的分词信息;基于KV存储引擎,将分词信息编码为对应的信息链表;将上述分词信息与信息链表作为原始文档对应的索引信息。
在本公开的示例性实施例中,构建模块用于间隔预设时间段之后,将上述原始文档与索引信息持久化处理至磁盘中。
在本公开的示例性实施例中,构建模块用于若接收到目标指令,则将第一内存缓冲区设置为只读模式,并将上述原始文档与索引信息移动至索引列表中;执行目标指令以将上述原始文档写入磁盘中;删除上述索引列表中的索引信息。
在本公开的示例性实施例中,构建模块还用于创建第二内存缓冲区。
检索模块603,用于当接收到用户对所述原始文档的查询请求时,通过索引读取接口获取所述索引信息对应的原始文档。
在本公开的示例性实施例中,检索模块用于当接收到用户对原始文档的查询请求时,通过索引读取接口获取索引信息对应的原始文档。
上述全文检索装置中各模块的具体细节已经在对应的全文检索方法中进行了详细的描述,因此此处不再赘述。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、移动终端、或者网络设备等)执行根据本公开实施方式的方法。
在本公开示例性实施方式中,还提供了一种能够实现上述方法的计算机存储介质。其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施例中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。
参考图7所示,描述了根据本公开的实施方式的用于实现上述方法的程序产品700,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本公开的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
此外,在本公开的示例性实施例中,还提供了一种能够实现上述方法的电子设备。
所属技术领域的技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
下面参照图8来描述根据本公开的这种实施方式的电子设备800。图8显示的电子设备800仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图8所示,电子设备800以通用计算设备的形式表现。电子设备800的组件可以包括但不限于:上述至少一个处理单元810、上述至少一个存储单元820、连接不同系统组件(包括存储单元820和处理单元810)的总线830。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元810执行,使得所述处理单元810执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。例如,所述处理单元810可以执行如图1中所示的:步骤S110,获取原始文档,所述原始文档位于第一内存缓冲区中;步骤S120,根据KV存储引擎为所述原始文档构建索引信息;步骤S120,当接收到用户对所述原始文档的查询请求时,通过索引读取接口获取所述索引信息对应的原始文档。存储单元820可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)8201和/或高速缓存存储单元8202,还可以进一步包括只读存储单元(ROM)8203。
存储单元820还可以包括具有一组(至少一个)程序模块8205的程序/实用工具8204,这样的程序模块8205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线830可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备800也可以与一个或多个外部设备1100(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备800交互的设备通信,和/或与使得该电子设备800能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口850进行。并且,电子设备800还可以通过网络适配器860与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器860通过总线830与电子设备800的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备800使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施方式的方法。
此外,上述附图仅是根据本公开示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施例。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
Claims (10)
1.一种全文检索方法,其特征在于,包括:
获取原始文档,所述原始文档位于第一内存缓冲区中;
根据KV(键值对)存储引擎为所述原始文档构建索引信息;
当接收到用户对所述原始文档的查询请求时,通过索引读取接口获取所述索引信息对应的原始文档。
2.根据权利要求1所述的方法,其特征在于,所述原始文档包含多个文档域,所述文档域映射对应的文档域值;
所述根据KV存储引擎为所述原始文档构建索引信息,包括:
获取所述文档域值对应的分词信息;
基于所述KV存储引擎,将所述分词信息编码为对应的信息链表;
将所述分词信息与所述信息链表作为所述原始文档对应的索引信息。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
间隔预设时间段之后,将所述原始文档与所述索引信息持久化处理至磁盘中。
4.根据权利要求3所述的方法,其特征在于,所述将所述原始文档与所述索引信息持久化处理至磁盘中,包括:
若接收到目标指令,则将所述第一内存缓冲区设置为只读模式,并将所述第一内存缓冲区中的原始文档与所述索引信息移动至索引列表中;
执行所述目标指令以将所述原始文档写入磁盘中;
删除所述索引列表中的所述索引信息。
5.根据权利要求4所述的方法,其特征在于,在所述将所述第一内存缓冲区设置为只读模式,并将所述第一内存缓冲区中的原始文档与所述索引信息移动至索引列表中之后,所述方法还包括:
创建第二内存缓冲区。
6.根据权利要求1所述的方法,其特征在于,在根据KV存储引擎为所述原始文档构建索引信息之前,所述方法还包括:
将所述文档域值存储至所述KV存储引擎中。
7.根据权利要求6所述的方法,其特征在于,在根据KV存储引擎为所述原始文档构建索引信息之后,所述方法还包括:
对所述文档域值进行聚合处理,并将聚合结果存储至所述KV存储引擎中。
8.一种全文检索装置,其特征在于,包括:
获取模块,用于获取原始文档,所述原始文档位于第一内存缓冲区中;
构建模块,用于根据KV(键值对)存储引擎为所述原始文档构建索引信息;
检索模块,用于当接收到用户对所述原始文档的查询请求时,通过索引读取接口获取所述索引信息对应的原始文档。
9.一种计算机存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1~7中任意一项所述的全文检索方法。
10.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1~7中任意一项所述的全文检索方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910755509.XA CN112395387A (zh) | 2019-08-15 | 2019-08-15 | 全文检索方法及装置、计算机存储介质、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910755509.XA CN112395387A (zh) | 2019-08-15 | 2019-08-15 | 全文检索方法及装置、计算机存储介质、电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112395387A true CN112395387A (zh) | 2021-02-23 |
Family
ID=74601885
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910755509.XA Pending CN112395387A (zh) | 2019-08-15 | 2019-08-15 | 全文检索方法及装置、计算机存储介质、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112395387A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115080684A (zh) * | 2022-07-28 | 2022-09-20 | 天津联想协同科技有限公司 | 网盘文档索引方法、装置、网盘及存储介质 |
-
2019
- 2019-08-15 CN CN201910755509.XA patent/CN112395387A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115080684A (zh) * | 2022-07-28 | 2022-09-20 | 天津联想协同科技有限公司 | 网盘文档索引方法、装置、网盘及存储介质 |
CN115080684B (zh) * | 2022-07-28 | 2023-01-06 | 天津联想协同科技有限公司 | 网盘文档索引方法、装置、网盘及存储介质 |
WO2024022180A1 (zh) * | 2022-07-28 | 2024-02-01 | 天津联想协同科技有限公司 | 网盘文档索引方法、装置、网盘及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110647614B (zh) | 智能问答方法、装置、介质及电子设备 | |
CA3088695C (en) | Method and system for decoding user intent from natural language queries | |
CN109033385B (zh) | 图片检索方法、装置、服务器及存储介质 | |
US8868556B2 (en) | Method and device for tagging a document | |
US9323798B2 (en) | Storing a key value to a deleted row based on key range density | |
CN111597800B (zh) | 同义句的获取方法及装置、设备及存储介质 | |
CN102930048A (zh) | 使用参考和视觉数据的语义自动发现的数据丰富 | |
CN110750627A (zh) | 一种素材的检索方法、装置、电子设备及存储介质 | |
CN110688434B (zh) | 一种兴趣点处理方法、装置、设备和介质 | |
CN112966053B (zh) | 一种基于知识图谱的海洋领域专家库构建方法及装置 | |
CN111339784A (zh) | 一种新话题的自动挖掘方法和系统 | |
CN113190692B (zh) | 一种知识图谱的自适应检索方法、系统及装置 | |
CN112395387A (zh) | 全文检索方法及装置、计算机存储介质、电子设备 | |
WO2019071907A1 (zh) | 基于操作页面识别帮助信息的方法及应用服务器 | |
CN111930891A (zh) | 基于知识图谱的检索文本扩展方法及相关装置 | |
CN111949765B (zh) | 基于语义的相似文本搜索方法、系统、设备和存储介质 | |
CN115080684A (zh) | 网盘文档索引方法、装置、网盘及存储介质 | |
CN109918367B (zh) | 一种结构化数据的清洗方法、装置、电子设备及存储介质 | |
US9842104B2 (en) | Textual geographic location processing | |
US20130054585A1 (en) | Geographic search with mixed-precision results | |
CN117113090B (zh) | 数据源标签标注方法、装置及电子设备 | |
Li et al. | Study on efficiency of full-text retrieval based on lucene | |
US9323753B2 (en) | Method and device for representing digital documents for search applications | |
Muroň et al. | User-Driven Toponym Disambiguation Using Dialogue | |
CN117851542A (zh) | 信息查询方法、装置、设备、存储介质及程序产品 |
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 |