CN112966007A - 一种搜索终端的控制方法与搜索终端 - Google Patents
一种搜索终端的控制方法与搜索终端 Download PDFInfo
- Publication number
- CN112966007A CN112966007A CN202110362676.5A CN202110362676A CN112966007A CN 112966007 A CN112966007 A CN 112966007A CN 202110362676 A CN202110362676 A CN 202110362676A CN 112966007 A CN112966007 A CN 112966007A
- Authority
- CN
- China
- Prior art keywords
- vector
- index
- memory
- vectors
- name
- 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.)
- Granted
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种搜索终端的控制方法与搜索终端,通过基于开源的向量数据库,依据客户端输入的待写入向量建立向量索引子文件存储入外部存储器,再将将所述向量索引子文件映射的内存对象写入内部存储器,使得ElasticSearch搜索引擎即满足标量搜索的需求,又同时满足向量搜索的需求,借助于ElasticSearch自身搜索结果的合并机制,很好地满足了标量搜索结果和向量搜索结果的合并。当一个索引名下所有向量索引子文件的总体数据规模达到预设数据规模时,通过合并该索引名下的所有向量索引子文件,实现对散碎的向量索引子文件进行驱逐和淘汰,防止内存OOM,使得ElasticSearch搜索引稳定可控。
Description
技术领域
本申请涉及技术领域,特别是涉及一种搜索终端的控制方法与搜索终端。
背景技术
美国互联网数据中心指出,互联网上的数据每年将增长50%,每两年便将翻一番,而目前世界上90%以上的数据是最近几年才产生的。目前随着大数据的热潮冲击,用户对搜索数据的意愿越来越强烈,能够被搜索到的数据的数据规模也越来越大。传统的搜索引擎很难满足用户海量的数据搜索需求。
常规的搜索方式一般包括标量搜索和向量搜索。标量是单指标,是一维向量,例如性别,年龄等。向量是多指标,具备多维度(维度大于等于1),例如多项式系数[w1,w2,...,wn]。标量搜索是基于单指标,单维度的搜索,向量搜索是多指标,多维度的搜索。
目前,尚无能够同时支持标量搜索和向量搜索,且能满足海量数据搜索需求的搜索引擎。开源ElasticSearch不支持向量搜索,而开源Milvus仅为向量引擎,它们都不能同时满足标量和向量搜索需求
发明内容
基于此,有必要针对尚无能够同时支持标量搜索和向量搜索,且能满足海量数据搜索需求的搜索引擎的问题,提供一种搜索终端的控制方法与搜索终端。
本申请提供一种搜索终端的控制方法,包括:
实时监控客户端发送的向量写入请求,每当接收到客户端发送的向量写入请求时,依据客户端输入的待写入向量,基于开源的向量数据库,建立向量索引子文件存储入外部存储器,并基于所述向量索引子文件构建所述向量索引子文件映射的内存对象,将所述向量索引子文件映射的内存对象写入内部存储器;所述向量索引子文件映射的内存对象包括多个向量;
实时监控客户端发送的查询请求,每当接收到客户端发送的查询请求时,依据查询请求中附带的索引名和待查询向量,在内部存储器中搜寻与待查询向量最相似的K个向量输出;
实时监控外部存储器中每一个索引名下所有向量索引子文件的总体数据规模,若一个索引名下所有向量索引子文件的总体数据规模达到预设数据规模,则将该索引名下的所有向量索引子文件合并为一个向量索引文件,将外部存储器中该索引名下的所有向量索引子文件删除,将内部存储器中该索引名下的所有向量索引子文件各自映射的内存对象删除。
本申请还提供一种搜索终端,包括:
ElasticSearch搜索引擎,搭载有FAISS向量索引库和nmslib向量索引库;
所述ElasticSearch搜索引擎包括:
处理器,设置于所述ElasticSearch搜索引擎中,用于执行如前述内容提及的搜索终端的控制方法;
外部存储器,设置于所述ElasticSearch搜索引擎中,与所述处理器电连接;
内存缓存,设置于所述ElasticSearch搜索引擎中,所述内存缓存与所述处理器电连接,所述内存缓存还与外部存储器电连接;
内部存储器,设置于所述ElasticSearch搜索引擎中,所述内部存储器与所述处理器电连接,所述内部存储器还与外部存储器电连接。
本申请涉及一种搜索终端的控制方法与搜索终端,通过基于开源的向量数据库,依据客户端输入的待写入向量建立向量索引子文件存储入外部存储器,再将将所述向量索引子文件映射的内存对象写入内部存储器,使得ElasticSearch搜索引擎即满足标量搜索的需求,又同时满足向量搜索的需求,借助于ElasticSearch自身搜索结果的合并机制,很好地满足了标量搜索结果和向量搜索结果的合并。当一个索引名下所有向量索引子文件的总体数据规模达到预设数据规模时,通过合并该索引名下的所有向量索引子文件,实现对散碎的向量索引子文件进行驱逐和淘汰,防止内存OOM,使得ElasticSearch搜索引稳定可控。
附图说明
图1为本申请一实施例提供的一种搜索终端的控制方法的流程示意图;
图2为本申请一实施例提供的一种搜索终端的结构示意图;
图3为本申请一实施例提供的一种搜索终端与客户端配合使用时的结构示意图。
附图标记:
10-搜索终端;110-ElasticSearch搜索引擎;111-处理器;
112-外部存储器;113-内存缓存;114-内部存储器;20-客户端;
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供一种搜索终端的控制方法。需要说明的是,本申请提供的搜索终端的控制方法的应用于搭载有ElasticSearch搜索引擎的搜索终端。
此外,本申请提供的搜索终端的控制方法不限制其执行主体。可选地,本申请提供的搜索终端的控制方法的执行主体的可以为一种搭载有ElasticSearch搜索引擎的搜索终端。具体地,本申请提供的搜索终端的控制方法的执行主体的可以为所述搜索终端中的ElasticSearch搜索引擎中的处理器。
如图1所示,在本申请的一实施例中,所述搜索终端的控制方法包括如下S100至S300:
S100,实时监控客户端发送的向量写入请求。每当接收到客户端发送的向量写入请求时,依据客户端输入的待写入向量,基于开源的向量数据库,建立向量索引子文件存储入外部存储器。并基于所述向量索引子文件构建所述向量索引子文件映射的内存对象,将所述向量索引子文件映射的内存对象写入内部存储器。所述向量索引子文件映射的内存对象包括多个向量。
具体地,本步骤为建立向量索引子文件和存储向量索引子文件的过程。
建立向量索引子文件时,向量索引子文件的数据来源为客户端输入的待写入向量。当搜索终端接收到客户端发送的向量写入请求时,客户端可以向搜索终端输送一个待写入向量。本步骤中,ElasticSearch搜索引擎可以借助于Lucene的索引扩展机制,结合开源的向量数据库,建立Lucene的向量索引子文件。借助ElasticSearch搜索引擎提供的底层索引管理机制和分布式能力,将新建的Lucene向量索引子文件交给ElasticSearch搜索引擎进行管理,最终使ElasticSearch搜索引擎具备向量搜索能力。
存储向量索引子文件时,先将向量索引子文件存储入外部存储器,再将向量索引子文件存储入内部存储器。由于内部存储器中,数据的存在形式与外部存储器的不同,内存存储器中,向量索引子文件以内存对象的形式存储。因此,将所述向量索引子文件映射的内存对象写入内部存储器。
外部存储器即磁盘,内部存储器即内存,如果后文出现“磁盘”,即指代外部存储器。如果后文出现“内存”,即指代内部存储器。
S200,实时监控客户端发送的查询请求。每当接收到客户端发送的查询请求时,依据查询请求中附带的索引名和待查询向量,在内部存储器中搜寻与待查询向量最相似的K个向量输出。
具体地,本步骤为查询请求的处理过程。例如,客户端要查询与一张待查询图片相似的图片。那么,客户端本地需要先将待查询图片转化为一个待查询向量。客户端在向搜索终端发送查询请求时,不但要在查询请求中附带待查询向量,还要在查询请求中附带待查询向量的索引名。
S300,实时监控外部存储器中每一个索引名下所有向量索引子文件的总体数据规模。若一个索引名下所有向量索引子文件的总体数据规模达到预设数据规模,则将该索引名下的所有向量索引子文件合并为一个向量索引文件。将外部存储器中该索引名下的所有向量索引子文件删除,将内部存储器中该索引名下的所有向量索引子文件各自映射的内存对象删除。
具体地,所有向量索引子文件的总体数据规模可以包括所有向量索引子文件的总数量或所有向量索引子文件占用的总存储空间。
OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,来源于java.lang.OutOfMemoryError。当因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error。因为向量索引子文件需要全量放入内部存储器并映射为内存对象,比较占内存,而且要保证对内部存储器的搜索效率,因此防止内部存储器OOM,本步骤需要通过合并向量索引子文件,并删除内部存储器中向量索引子文件各自映射的内存对象。加之多用户场景下如果不做内存控制,很容易出现内部存储器被撑爆的情况。
删除内部存储器中向量索引子文件各自映射的内存对象就是对散碎的向量索引子文件进行驱逐,提高查询向量索引文件的效率。
本实施例中,通过基于开源的向量数据库,依据客户端输入的待写入向量建立向量索引子文件存储入外部存储器,再将将所述向量索引子文件映射的内存对象写入内部存储器,使得ElasticSearch搜索引擎即满足标量搜索的需求,又同时满足向量搜索的需求,借助于ElasticSearch自身搜索结果的合并机制,很好地满足了标量搜索结果和向量搜索结果的合并。当一个索引名下所有向量索引子文件的总体数据规模达到预设数据规模时,通过合并该索引名下的所有向量索引子文件,实现对散碎的向量索引子文件进行驱逐和淘汰,防止内存OOM,使得ElasticSearch搜索引稳定可控。
在本申请的一实施例中,所述S100包括如下S111至S113:
S111,实时监控客户端发送的向量写入请求。
S112,当接收到客户端发送的向量写入请求时,获取客户端输入的待写入向量。
S113,读取所述向量写入请求中的索引名。将所述待写入向量存储入所述索引名对应的内存缓存,返回所述S111。
具体地,ElasticSearch搜索引擎中的处理器实时监控客户端发送的向量写入请求。内存缓存的英文为Memory Buffer,它是专门为读取或写入磁盘而设置的,因此也可以称为磁盘缓冲区。
本实施例中,通过将待写入向量放置到内存缓存中缓存起来,达到一定数量后再写到磁盘中(这个步骤又被称为“dump”),也就是外部存储器里,从而减少了读写磁盘的次数,可以达到保护磁盘寿命的目的。
在本申请的一实施例中,所述S100还包括如下S121至S124:
S121,每隔预设时间段,判断每一个索引名对应的内存缓存中向量的数量是否小于第一数量阈值。
具体地,预设时间段为一个数据刷新周期。所述预设时间段可以设置为10秒。由于本实施例介绍的是将内存缓存中的向量落盘到外部存储器中,生成向量索引子文件的流程,预设时间段的设置可以避免处理器频繁创建向量索引子文件,导致性能开销过大。
也即,每隔预设时间段,处理器开始一次创建向量索引子文件的流程,创建向量索引子文件是基于内存缓存中存储的所有向量而言的。
可选地,ElasticSearch搜索引擎下针对每一个索引名设置一个内存缓存,那么在创建向量索引子文件时,依据一个索引名对应的内存缓存下的所有向量创建一个向量索引子文件,那么这个向量索引子文件包含的所有向量均是该索引名下的向量。
然而,本实施例还提供了不同向量数据库的支持,可以根据不同向量数据规模生成不同类型的向量索引子文件。因此,本步骤先判断向量的数量是否小于第一数量阈值。
S122,若一个内存缓存中向量的数量大于或等于所述第一数量阈值,则基于FAISS数据库,在外部存储器中生成包含该内存缓存中所有向量的FAISS向量索引子文件。具体地,本实施例利用FAISS和nmslib两种不同的向量数据库扩展Lucene索引,支持向量索引,统一抽象向量索引KNNIndex。当向量的数量比较多时,可以建立基于FAISS数据库的向量索引子文件FAISSIndex(继承KNNIndex),实现KNNIndex定义抽象方法,适配FAISS索引相关操作,完成基于量化算法的向量相似度检索接入。
FAISS数据库的特点是针对于大数据量索引子文件使用,可以有效压缩索引大小,节省内存使用,但是牺牲部分准召,使用的是量化搜索算法。索引子文件包含多个向量。向量本身是一个符点形式的数组。768维就有768个符点。例如图片的以图搜图功能,就是将图片换算为一个768维的向量,1个符点有4个字节,1个字节占3KB,生成FAISS向量索引子文件可以压缩1个字节占用的内存量。
S123,若一个内存缓存中向量的数量小于所述第一数量阈值,则基于nmslib数据库,在外部存储器中生成包含该内存缓存中所有向量的HNSW向量索引子文件。
具体地,当向量的数量比较少时,建立基于nmslib数据库的向量索引HNSWIndex(继承KNNIndex),实现KNNIndex定义抽象方法,适配nmslib相关操作,完成基于图算法的向量相似度检索接入。
nmslib数据库的特点是针对于中或小数据量索引子文件使用。有较高的准召率,但是占用内存比较大,使用的是非量化搜索算法,而是图算法。
S124,返回所述S121。
具体地,ElasticSearch搜索引擎可以提供FAISS数据库和nmslib数据库所不具备的横向扩展的能力,聚合两种向量数据库,从而提供海量数据的数据量使用,同时兼顾了数据量需求、准召率和内存占用三个方向。
本实施例中,通过借助于Lucene的索引扩展机制,结合开源相似性搜索库,建立Lucene的向量索引子文件。通过借助ElasticSearch搜索引擎提供的底层索引管理机制和分布式能力,将新建的Lucene向量索引子文件交给ElasticSearch搜索引擎进行管理,最终使ElasticSearch搜索引擎具备向量搜索能力。本实施例还根据向量的数据规模选择生成不同类型的向量索引子文件,大规模数据生成FAISS向量索引子文件,牺牲部分准召并保证内存可控;中小规模数据生成HNSW向量索引子文件保证准召率。
此外,ElasticSearch搜索引擎也不会丢失原有的标量搜索功能,例如,当进行图片相似程度比较的任务时,可以将待比较图片输入至ElasticSearch搜索引擎,ElasticSearch搜索引擎可以先调用向量搜索的功能和本地的模板图片进行图片的相似度比较,在调用标量搜索的功能筛选合适的标签。
在本申请的一实施例中,所述S100还包括如下S130:
S130,基于外部存储器中生成的FAISS索引子文件或HNSW索引子文件构建所述FAISS索引子文件或HNSW索引子文件映射的内存对象。将所述FAISS索引子文件或HNSW索引子文件映射的内存对象写入内部存储器。外部存储器中的FAISS索引子文件或HNSW索引子文件仍然保留。
具体地,本实施例中的内部存储器又称为KNNIndexCache。本步骤是将外部存储器中生成的FAISS索引子文件或HNSW索引子文件加载进内部存储器的过程。在内部存储器存储时,索引子文件的形式会转变为映射的内存对象。
S111至S113,S121至S124,以及S130,是可以并发运行的三个闭环的步骤,彼此之间互不影响。
本实施例中,通过将外部存储器中生成的索引子文件映射成内存对象写入至内部存储器,使得内部存储器可以对索引子文件中包含的所有向量进行管理,便于后续查询与检索。
在本申请的一实施例中,所述S200包括如下S210至S250:
S210,实时监控客户端发送的查询请求。
具体地,S100和S200可以是并发运行的,两个步骤互不影响,本实施例阐述的是S200的子步骤。
S220,当接收到客户端发送的查询请求时,读取所述查询请求中附带的索引名、命中向量目标数K和待查询向量。
具体地,查询请求和写入请求类似,都是会附带一些信息。查询请求会附带本次查询的索引名、命中向量目标数K和待查询向量。
例如,客户端向搜索终端发送一个“查询和一张汽车图片最相似的10张图片”的查询请求,索引名就是车辆,为了方便记为索引名A,命中向量目标数就是10,待查询向量就是由这张汽车图片转化的向量。
S230,判断外部存储器中在所述索引名下的所有向量索引子文件映射的内存对象是否均写入了内部存储器。
具体地,由于S121至S124,与S130是并发运行的,互不影响。因此,可能会出现外部存储器中的索引子文件映射的内存对象没有全部写入内部存储器的情况发生。同时,查询请求和向量写入请求也可能同时被搜索终端接收,因此,可能出现处理器一边执行S100,一边执行S200的情况。因此,需要确认外部存储器中在所述索引名下的所有向量索引子文件映射的内存对象是否均写入了内部存储器,否则内部存储器中的向量可能会不齐全,查询任务的准确率就会大打折扣。
S241,若外部存储器中在所述索引名下的所有向量索引子文件映射的内存对象均写入了内部存储器,则搜寻内部存储器中所述索引名下的所有向量索引子文件各自映射的内存对象。将内存对象的数量记为M。
具体地,例如,外部存储器中在索引名A下,一共落盘了3个向量索引子文件,并且3个向量索引子文件在内部存储器都能找到各自映射的内存对象,即内存存储器中,那么表明内部存储器和外部存储器的数据同步了,内部存储器在当前状态下没有缺失数据,可以开始执行查询任务。
执行查询任务的第一步是搜寻内部存储器中所述索引名下的所有向量索引子文件各自映射的内存对象,即找到这3个内存对象。这个例子里M为3。
S242,选取一个内存对象,获取所述内存对象包含的多个向量,记录向量的数量N。
具体地,一个内存对象是包含多个向量的,不同的内存对象包含的向量个数可能相同,也可能不同。例如,找到的3个内存对象,内存对象1包括8个向量,内存对象2包括20个向量,内存对象3包括50个向量。
S243,判断向量数量N是否大于命中向量目标数K。
具体地,由于内存对象包含的向量个数不一定大于K,因此本步骤要执行一次判断。
S244,若向量数量N小于或等于命中向量目标数K,则生成该内存对象对应的相似向量集合,将N个向量置入该内存对象对应的相似向量集合。
具体地,以内存对象1为例,本步骤的目的是从内存对象1中取K个与待查询向量最相似的向量。
以前述例子K为10为例,其实从内存对象1中找到10个与汽车图片最相似的10张图片。然而,内存对象1只包括8个向量,不足10个,那么就将这8个向量全部置入一个相似向量集合1。
S245,若向量数量N大于命中向量目标数K,则生成该内存对象对应的相似向量集合。从N个向量中选取与待查询向量最相似的K个向量置入该内存对象对应的相似向量集合。
具体地,以内存对象2和内存对象3为例。内存对象2包括20个向量,内存对象3包括50个向量,都大于10。因此,从内存对象2的20个向量中选10个和待查询向量相似度最大的向量,全部置入一个相似度筛选集合2。从内存对象3的50个向量中选10个和待查询向量相似度最大的向量,全部置入一个相似度筛选集合3。
S246,反复执行S242至S245,得到M个相似向量集合,每一个内存对象对应一个相似向量集合。
具体地,承接上述例子,最后得到了相似度筛选集合1,相似度筛选集合2,相似度筛选集合3。
S247,将M个相似向量集合合并,生成相似向量总集,从相似向量总集中选取K个与待查询向量最相似的K个向量输出。
具体地,将相似向量集合1,相似向量集合2,相似向量集合3合并为一个相似向量总集,那么相似向量总集中就有了8+10+10=28个向量,从28个向量中再选取为与待查询向量最相似的10个向量作为输出结果即可。
在S247执行完毕后,返回S210。
确定两个向量相似的程度可以通过先计算相似度,再衡量相似度的大小进行判断。向量本身是一个符点形式的数组。计算两个向量彼此之间的相似度的方法有很多,可选地,可以计算两个向量的欧式距离,欧式距离越大,向量的相似度越大。可选地,可以计算两个向量的余弦度,向量之间的夹角越小,余弦度越大,向量的相似度越大。
在S245中,也不是一次计算N个向量的相似度,这样计算N次相似度成本较大,可以根据不同的向量检索算法(基于图的HNSW算法或者量化算法IVFPQ等)选取最相似集合计算相似度(最相似集合的大小远远小于N),这样可以简化相似度的计算过程。
S250,若外部存储器中在所述索引名存在至少一个向量索引子文件映射的内存对象未写入内部存储器,则等待外部存储器中在所述索引名下的所有向量索引子文件各自映射的内存对象均写入内部存储器后,再执行后续步骤S261中所述搜寻内部存储器中所述索引名下的所有向量索引子文件各自映射的内存对象的步骤。
具体地,例如,外部存储器中在索引名A下,一共落盘了3个向量索引子文件,有2个向量索引子文件在内部存储器都能找到各自映射的内存对象,但是有1个向量索引子文件映射的内存对象还未写入至内存存储器中。那么表明内部存储器和外部存储器的数据尚未同步,需要等待这1个向量索引子文件映射的内存对象写入内部存储器后,再执行S261的查询任务。
本实施例中,通底层向量的检索和相似度计算,实现向量搜索,执行查询任务。
在本申请的一实施例中,所述S300包括如下S310至S322:
S310,实时监控外部存储器中每一个索引名下所有向量索引子文件的数量之和,判断在每一个索引名下所有向量索引子文件的数量之和是否小于第二数量阈值。
具体地,本实施例是S300的子步骤,阐述的是向量索引子文件的合并过程,这个步骤S300和S100,S200也可以并发执行。前述内容已经提及,所有向量索引子文件的总体数据规模可以包括所有向量索引子文件的总数量或所有向量索引子文件占用的总存储空间。本实施例下,采取二者满足其一即可触发向量索引子文件的合并。合并时,同一索引名下包括的FAISS向量索引子文件和HNSW向量索引子文件可以一起合并。
首先本实施例先执行所有向量索引子文件的总数量的判断逻辑,先计算在所述索引名下所有向量索引子文件的数量之和。然后合并线程监控索引子文件的数量和情况,一旦数量和大于第二数量阈值,就触发合并。
例如索引名A下有3个FAISS向量索引子文件,2个HNSW向量索引子文件,他们都属于向量索引子文件,只是类型不同,那么数量之和为5,设定第二数量阈值为5的话,就会触发合并,执行后续的S321。
S321,若在一个索引名下所有向量索引子文件的数量之和大于或等于所述第二数量阈值,则将所述外部存储器中在所述索引名下的所有向量索引子文件合并为一个向量索引文件。
具体地,本步骤上是将散碎的向量索引子文件整合为一个大的向量索引文件,并不会删减任何一个向量索引子文件包含的向量。
S322,基于所述向量索引文件构建所述向量索引文件映射的内存对象,将所述向量索引文件映射的内存对象写入内部存储器。所述外部存储器中的所述向量索引文件仍然保留。
具体地,整合后外部存储器中会生成一个大的向量索引文件,这个大的向量索引文件也要通过映射内存对象的方式写入内部存储器,同时,写入后,外部存储器中的这个大的向量索引文件仍然保留。
本实施例中,通过将琐碎散落的多个向量索引子文件合并为一个大的向量索引文件,提高了执行查询任务时查询索引文件中向量的效率。
在本申请的一实施例中,在所述S332之后,所述S300还包括如下S323至S324:
S333,在外部存储器中删除在所述索引名下的所有向量索引子文件。
S334,在内部存储器中删除在所述索引名下每一个向量索引子文件映射的内存对象。
具体地,完成合并后,外部存储器需要删除琐碎的向量索引子文件,内部存储器也需要删除对应的内存对象。
本实施例可以实现在合并索引子文件后,减少磁盘和内存中琐碎的索引子文件,实现了内存的驱逐和淘汰,有效管理向量索引子文件的生命周期并防止内存OOM。
在本申请的一实施例中,所述S321包括如下S321a至S321d:
S321a,若在所述索引名下所有向量索引子文件的数量之和大于或等于所述第二数量阈值,则将所述索引名下的所有向量索引子文件各自映射的内存对象包含的向量合并,生成一个索引向量数据集。
具体地,本步骤介绍的是合并索引子文件的具体步骤,合并索引子文件实际上是合并向量。通过读取内存对象中的向量,然后合并向量完成初步的合并步骤。
S321b,判断索引向量数据集包含的向量总数是否小于所述第一数量阈值。
S321c,若索引向量数据集包含的向量总数大于或等于所述第一数量阈值,则在外部存储器中生成包含索引向量数据集中所有向量的FAISS向量索引文件。
S321d,若索引向量数据集包含的向量总数小于所述第一数量阈值,则在外部存储器中生成包含索引向量数据集中所有向量的HNSW向量索引文件。
具体地,本实施例中,本步骤S331b至S331d和在前述的S121至S123的原理一致,合并后在生成大的向量索引文件时,也要进行生成FAISS向量索引文件还是HNSW向量索引文件的判定,此处不再赘述。步骤的最终,生成了合并后的向量索引文件。
本实施例中,通过在生成合并后的索引文件时,再次根据向量的数据规模选择生成不同类型的向量索引子文件,大规模数据生成FAISS向量索引子文件,牺牲部分准召率并保证内存可控;中小规模数据生成HNSW向量索引子文件保证准召率,使得合成后的向量索引文件依然能保持准召率和内存可控性的平衡。
在本申请的一实施例中,在所述S320之后,所述S300还包括日系S341至S343:
S341,若在所述索引名下所有向量索引子文件的数量之和小于所述第二数量阈值,则进一步计算外部存储器中所述索引名下所有向量索引子文件占用的存储空间。S342,判断所述外部存储器中所述索引名下所有向量索引子文件占用的存储空间是否小于存储空间阈值。
S343,若所述外部存储器中所述索引名下所有向量索引子文件占用的存储空间是否大于或等于存储空间阈值,则将所述索引名下的所有向量索引子文件合并为一个向量索引文件。
具体地,具体地,前述内容已经提及,所有向量索引子文件的总体数据规模可以包括所有向量索引子文件的总数量或所有向量索引子文件占用的总存储空间。本实施例下,采取二者满足其一即可触发向量索引子文件的合并。
本实施例中,如果经过前述所有向量索引子文件的总数量的判定不满足合并的条件,进一步再通过所有向量索引子文件占用的总存储空间来判断是否满足合并的条件,如果满足,还是要触发合并。存储空间的单位可以是MB,也可以是GB,当然还可以是KB。
本实施例中,通过设置所有向量索引子文件的总数量和总存储空间的双重判定,来确定触发索引子文件是否需要合并,可以从存储空间占用和数量两个方向对外部存储器和内部存储器进行有效控制和管理。
如图2所示,本申请还提供一种搜索终端10。所述搜索终端10包括ElasticSearch搜索引擎110。所述ElasticSearch搜索引擎110搭载有FAISS向量索引库和nmslib向量索引库。
所述ElasticSearch搜索引擎110包括处理器111、外部存储器112、内存缓存113和内部存储器114。所述处理器111设置于所述ElasticSearch搜索引擎110中。所述处理器111用于执行如前述任一实施例所述的搜索终端的控制方法。所述外部存储器112设置于所述ElasticSearch搜索引擎110中。所述外部存储器112与所述处理器111电连接。所述内存缓存113设置于所述ElasticSearch搜索引擎110中。所述内存缓存113与所述处理器111电连接。所述内存缓存113还与外部存储器112电连接。所述内部存储器114设置于所述ElasticSearch搜索引擎110中。所述内部存储器114与所述处理器111电连接。所述内部存储器114还与外部存储器112电连接。
具体地,本实施例提供的搜索终端10与客户端配20合使用时的结构示意图如图3所示。
需要说明的是,本实施例搜索终端10可以应用前述提及的搜索终端的控制方法,因此,为了描述简洁,前述搜索终端的控制方法和本实施例中出现的相同设备或部件,统一在本实施例介绍的搜索终端10来标号,搜索终端的控制方法部分的相同设备或部件不进行标号。
以上所述实施例的各技术特征可以进行任意的组合,各方法步骤也并不做执行顺序的限制,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (10)
1.一种搜索终端的控制方法,其特征在于,所述方法包括:
S100,实时监控客户端发送的向量写入请求,每当接收到客户端发送的向量写入请求时,依据客户端输入的待写入向量,基于开源的向量数据库,建立向量索引子文件存储入外部存储器,并基于所述向量索引子文件构建所述向量索引子文件映射的内存对象,将所述向量索引子文件映射的内存对象写入内部存储器;所述向量索引子文件映射的内存对象包括多个向量;
S200,实时监控客户端发送的查询请求,每当接收到客户端发送的查询请求时,依据查询请求中附带的索引名和待查询向量,在内部存储器中搜寻与待查询向量最相似的K个向量输出;
S300,实时监控外部存储器中每一个索引名下所有向量索引子文件的总体数据规模,若一个索引名下所有向量索引子文件的总体数据规模达到预设数据规模,则将该索引名下的所有向量索引子文件合并为一个向量索引文件,将外部存储器中该索引名下的所有向量索引子文件删除,将内部存储器中该索引名下的所有向量索引子文件各自映射的内存对象删除。
2.根据权利要求1所述的搜索终端的控制方法,其特征在于,所述S100包括:
S111,实时监控客户端发送的向量写入请求;
S112,当接收到客户端发送的向量写入请求时,获取客户端输入的待写入向量;
S113,读取所述向量写入请求中的索引名,将所述待写入向量存储入所述索引名对应的内存缓存,返回所述S111。
3.根据权利要求2所述的搜索终端的控制方法,其特征在于,所述S100还包括:
S121,每隔预设时间段,判断每一个索引名对应的内存缓存中向量的数量是否小于第一数量阈值;
S122,若一个内存缓存中向量的数量大于或等于所述第一数量阈值,则基于FAISS数据库,在外部存储器中生成包含该内存缓存中所有向量的FAISS向量索引子文件;
S123,若一个内存缓存中向量的数量小于所述第一数量阈值,则基于nmslib数据库,在外部存储器中生成包含该内存缓存中所有向量的HNSW向量索引子文件;
S124,返回所述S121。
4.根据权利要求3所述的搜索终端的控制方法,其特征在于,所述S100还包括:
S130,基于外部存储器中生成的FAISS索引子文件或HNSW索引子文件构建所述FAISS索引子文件或HNSW索引子文件映射的内存对象,将所述FAISS索引子文件或HNSW索引子文件映射的内存对象写入内部存储器;外部存储器中的FAISS索引子文件或HNSW索引子文件仍然保留。
5.根据权利要求4所述的搜索终端的控制方法,其特征在于,所述S200包括:
S210,实时监控客户端发送的查询请求;
S220,当接收到客户端发送的查询请求时,读取所述查询请求中附带的索引名、命中向量目标数K和待查询向量;
S230,判断外部存储器中在所述索引名下的所有向量索引子文件映射的内存对象是否均写入了内部存储器;
S241,若外部存储器中在所述索引名下的所有向量索引子文件映射的内存对象均写入了内部存储器,则搜寻内部存储器中所述索引名下的所有向量索引子文件各自映射的内存对象,将内存对象的数量记为M;
S242,选取一个内存对象,获取所述内存对象包含的多个向量,记录向量的数量N;
S243,判断向量数量N是否大于命中向量目标数K;
S244,若向量数量N小于或等于命中向量目标数K,则生成该内存对象对应的相似向量集合,将N个向量置入该内存对象对应的相似向量集合;
S245,若向量数量N大于命中向量目标数K,则生成该内存对象对应的相似向量集合,从N个向量中选取与待查询向量最相似的K个向量置入该内存对象对应的相似向量集合;
S246,反复执行S242至S245,得到M个相似向量集合,每一个内存对象对应一个相似向量集合;
S247,将M个相似向量集合合并,生成相似向量总集,从相似向量总集中选取K个与待查询向量最相似的K个向量输出;
S250,若外部存储器中在所述索引名存在至少一个向量索引子文件映射的内存对象未写入内部存储器,则等待外部存储器中在所述索引名下的所有向量索引子文件各自映射的内存对象均写入内部存储器后,再执行后续步骤S261中所述搜寻内部存储器中所述索引名下的所有向量索引子文件各自映射的内存对象的步骤。
6.根据权利要求5所述的搜索终端的控制方法,其特征在于,所述S300包括:
S310,实时监控外部存储器中每一个索引名下所有向量索引子文件的数量之和,判断在每一个索引名下所有向量索引子文件的数量之和是否小于第二数量阈值;
S321,若在一个索引名下所有向量索引子文件的数量之和大于或等于所述第二数量阈值,则将所述外部存储器中在所述索引名下的所有向量索引子文件合并为一个向量索引文件;
S322,基于所述向量索引文件构建所述向量索引文件映射的内存对象,将所述向量索引文件映射的内存对象写入内部存储器;所述外部存储器中的所述向量索引文件仍然保留。
7.根据权利要求6所述的搜索终端的控制方法,其特征在于,在所述S332之后,所述S300还包括:
S323,在外部存储器中删除在所述索引名下的所有向量索引子文件;
S324,在内部存储器中删除在所述索引名下每一个向量索引子文件映射的内存对象。
8.根据权利要求7所述的搜索终端的控制方法,其特征在于,所述S321包括:
S321a,若在所述索引名下所有向量索引子文件的数量之和大于或等于所述第二数量阈值,则将所述索引名下的所有向量索引子文件各自映射的内存对象包含的向量合并,生成一个索引向量数据集;
S321b,判断索引向量数据集包含的向量总数是否小于所述第一数量阈值;
S321c,若索引向量数据集包含的向量总数大于或等于所述第一数量阈值,则在外部存储器中生成包含索引向量数据集中所有向量的FAISS向量索引文件;
S321d,若索引向量数据集包含的向量总数小于所述第一数量阈值,则在外部存储器中生成包含索引向量数据集中所有向量的HNSW向量索引文件。
9.根据权利要求8所述的搜索终端的控制方法,其特征在于,在所述S320之后,所述S300还包括:
S331,若在所述索引名下所有向量索引子文件的数量之和小于所述第二数量阈值,则进一步计算外部存储器中所述索引名下所有向量索引子文件占用的存储空间;
S332,判断所述外部存储器中所述索引名下所有向量索引子文件占用的存储空间是否小于存储空间阈值;
S333,若所述外部存储器中所述索引名下所有向量索引子文件占用的存储空间是否大于或等于存储空间阈值,则将所述索引名下的所有向量索引子文件合并为一个向量索引文件。
10.一种搜索终端,其特征在于,包括:
ElasticSearch搜索引擎,搭载有FAISS向量索引库和nmslib向量索引库;
所述ElasticSearch搜索引擎包括:
处理器,设置于所述ElasticSearch搜索引擎中,用于执行如权利要求1-9中任意一项所述的搜索终端的控制方法;
外部存储器,设置于所述ElasticSearch搜索引擎中,与所述处理器电连接;
内存缓存,设置于所述ElasticSearch搜索引擎中,所述内存缓存与所述处理器电连接,所述内存缓存还与外部存储器电连接;
内部存储器,设置于所述ElasticSearch搜索引擎中,所述内部存储器与所述处理器电连接,所述内部存储器还与外部存储器电连接。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110362676.5A CN112966007B (zh) | 2021-04-02 | 2021-04-02 | 一种搜索终端的控制方法与搜索终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110362676.5A CN112966007B (zh) | 2021-04-02 | 2021-04-02 | 一种搜索终端的控制方法与搜索终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112966007A true CN112966007A (zh) | 2021-06-15 |
CN112966007B CN112966007B (zh) | 2022-06-17 |
Family
ID=76281126
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110362676.5A Active CN112966007B (zh) | 2021-04-02 | 2021-04-02 | 一种搜索终端的控制方法与搜索终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112966007B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102436491A (zh) * | 2011-11-08 | 2012-05-02 | 张三明 | 一种基于BigBase的海量图片搜索系统及方法 |
CN106156357A (zh) * | 2016-07-27 | 2016-11-23 | 成都四象联创科技有限公司 | 文本数据定向搜索方法 |
US20170161390A1 (en) * | 2015-12-07 | 2017-06-08 | Ephesoft Inc. | Analytic systems, methods, and computer-readable media for structured, semi-structured, and unstructured documents |
CN111026922A (zh) * | 2019-12-26 | 2020-04-17 | 长城计算机软件与系统有限公司 | 一种分布式向量索引方法、系统、插件及电子设备 |
CN111159343A (zh) * | 2019-12-26 | 2020-05-15 | 上海科技发展有限公司 | 基于文本嵌入的文本相似性搜索方法、装置、设备和介质 |
CN111324689A (zh) * | 2020-03-03 | 2020-06-23 | 中国平安人寿保险股份有限公司 | 问答系统的索引更新方法、装置、设备及存储介质 |
CN111881161A (zh) * | 2020-07-27 | 2020-11-03 | 新华智云科技有限公司 | 一种指标计量的计算方法、系统、设备和存储介质 |
-
2021
- 2021-04-02 CN CN202110362676.5A patent/CN112966007B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102436491A (zh) * | 2011-11-08 | 2012-05-02 | 张三明 | 一种基于BigBase的海量图片搜索系统及方法 |
US20170161390A1 (en) * | 2015-12-07 | 2017-06-08 | Ephesoft Inc. | Analytic systems, methods, and computer-readable media for structured, semi-structured, and unstructured documents |
CN106156357A (zh) * | 2016-07-27 | 2016-11-23 | 成都四象联创科技有限公司 | 文本数据定向搜索方法 |
CN111026922A (zh) * | 2019-12-26 | 2020-04-17 | 长城计算机软件与系统有限公司 | 一种分布式向量索引方法、系统、插件及电子设备 |
CN111159343A (zh) * | 2019-12-26 | 2020-05-15 | 上海科技发展有限公司 | 基于文本嵌入的文本相似性搜索方法、装置、设备和介质 |
CN111324689A (zh) * | 2020-03-03 | 2020-06-23 | 中国平安人寿保险股份有限公司 | 问答系统的索引更新方法、装置、设备及存储介质 |
CN111881161A (zh) * | 2020-07-27 | 2020-11-03 | 新华智云科技有限公司 | 一种指标计量的计算方法、系统、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112966007B (zh) | 2022-06-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11775524B2 (en) | Cache for efficient record lookups in an LSM data structure | |
CN107247808B (zh) | 一种分布式NewSQL数据库系统及图片数据查询方法 | |
CN107491523B (zh) | 存储数据对象的方法及装置 | |
US9043334B2 (en) | Method and system for accessing files on a storage system | |
CN108140040A (zh) | 存储器中数据库的选择性数据压缩 | |
CN111309720A (zh) | 时序数据的存储、读取方法、装置、电子设备及存储介质 | |
WO2011008807A2 (en) | Database storage architecture | |
CN109766318B (zh) | 文件读取方法及装置 | |
CN111930740A (zh) | 一种游戏数据的处理方法、装置、服务器及存储介质 | |
CN111752945A (zh) | 一种基于容器和层次模型的时序数据库数据交互方法和系统 | |
JP5858308B2 (ja) | データベース管理システム、計算機、データベース管理方法 | |
CN108021562B (zh) | 应用于分布式文件系统的存盘方法、装置及分布式文件系统 | |
CN112966007B (zh) | 一种搜索终端的控制方法与搜索终端 | |
JP6406254B2 (ja) | ストレージ装置、データアクセス方法およびデータアクセスプログラム | |
US20200019539A1 (en) | Efficient and light-weight indexing for massive blob/objects | |
CN114936010B (zh) | 数据处理方法、装置、设备及介质 | |
US12001703B2 (en) | Data processing method and storage device | |
US11640240B1 (en) | Transaction management for monotonic write consistency in a distributed storage system | |
US11537516B1 (en) | Multi-tier cache for a distributed storage system | |
Tang et al. | Tuning object-centric data management systems for large scale scientific applications | |
US11741078B1 (en) | Witness service for ensuring data consistency in a distributed storage system | |
US11704033B1 (en) | Request routing management for a distributed storage system | |
CN114443722A (zh) | 缓存管理方法、装置、存储介质及电子设备 | |
CN114356230B (zh) | 一种提高列存储引擎读性能的方法及系统 | |
CN118394762B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |