CN111400314B - 利用向量图索引从数据库中检索节点向量的方法及装置 - Google Patents
利用向量图索引从数据库中检索节点向量的方法及装置 Download PDFInfo
- Publication number
- CN111400314B CN111400314B CN202010136299.9A CN202010136299A CN111400314B CN 111400314 B CN111400314 B CN 111400314B CN 202010136299 A CN202010136299 A CN 202010136299A CN 111400314 B CN111400314 B CN 111400314B
- Authority
- CN
- China
- Prior art keywords
- node
- neighbor
- layer
- current
- nodes
- 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.)
- Active
Links
- 239000013598 vector Substances 0.000 title claims abstract description 335
- 238000010586 diagram Methods 0.000 title claims abstract description 87
- 238000000034 method Methods 0.000 title claims abstract description 77
- 238000010276 construction Methods 0.000 claims description 15
- 238000012216 screening Methods 0.000 claims description 6
- 238000004590 computer program Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 description 12
- 230000008859 change Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000003542 behavioural effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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
- G06F16/2237—Vectors, bitmaps or matrices
-
- 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/24—Querying
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)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例提供一种利用向量图索引从数据库中检索节点向量的方法及装置。向量图索引将数据库中的各个节点划分在从高到低的各个层中,高层中节点的数量小于低层中节点的数量,每一层的节点在该层以及该层以下的各层中均存在设定数目的邻居,且高层的邻居数目小于低层的邻居数目,节点的向量与其邻居节点的向量之间的匹配度大于预设阈值。在检索时,基于向量图索引,按照从最高层到最低层的顺序依次,从每层的入口节点、入口节点在本层的邻居节点,以及邻居节点在本层的邻居节点中,确定与待检索节点在向量上匹配目标节点,基于本层的目标节点确定下一层的入口节点,并基于从最低层中确定出的目标节点,确定针对第一节点检索得到的节点。
Description
技术领域
本说明书一个或多个实施例涉及数据检索领域,尤其涉及的一种利用向量图索引从数据库中检索节点向量的方法及装置。
背景技术
随着计算机技术的发展,数据包含的信息也越来越多,对数据的检索要求也逐渐升高。通常可以采用高维向量来表示包含较多信息的数据,例如,图像、用户特征等数据均可以采用高维向量进行表示。在一些应用场景中,存在对高维向量进行检索的要求。例如,在刷脸支付时,可以从数据库的大量人脸图像中对输入的人脸图像进行检索;在购物网站上,可以从数据库的大量商品图像中对输入的商品图像进行检索。PostgreSQL是一款支持向量检索的开源数据库,其具有高可用性、高扩展性。随着数据数目的增多以及向量维数的升高,基于该数据库的向量检索效率,成为目前技术改进的一个重点方向。
因此,希望能有改进的方案,可以提高基于PostgreSQL数据库进行高维向量检索时的检索效率。
发明内容
本说明书一个或多个实施例描述了利用向量图索引从数据库中检索节点向量的方法及装置,以提高基于PostgreSQL数据库进行高维向量检索时的检索效率。具体的计算方案如下。
第一方面,实施例提供了一种利用向量图索引从PostgreSQL数据库中检索节点向量的方法,通过计算机执行;所述数据库包含多个节点的向量;向量图索引将数据库中的各个节点划分在从高到低的各个层中,高层中节点的数量小于低层中节点的数量,每一层中的节点在该层以及该层以下的各层中均存在设定数目的邻居,且高层的邻居数目小于低层的邻居数目;所述方法包括:
获取待检索的第一节点;
基于所述向量图索引,按照从最高层到最低层的顺序依次将每个层确定为当前层,并针对确定的每一个当前层,按照以下方式确定所述当前层的目标节点:确定所述当前层的入口节点,从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第一节点在向量上最匹配的目标节点;其中,当所述当前层是最高层时,从所述最高层中任意选择节点作为所述最高层的入口节点;当所述当前层不是最高层时,基于所述当前层的上一层确定的目标节点,确定所述当前层的入口节点;
基于从最低层中确定出的目标节点,确定针对第一节点检索得到的节点。
在一种实施方式中,所述向量图索引包括多个数据页和多个邻居页,所述数据页用于存储各个节点的向量,所述邻居页用于存储各个节点在各层中的邻居节点以及该邻居节点的起始邻居页,一个节点的所有邻居节点处于一个邻居页中或者连续的多个邻居页中,不同节点的邻居节点位于不同的邻居页中。
在一种实施方式中,所述从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第一节点在向量上最匹配的目标节点的步骤,包括:
将所述入口节点确定为当前节点;
基于所述向量图索引,获取所述当前节点的邻居页,从所述当前节点的邻居页中获取所述当前节点在所述当前层的各个第一邻居节点;
从所述数据页中获取各个第一邻居节点的向量以及所述当前节点的向量,并与所述第一节点的向量进行匹配,得到一个最匹配邻居节点;
将所述最匹配邻居节点作为当前节点,返回执行所述基于所述向量图索引,获取所述当前节点的邻居页的步骤,当循环满足收敛条件时,将本次的最匹配邻居节点作为所述目标节点。
在一种实施方式中,所述基于所述当前层的上一层确定的目标节点,确定所述当前层的入口节点的步骤,包括:
将所述当前层的上一层确定的一个目标节点,确定为当前层的入口节点。
在一种实施方式中,所述从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第一节点在向量上最匹配的目标节点的步骤,包括:
将所述入口节点确定为当前节点;
基于所述向量图索引,获取所述当前节点的邻居页,从所述当前节点的邻居页中获取所述当前节点在所述当前层的各个第一邻居节点;
从所述数据页中获取各个第一邻居节点的向量以及所述当前节点的向量,并与所述第一节点的向量进行匹配,按照向量的匹配度大小将所述各个第一邻居节点和所述当前节点加入匹配队列中;
按照匹配度从大到小的顺序,将所述匹配队列中的节点依次作为当前节点,返回执行所述基于所述向量图索引,获取所述当前节点的邻居页的步骤,当所述匹配队列满足收敛条件时,将所述匹配队列中匹配度最大的第一数量个节点作为所述目标节点。
在一种实施方式中,所述基于从最低层中确定出的目标节点,确定针对所述第一节点检索得到的节点的步骤,包括,基于从最低层中确定出的第一数量个目标节点,确定针对所述第一节点检索得到的节点。
在一种实施方式中,所述数据库还包括各个节点的向量之外的第一字段;在获取待检索的第一节点时,还包括,获取针对第一字段的限制字段值条件;
所述基于从最低层中确定出的第一数量个目标节点,确定针对所述第一节点检索得到的节点的步骤,包括:
从所述数据库中获取最低层的第一数量个目标节点的第一字段值;
基于各个第一字段值,从所述第一数量个目标节点中筛选出满足所述限制字段值条件的节点,得到针对所述第一节点检索得到的节点。
在一种实施方式中,所述从所述最高层中任意选择节点作为所述最高层的入口节点的步骤,包括:
从预先存储的处于最高层的各个节点中,任意选择节点作为所述最高层的入口节点。
第二方面,实施例提供了一种用于PostgreSQL数据库的节点向量检索的向量图索引构建方法,通过计算机执行,所述数据库包含多个节点的向量;所述向量图索引包括从高到低的各个层,各个层对应的邻居数目为设定数目,且高层的邻居数目小于低层的邻居数目;所述方法包括:
从所述数据库中依次获取每个节点;
针对获取的任意一个第二节点,确定所述第二节点所在的层,使其满足高层中节点的数量小于低层中节点的数量的条件;
将所述第二节点所在的层以及该层以下的各层中的任意一层作为当前层,按照以下方式确定所述第二节点在所述当前层中的邻居节点:
当所述当前层的已有节点的数目大于所述当前层设定的邻居数目时,从所述当前层中任意选择一个已有节点作为所述当前层的入口节点,从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第二节点在向量上最匹配的目标节点;将所述目标节点确定为所述第二节点在所述当前层的邻居节点。
在一种实施方式中,当所述当前层的已有节点的数目不大于所述当前层设定的邻居数目时,还包括:
将所述当前层的已有节点确定为所述第二节点在所述当前层的邻居节点。
在一种实施方式中,在将所述目标节点确定为所述第二节点在所述当前层的邻居节点之后,还包括:
将所述第二节点在所述当前层的邻居节点作为第三节点,基于所述第二节点更新所述第三节点在所述当前层的邻居节点。
在一种实施方式中,所述基于所述第二节点更新所述第三节点在所述当前层的邻居节点的步骤,包括:
当所述第三节点在所述当前层的邻居节点的数目小于所述当前层设定的邻居数目时,直接将所述第二节点作为第三节点在所述当前层的邻居节点;
当所述第三节点在所述当前层的邻居节点的数目等于所述当前层设定的邻居数目时,如果所述第二节点与所述第三节点在向量上的匹配度,大于所述第三节点在所述当前层的某个邻居节点与所述第三节点在向量上的匹配度,则用所述第二节点替换所述某个邻居节点。
在一种实施方式中,在确定所述第二节点所在的层之后,还包括:
根据所述第二节点所在的层以及该层以下各层设定的邻居数目,生成所述第二节点的邻居页;
在将所述目标节点确定为所述第二节点在所述当前层的邻居节点之后,还包括:
将第二节点在所述当前层的邻居节点存储至所述第二节点的邻居页中;
将所述第二节点在所述当前层的邻居节点作为第三节点,基于所述第二节点更新所述第三节点在所述当前层的邻居节点;
当将所述第二节点更新为所述第三节点在所述当前层的邻居节点时,将所述第二节点的起始邻居页添加至所述第三节点的邻居页中。
在一种实施方式中,所述从所述数据库中依次获取每个节点的步骤,包括:
生成数据页,将所述数据库包含的多个节点的向量存储至所述数据页中,并从所述数据页中依次获取每个节点;
所述从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第二节点在向量上最匹配的目标节点的步骤,包括:
将所述入口节点确定为当前节点;
获取所述当前节点的邻居页,从所述当前节点的邻居页中获取所述当前节点在所述当前层的各个第二邻居节点;
从所述数据页中获取各个第二邻居节点的向量以及所述当前节点的向量,并与所述第二节点的向量进行匹配,得到一个最匹配邻居节点;
将所述最匹配邻居节点作为当前节点,返回执行所述获取所述当前节点的邻居页的步骤,当循环满足收敛条件时,将本次的最匹配邻居节点作为所述目标节点。
在一种实施方式中,所述将所述第二节点在所述当前层的邻居节点存储至所述第二节点的邻居页中的步骤,包括:
将所述第二节点在所述当前层的邻居节点,存储在所述第二节点的邻居页中与所述当前层的邻居节点对应的位置处。
在一种实施方式中,在确定所述第二节点所在的层之后,还包括:
当确定所述第二节点所在的层为最高层时,存储所述第二节点。
第三方面,实施例提供了一种利用向量图索引从PostgreSQL数据库中检索节点向量的装置,部署在计算机中;所述数据库包含多个节点的向量;所述向量图索引将所述数据库中的各个节点划分在从高到低的各个层中,高层中节点的数量小于低层中节点的数量,每一层中的节点在该层以及该层以下的各层中均存在设定数目的邻居,且高层的邻居数目小于低层的邻居数目,节点的向量与其邻居节点的向量之间的匹配度大于预设阈值;所述装置包括:
待检索获取模块,配置为获取待检索的第一节点;
目标检索模块,配置为基于所述向量图索引,按照从最高层到最低层的顺序依次将每个层确定为当前层,并针对确定的每一个当前层,按照以下方式确定所述当前层的目标节点:确定所述当前层的入口节点,从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第一节点在向量上最匹配的目标节点;其中,当所述当前层是最高层时,从所述最高层中任意选择节点作为所述最高层的入口节点;当所述当前层不是最高层时,基于所述当前层的上一层确定的目标节点,确定所述当前层的入口节点;
节点确定模块,配置为基于从最低层中确定出的目标节点,确定针对所述第一节点检索得到的节点。
在一种实施方式中,所述向量图索引包括多个数据页和多个邻居页,所述数据页用于存储各个节点的向量,所述邻居页用于存储各个节点在各层中的邻居节点以及该邻居节点的起始邻居页,一个节点的所有邻居节点处于一个邻居页中或者连续的多个邻居页中,不同节点的邻居节点位于不同的邻居页中。
在一种实施方式中,所述目标检索模块,从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第一节点在向量上最匹配的目标节点时,包括:
将所述入口节点确定为当前节点;
基于所述向量图索引,获取所述当前节点的邻居页,从所述当前节点的邻居页中获取所述当前节点在所述当前层的各个第一邻居节点;
从所述数据页中获取各个第一邻居节点的向量以及所述当前节点的向量,并与所述第一节点的向量进行匹配,得到一个最匹配邻居节点;
将所述最匹配邻居节点作为当前节点,返回执行所述基于所述向量图索引,获取所述当前节点的邻居页,当循环满足收敛条件时,将本次的最匹配邻居节点作为所述目标节点。
在一种实施方式中,所述目标检索模块,基于所述当前层的上一层确定的目标节点,确定所述当前层的入口节点时,包括:
将所述当前层的上一层确定的一个目标节点,确定为所述当前层的入口节点。
在一种实施方式中,所述目标检索模块,从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第一节点在向量上最匹配的目标节点时,包括:
将所述入口节点确定为当前节点;
基于所述向量图索引,获取所述当前节点的邻居页,从所述当前节点的邻居页中获取所述当前节点在所述当前层的各个第一邻居节点;
从所述数据页中获取各个第一邻居节点的向量以及所述当前节点的向量,并与所述第一节点的向量进行匹配,按照向量的匹配度大小将所述各个第一邻居节点和所述当前节点加入匹配队列中;
按照匹配度从大到小的顺序,将所述匹配队列中的节点依次作为当前节点,返回执行所述基于所述向量图索引,获取所述当前节点的邻居页,当所述匹配队列满足收敛条件时,将所述匹配队列中匹配度最大的第一数量个节点作为所述目标节点。
在一种实施方式中,所述节点确定模块,具体配置为:
基于从最低层中确定出的第一数量个目标节点,确定针对所述第一节点检索得到的节点。
在一种实施方式中,所述数据库还包括各个节点的向量之外的第一字段;所述装置还包括,条件获取模块,配置为在获取待检索的第一节点时,获取针对所述第一字段的限制字段值条件;
所述节点确定模块,具体配置为:
从所述数据库中获取最低层的第一数量个目标节点的第一字段值;
基于各个第一字段值,从所述第一数量个目标节点中筛选出满足所述限制字段值条件的节点,得到针对所述第一节点检索得到的节点。
在一种实施方式中,所述目标检索模块,从所述最高层中任意选择节点作为所述最高层的入口节点时,包括,从预先存储的处于最高层的各个节点中,任意选择节点作为所述最高层的入口节点。
第四方面,实施例提供了一种用于PostgreSQL数据库的节点向量检索的向量图索引构建装置,部署在计算机中,所述数据库包含多个节点的向量;所述向量图索引包括从高到低的各个层,各个层对应的邻居数目为设定数目,且高层的邻居数目小于低层的邻居数目;所述装置包括:
节点获取模块,配置为从所述数据库中依次获取每个节点;
节点层确定模块,配置为针对获取的任意一个第二节点,确定所述第二节点所在的层,使其满足高层中节点的数量小于低层中节点的数量的条件;
邻居确定模块,配置为将所述第二节点所在的层以及该层以下的各层中的任意一层作为当前层,按照以下方式确定所述第二节点在所述当前层中的邻居节点:当所述当前层的已有节点的数目大于所述当前层设定的邻居数目时,从所述当前层中任意选择一个已有节点作为所述当前层的入口节点,从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第二节点在向量上最匹配的目标节点;将所述目标节点确定为所述第二节点在所述当前层的邻居节点。
在一种实施方式中,所述邻居确定模块,还配置为:
当所述当前层的已有节点的数目不大于所述当前层设定的邻居数目时,将所述当前层的已有节点确定为所述第二节点在所述当前层的邻居节点。
在一种实施方式中,装置还包括:
邻居更新模块,配置为在将所述目标节点确定为所述第二节点在所述当前层的邻居节点之后,将所述第二节点在所述当前层的邻居节点作为第三节点,基于所述第二节点更新所述第三节点在所述当前层的邻居节点。
在一种实施方式中,邻居更新模块,基于所述第二节点更新所述第三节点在所述当前层的邻居节点时,包括:
当所述第三节点在所述当前层的邻居节点的数目小于所述当前层对应的邻居数目时,直接将第二节点作为所述第三节点在所述当前层的邻居节点;
当所述第三节点在所述当前层的邻居节点的数目等于所述当前层对应的邻居数目时,如果所述第二节点与所述第三节点在向量上的匹配度,大于所述第三节点在所述当前层的某个邻居节点与所述第三节点在向量上的匹配度,则用所述第二节点替换所述某个邻居节点。
在一种实施方式中,装置还包括:
邻居页生成模块,配置为在确定所述第二节点所在的层之后,根据所述第二节点所在的层以及该层以下各层设定的邻居数目,生成第二节点的邻居页;
邻居存储模块,配置为在将所述目标节点确定为所述第二节点在所述当前层的邻居节点之后,将所述第二节点在所述当前层的邻居节点存储至所述第二节点的邻居页中;
邻居页更新模块,配置为将所述第二节点在所述当前层的邻居节点作为第三节点,基于所述第二节点,更新所述第三节点在所述当前层的邻居节点;当将所述第二节点更新为所述第三节点在所述当前层的邻居节点时,将所述第二节点的起始邻居页添加至所述第三节点的邻居页中。
在一种实施方式中,节点获取模块具体配置为:
生成数据页,将所述数据库包含的多个节点的向量存储至所述数据页中,并从所述数据页中依次获取每个节点;
所述邻居确定模块,从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第二节点在向量上最匹配的目标节点时,包括:
将所述入口节点确定为当前节点;
获取所述当前节点的邻居页,从所述当前节点的邻居页中获取所述当前节点在所述当前层的各个第二邻居节点;
从所述数据页中获取各个第二邻居节点的向量以及所述当前节点的向量,并与所述第二节点的向量进行匹配,得到一个最匹配邻居节点;
将所述最匹配邻居节点作为当前节点,返回执行所述获取所述当前节点的邻居页,当循环满足收敛条件时,将本次的最匹配邻居节点作为目标节点。
在一种实施方式中,邻居存储模块,将第二节点在所述当前层的邻居节点存储至所述第二节点的邻居页中时,包括:
将所述第二节点在所述当前层的邻居节点,存储在所述第二节点的邻居页中与所述当前层的邻居节点对应的位置处。
在一种实施方式中,装置还包括:
节点存储模块,配置为在确定所述第二节点所在的层之后,当确定所述第二节点所在的层为最高层时,存储所述第二节点。
第五方面,实施例提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面至第二方面中任一项所述的方法。
第六方面,实施例提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面至第二方面中任一项所述的方法。
本说明书实施例提供的向量检索方法及装置,可以基于向量图索引,按照从最高层到最低层的顺序依次从每个层中确定入口节点,并从入口节点在该层的邻居节点以及该邻居节点在该层的邻居节点中,确定待检索的第一节点在向量上最匹配的目标节点,并且,针对相邻的两个层,可以基于较高层得到的目标节点确定较低层的入口节点,当执行至最低层时,可以基于最低层中确定出的目标节点,确定针对第一节点检索到的节点。由于高层的节点数量小于低层的节点数量,高层的邻居数目小于低层的邻居数目,因此从高层到低层依次进行的检索,能够快速地缩小检索范围,并且预先建立的邻居关系网络能够加快比对过程,确定与第一节点在向量上匹配的节点。因此,本说明书实施例能够提高基于PostgreSQL数据库进行高维向量检索时的检索效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为实施例提供的向量图索引中各个层的一种示意图;
图2为实施例提供的向量图索引构建方法的一种流程示意图;
图3为向量图索引的一个层中已经构建的部分邻居关系网络的示意图;
图4为向量图索引中某个节点的邻居页中邻居存储方式的示意图;
图5为实施例中利用向量图索引检索节点向量的方法的一种流程示意图;
图6为与图5对应的从高层到低层进行的检索示意图;
图7为实施例中利用向量图索引检索节点向量的装置的一种示意性框图;
图8为实施例提供的向量图索引构建装置的一种示意性框图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
PostgreSQL是一款支持向量检索的开源数据库,其具有高可用性、高扩展性。该数据库可以用于存储数据。例如,该数据库可以存储图像、用户数据或行为事件数据等。数据库中的每条数据可以称为一个节点,节点的数据可以包括多个字段,例如包括用于表示该节点特征的向量字段,针对用户数据,还可以包括地域字段、年龄字段等;针对人脸图像,还可以包括人脸图像中的姓名字段、年龄字段。其中,向量字段是节点的重要特征,也是重点检索字段。当向量本身的维度非常高时,该向量又被称为高维向量。
PostgreSQL数据库本身支持对高维向量的检索。例如,该数据库可以用于存储商家售卖的各种商品信息,将客户端接收到用户输入的一个物品图像时,可以从该数据库中检索与该物品图像相似的商品信息,检索时可以将该物品图像与数据库的各个商品信息中的图像进行匹配。当图像分辨率较高或很高时,大量高维向量之间的一一匹配将会非常耗时。基于向量的检索,是从数据库中找到与待检索向量最匹配的一个或多个向量的过程。
为了提高基于PostgreSQL数据库进行高维向量检索时的检索效率,本说明书实施例提供了一种向量检索方法,该方法基于预先构建的向量图索引进行检索。向量图索引包括从高到低的各个层,在每层中,根据向量的匹配度,确定数据库中节点与节点之间的邻居关系,即在每层中构建节点和节点之间的邻居关系网络。在检索时,基于构建的向量图索引,按照从最高层到最低层的顺序,依次在每层的邻居关系网络中找到与待检索节点最匹配的目标节点,并作为入口节点向下层检索,直至确定出所有层中最匹配的节点。上述过程包含两个阶段,即索引构建阶段和向量检索阶段。下面首先针对索引构建阶段进行说明。
本说明书实施例中的向量图索引,用于PostgreSQL数据库的节点向量检索。该数据库包含多个节点的向量。在向量图索引中,预先设定从高到低的各个层,以及设定各个层对应的邻居数目,且高层的邻居数目小于低层的邻居数目。邻居节点,是向量与对应的节点的向量相似的节点。节点与其邻居节点之间的向量存在相似性。
例如,图1为本说明书实施例提供的向量图索引中各个层的一种示意图。其中,向量图索引包括从高到低的3层L2、L1和L0,层上的圆点表示节点。L2、L1和L0设定的邻居数目分别为3、5和8。上述各个数值仅仅是一种示例,在实际应用场景中,向量图索引可以设置为2层、4层、5层或更多层,层所设定的邻居数目也可以为较大的整数值。针对数据库中的多个节点,向量图索引为每个节点分配对应的层,并且在向量图索引构建完毕时,高层中节点的总数量小于低层中节点的总数量。
向量图索引中的层,可以理解为一种虚拟层,它是一种分类方式,不同的层对应不同的分类。分配了层的节点,即确定了该节点具有与该层对应的特征。分配了层的节点,其在该层以及该层以下的邻居数目,即为上述L2、L1和L0分别对应的邻居数目3、5和8。例如,当为节点1分配的层为L2层时,可以确定节点1在L2层有3个邻居(用实线相连),在L1层有5个邻居(用虚线相连),在L0层有8个邻居(用点画线相连)。节点1的总邻居数目为3+5+8=16。当为节点2分配的层为L1层时,可以确定节点2在L1层有5个邻居(用实线相连),在L0层有8个邻居(用点画线相连)。节点2的总邻居数目为5+8=13。在图1中仅仅标识出了节点1和节点2在对应层中的邻居节点,对于节点1和节点2之外的其他节点,也在其所在层以及该层以下的层中存在对应的邻居数目,但是图1中并没有将其邻居画出来。
当一个节点所分配的层不是最高层时,该节点在所分配的层以上的层中没有邻居节点。例如,节点2分配的层为L1层,即节点2在L1和L0中存在邻居,在L2中不存在邻居。一个节点在某个层的邻居节点,从该层的已有节点中确定。
图2为本说明书实施例提供的向量图索引构建方法的一种流程示意图。该方法可以通过计算机执行,具体的,该方法可以通过任何具有计算、处理能力的装置、设备、平台、设备集群来执行。该方法包括以下步骤S210~S230。
步骤S210,从数据库中依次获取每个节点,获取的可以是节点编号。
步骤S220,针对获取的任意一个第二节点X2,确定第二节点X2所在的层X2_L,使其满足高层中节点的数量小于低层中节点的数量的条件。以第二节点X2为例,说明确定节点的邻居节点的过程。层X2_L也可以称为与第二节点X2对应的层。
在构建之初,向量图索引各个层中没有节点,是空白层。每获取一个节点,与该节点对应的层中增加一个已有节点。该第二节点X2可以是对应层X2_L中的第一个节点,也可以是第二个节点或者其他任意一个节点。
高层中节点的数量小于低层中节点的数量的条件,可以理解为,当向量图索引构建完成之后,位于高层的节点的总数量小于低层中节点的数量。例如,当向量图索引构建完成之后,L2层的节点总数量小于L1层的节点总数量,L1层的节点总数量小于L0层的节点总数量。
在确定第二节点X2所在的层X2_L时,可以在满足高层中节点的数量小于低层中节点的数量的条件下,随机确定层X2_L。
步骤S230,将第二节点X2所在的层X2_L以及该层X2_L以下的各层中的任意一层作为当前层,按照以下步骤S240和步骤S250确定第二节点X2在当前层中的邻居节点。
步骤S240,当当前层的已有节点的数目大于当前层设定的邻居数目时,从当前层中任意选择一个已有节点作为当前层的入口节点,从入口节点、入口节点在当前层的邻居节点以及该邻居节点在当前层的邻居节点中,确定与第二节点X2在向量上最匹配的目标节点M,将目标节点M确定为第二节点X2在当前层的邻居节点。步骤S250,当当前层的已有节点的数目不大于当前层设定的邻居数目时,可以将当前层的已有节点直接确定为第二节点X2在当前层的邻居节点。
当第二节点X2是当前层的第一个节点时,即当前层还不存在已有节点时,可以暂时不确定第二节点X2的邻居节点,而是继续获取下一个待确定邻居节点的节点。
例如,已知向量图索引包括从高到低的三个层L2、L1和L0,为每个层设定的邻居数目分别为3、5和8。当第二节点X2所在的层X2_L为L2层时,针对L2层,如果第二节点X2是分配至L2层的第一个节点,则先暂时不确定第二节点X2在L2层的邻居节点。针对L1层,如果此时L1层存在3个已有节点,3小于L1层的邻居数目5,因此可以直接将这3个已有节点确定为第二节点X2在L1层的邻居节点。针对L0层,如果此时L0层存在10个已有节点,10大于L0层的邻居数目8,此时可以从L0层中的10个已有节点中,任意选择一个节点,作为L0层的入口节点,从入口节点、入口节点在L0的邻居节点以及该邻居节点在L0层的邻居节点中,确定与第二节点X2在向量上最匹配的目标节点M,将目标节点M确定为第二节点X2在L0层的邻居节点。
在向量图索引的构建过程中,数据库中各个节点被逐个地添加至各个层中。针对第二节点X2所在的层X2_L以及该层X2_L以下的各个层,每个层中的邻居节点可以独立地确定。
在步骤S240中,从入口节点、入口节点在当前层的邻居节点以及该邻居节点在当前层的邻居节点中,确定与第二节点X2在向量上最匹配的目标节点M时,可以将各个节点的向量与第二节点X2的向量分别进行匹配,确定向量之间的匹配度,根据匹配度从各个节点中确定目标节点M。各个节点的向量可以从数据库中获取。所确定的目标节点M可以为一个,也可以为多个。上述匹配度也可以理解为相似度。
确定向量之间的匹配度时,可以采用皮尔逊相关系数(Pearson CorrelationCoefficient、欧几里德距离(Euclidean Distance)或者余弦相似度等方法。
随着层中节点的逐渐添加,节点之间构建起相互关联的邻居关系,邻居关系网络逐渐构建起来。参见图3显示的L2层中已经构建的部分邻居关系网络,该层设定的邻居数目为3,每个圆点均是位于该层中的节点,节点之间的连线表示节点之间的邻居关系。例如,节点1在L2层的邻居包括节点2、节点3和节点9。当选择节点1为L2层的入口节点时,可以将节点1、节点1在L2层的邻居(节点2、节点3和节点9)以及节点2在L2层的邻居(节点1、节点3和节点11)、节点3在L2层的邻居(节点2、节点1和节点5)、节点9在L2层的邻居(节点1、节点7和节点8)等,分别与第二节点X2进行匹配,确定向量之间的匹配度,根据匹配度,从以上各个节点中确定最匹配的目标节点M。
由上述内容可知,本实施例中构建向量图索引时,按照高层的节点数量小于低层的节点数量的条件,以及预先设定每个层的邻居数目,且使得高层的邻居数目小于低层的邻居数目,依次确定每个节点在对应层的邻居节点。所确定的邻居节点,是该层的入口节点、入口节点在该层的邻居节点以及该邻居节点在该层的邻居节点中,在向量上与该节点最匹配的。所构建的向量图索引可以用于快速地从PostgreSQL数据库中检索节点向量。
由于节点与其邻居节点之间存在一定的相互性,在将目标节点M确定为第二节点X2在当前层的邻居节点之后,还可以包括以下步骤a:
步骤a,将第二节点X2在当前层的邻居节点作为第三节点X3,基于第二节点X2更新第三节点X3在当前层的邻居节点。
其中,第三节点X3早于第二节点X2被添加至当前层中。使用第二节点更新已有节点的邻居节点,能够使得更相似的节点作为邻居节点,提高邻居节点的准确性。
而在步骤S240中,针对第二节点X2所在的层以及该层以下的各个层,每个层所确定的邻居节点可以为一个。在这种情况下,该第二节点X2在对应层的其他邻居节点,可以通过后续添加至对应层的其他节点来增加。因此,节点在对应层的邻居节点,可以在逐个向该层中添加节点的过程中陆续增加。
在步骤a中,基于第二节点X2更新第三节点X3在当前层的邻居节点时,具体可以根据以下情况进行。
当第三节点X3在当前层的邻居节点的数目小于当前层设定的邻居数目时,直接将第二节点X2作为第三节点在当前层的邻居节点。
当第三节点X3在当前层的邻居节点的数目等于当前层设定的邻居数目时,如果第二节点X2与第三节点X3在向量上的匹配度,大于第三节点X3在当前层的某个邻居节点Xm与第三节点X3在向量上的匹配度,则用第二节点X2替换某个邻居节点Xm。
例如,参见图3,当第三节点X3为图3中的节点11时,节点11在L2层的邻居节点的数目2小于当前层设定的邻居数目3,可以直接将第二节点X2作为节点11在L2层的邻居节点。当第三节点X3为图3中的节点8时,节点8在L2层的邻居节点的数目3等于当前层设定的邻居数目3,此时可以将第二节点X2与节点8在向量上的匹配度1,与匹配度2、匹配度3、匹配度4进行比较,匹配度2、匹配度3和匹配度4分别是节点5、节点9、节点10与节点8在向量上的匹配度。如果匹配度1大于匹配度2、匹配度3、匹配度4中的某个匹配度,例如大于匹配度3,则将第二节点X3替换匹配度3对应的节点9。
替换之后,邻居关系网络即发生更新。这样即可以在逐渐添加各个节点至向量图索引中的过程中,不断地更新已有节点的邻居节点,最终使得邻居节点与对应节点之间的相似性越来越高。
当数据库中的节点数量非常多时,需要有更好的存储各个节点的邻居节点的方式。在一个实施例中,在步骤S220中确定第二节点X2所在的层X2_L之后,还可以根据第二节点X2所在的层X2_L以及该层X2_L以下的各层设定的邻居数目,生成第二节点X2的邻居页。
每个邻居页可以存储设定条数的邻居节点信息。例如,每个邻居页可以存储10条邻居节点信息。在生成邻居页时,可以根据每个邻居页对应的设定条数,以及第二节点X2所在的层X2_L以及该层X2_L以下的各层设定的邻居数目,确定第二节点X2对应的邻居页数量,并生成对应数量的邻居页。如果邻居页数量大于1,则生成多个连续的邻居页。
例如,确定第二节点X2位于L2层,且L2层以及L2层以下的L1层、L0层设定的邻居数目分别为5、10和20,第二节点X2的邻居总数为35,已知每个邻居页可以存储9条邻居信息,则可以为第二节点X2生成4个邻居页,4*9=36>35。
在步骤S240中,将目标节点M确定为第二节点X2在当前层的邻居节点之后,还可以将第二节点X2在当前层的邻居节点存储至第二节点X2的邻居页中。具体的,在存储至第二节点X2的邻居页中时,可以将第二节点X2在当前层的邻居节点,存储在第二节点X2的邻居页中与当前层的邻居节点对应的位置处。一种实施方式为,按照从高到低的层顺序,分别将对应层的邻居节点存储至邻居页中。
例如,已知从最高层L2层到最低层L0层,其设定的邻居数目分别为5、10和20。参见图4,该图4是为位于L2层的节点生成的邻居页,其包含4个连续的邻居页。每个邻居页头可以用于存储邻居页编号。邻居页的前5个格子用于存储L2层的5个邻居节点的编号,其后的10个格子用于存储L1层的10个邻居节点的编号,再之后的20个格子用于存储L0层的20个邻居节点的编号。
在图4中,每个格子可以用于存储该节点的编号以及该节点的起始邻居页编号。一个格子代表一个存储空间。这样即可以更容易地确定邻居节点的邻居节点。这样的邻居页也可以称为跳表。
当节点位于L1层时,该节点的邻居页可以用于顺序地存储L1层的10个邻居节点,以及L0层的20个邻居节点。当节点位于L0层时,该节点的邻居页可以用于存储L0层的20个邻居节点。
当采用邻居页存储邻居节点时,还可以在步骤a中将第二节点X2更新为第三节点X3在当前层的邻居节点时,将第二节点X2的起始邻居页添加至第三节点X3的邻居页中。
回顾对步骤S240的说明,在进行节点之间的匹配时,各个节点的向量可以从数据库中获取。在构建向量图索引的过程中,需要进行大量的节点之间的向量匹配,而数据库中还存储了节点的向量字段之外的其他字段。为了进一步地提高构建过程的效率,可以将各个节点的向量从数据库中提取出来。
因此,在一个实施例中,步骤S210,从数据库中依次获取每个节点的步骤,可以包括:
生成数据页,将数据库包含的多个节点的向量存储至数据页中,并从数据页中依次获取每个节点。
在生成数据页时,可以根据数据库包含的节点的总数量,以及每个数据页所能存储的节点条数,生成一定数量的数据页。将数据库包含的节点的向量存储至数据页时,可以将节点的编号和节点的向量对应地存储至数据页中。每次直接从数据页中获取每个节点,能够提高获取节点向量时的速度,进而提高构建索引时的效率。
当层中的已有节点越来越多时,节点之间的邻居关系也越来越稳定。从一个节点的邻居页可以跳转至该节点的邻居节点的邻居页,并且可以持续地在邻居页之间跳转。
根据上述特定,在步骤S240中,从入口节点、入口节点在当前层的邻居节点以及该邻居节点在当前层的邻居节点中,确定与第二节点在向量上最匹配的目标节点的步骤,具体可以按照以下步骤1a~4a的循环过程进行。
步骤1a,将入口节点确定为当前节点。
步骤2a,获取当前节点的邻居页,从当前节点的邻居页中获取当前节点在当前层的各个邻居节点,作为各个第二邻居节点。
步骤3a,从数据页中获取各个第二邻居节点的向量以及当前节点的向量,并与第二节点X2的向量进行匹配,得到一个最匹配邻居节点。
步骤4a,将最匹配邻居节点作为当前节点,返回执行步骤2a。当从步骤2a到步骤4a对应的循环满足收敛条件时,将本次的最匹配邻居节点作为所述目标节点。其中,收敛条件可以为,最匹配邻居节点不发生变化的循环次数达到预设值。每次循环中得到的最匹配邻居节点为一个。
经过上述2a到步骤4a,一级一级地在邻居节点和当前节点中寻找最匹配邻居节点,不断地缩小搜索范围,当最匹配邻居节点不发生变化时,可以认为找到了第二节点X2的最匹配邻居节点。
在步骤S220确定第二节点X2所在的层之后,还在确定第二节点X2所在的层为最高层时,存储第二节点X2,即将位于最高层的各个节点存储起来。这样便于在检索时迅速地找到位于最高层中的节点,利用从最高层到最低层逐层进行检索。当然,不管第二节点X2是否位于最高层,都可以存储该第二节点X2与所在层的对应关系,例如可以存储在标签页中。
在通过上述实施例将向量图索引构建完成时,可以基于该向量图索引进行节点向量的检索过程。下面介绍向量检索阶段的实施例。
图5为本说明书实施例提供的利用向量图索引从PostgreSQL数据库中检索节点向量的方法的一种流程示意图。该方法可以通过计算机执行,具体的,该方法可以通过任何具有计算、处理能力的装置、设备、平台、设备集群来执行。向量图索引将所述数据库中的各个节点划分在从高到低的各个层中,高层中节点的数量小于低层中节点的数量,每一层中的节点在该层以及该层以下的各层中均存在设定数目的邻居,且高层的邻居数目小于低层的邻居数目。该方法包括以下步骤S510~S540。
步骤S510,获取待检索的第一节点X1。待检索的第一节点X1可以理解为,需要从数据库中检索出在向量上与其相似的节点。
步骤S520,基于向量图索引,按照从最高层到最低层的顺序依次将每个层确定为当前层。
步骤S530,针对确定的每一个当前层,按照以下方式确定当前层的目标节点:确定当前层的入口节点,从入口节点、入口节点在当前层的邻居节点以及该邻居节点在当前层的邻居节点中,确定与第一节点X1在向量上最匹配的目标节点M。其中,当当前层是最高层时,从最高层中任意选择节点作为最高层的入口节点。当当前层不是最高层时,基于当前层的上一层确定的目标节点M,确定当前层的入口节点。
步骤S540,基于从最低层中确定出的目标节点M,确定针对第一节点X1检索得到的节点。
处于最高层的各个节点可以预先存储起来。在从最高层中任意选择节点作为最高层的入口节点时,可以从预先存储的处于最高层的各个节点中,任意选择节点作为最高层的入口节点。
在步骤S530中,从入口节点、入口节点在当前层的邻居节点以及邻居节点在当前层的邻居节点中,确定与第一节点X1在向量上最匹配的目标节点M时,可以将各个节点的向量分别与第一节点X1的向量进行匹配,确定向量之间的匹配度,根据匹配度从各个节点中确定目标节点M。各个节点的向量可以从数据库中获取。针对当前层确定的目标节点M可以为一个,也可以为多个。例如,可以在非最低层的各个层中,确定一个目标节点M,在最低层中确定多个目标节点M。
当当前层不是最高层时,可以将当前层的上一层确定的一个目标节点M,确定为当前层的入口节点。
当当前层是最低层时,可以直接将最低层确定的多个目标节点M确定为针对第一节点X1检索得到的节点。
参见图6所示的检索示意图。在从高到低的层L2、L1和L0中,最高层的节点数量最少,节点的邻居数目也最少,因此首先从最高层L2层开始搜索与第一节点X1相近的节点。从存储的位于L2层的节点中选择一个节点作为入口节点,以该入口节点、入口节点在L2层的邻居节点以及邻居节点在L2层的邻居节点中,确定与第一节点X1在向量上最匹配的目标节点M1。在实际操作中,可以确定多个目标节点M1。为了清楚起见,图6中画出了一个目标节点M1,以此作为例子进行介绍。
目标节点M1是L2层中与第一节点X1在向量上最接近的一个节点。接下来直接将该目标节点M1作为L1层的入口节点。如果从L2层确定出多个目标节点M1,则可以从多个目标节点M1中再将向量最接近第一节点X1的节点,作为L1层的入口节点。
在L1层中,当确定L1层的入口节点之后,即可以找到入口节点在L1层的各个邻居节点,因此可以从L1层的入口节点、该入口节点在L1层的邻居节点以及邻居节点在L1层的邻居节点中,确定与第一节点X1在向量上最匹配的目标节点M2。仍旧以目标节点M2为一个节点为例说明。该目标节点M2可能是如图6所示的位于L1层的节点,也可能就是目标节点M1本身。
目标节点M2,是L2层和L1层中所有节点中向量上最接近第一节点X1的节点。直接将目标节点M2作为L0层的入口节点。
在L0层中,从L0层的入口节点、该入口节点在L0层的邻居节点以及邻居节点在L0层的邻居节点中,确定与第一节点X1在向量上最匹配的多个目标节点M3。该多个目标节点M3可以作为检索结果。
针对向量图索引的每个层,其中的节点之间形成了类似于图3所示的邻居关系网络。并且,当层中的节点数量增多,节点的邻居数目增多时,所形成的邻居关系网络会越来越密集。从最高层开始检索,能够以最快的速度缩小检索范围。不同层之间以入口节点为连接纽带,能够使得检索过程从最高层持续地进行到最低层。
由上述内容可知,本实施例中,高层的节点数量小于低层的节点数量,高层的邻居数目小于低层的邻居数目,因此从高层到低层依次进行的检索,能够快速地缩小检索范围,并且预先建立的邻居关系网络能够加快比对过程,确定与第一节点在向量上匹配的节点。因此,本说明书实施例能够提高基于PostgreSQL数据库进行高维向量检索时的检索效率。
在一实施例中,为了便于实施,也为了提高检索时的效率,向量图索引可以包括多个数据页和多个邻居页,数据页用于存储各个节点的向量,邻居页用于存储各个节点在各层中的邻居节点以及该邻居节点的起始邻居页,并且一个节点的所有邻居节点处于一个邻居页中或者连续的多个邻居页中,不同节点的邻居节点位于不同的邻居页中。
在本实施例中,步骤S530,从入口节点、入口节点在当前层的邻居节点以及该邻居节点在当前层的邻居节点中,确定与第一节点X1在向量上最匹配的目标节点M时,具体可以按照以下步骤1b~4b的循环过程进行。
步骤1b,将入口节点确定为当前节点。
步骤2b,基于向量图索引,获取当前节点的邻居页,从当前节点的邻居页中获取当前节点在当前层的各个邻居节点,作为各个第一邻居节点。
步骤3b,从数据页中获取各个第一邻居节点的向量以及当前节点的向量,并与第一节点的向量进行匹配,得到一个最匹配邻居节点。
步骤4b,将最匹配邻居节点作为当前节点,返回执行步骤2b。当从步骤2b到步骤4b对应的循环满足收敛条件时,将本次的最匹配邻居节点作为目标节点M。其中,收敛条件可以为,最匹配邻居节点不发生变化的循环次数达到预设值。
经过上述2b到步骤4b,一级一级地在邻居节点和当前节点中寻找最匹配邻居节点,不断地缩小搜索范围,当最匹配邻居节点不发生变化时,可以认为找到了第一节点X1的最匹配邻居节点。
上述实施方式可以应用在当前层不是最低层的情况下,每一层确定一个目标节点M。
在上述情况下,步骤530中,基于当前层的上一层确定的目标节点M,确定当前层的入口节点时,可以直接将当前层的上一层确定的一个目标节点M,确定为当前层的入口节点。
当然,从当前层中确定一个目标节点的方式也可以应用在最低层中。但是,为了检索得到多个相似节点,在最低层中进行检索时,可以按照以下实施方式检索得到多个目标节点。
在步骤S530中,从入口节点、入口节点在当前层的邻居节点以及邻居节点在当前层的邻居节点中,确定与第一节点X1在向量上最匹配的目标节点M时,具体可以按照以下步骤1c~4c的循环过程进行。
步骤1c,将入口节点确定为当前节点。
步骤2c,基于向量图索引,获取当前节点的邻居页,从当前节点的邻居页中获取当前节点在当前层的各个第一邻居节点。
步骤3c,从数据页中获取各个第一邻居节点的向量以及当前节点的向量,并与第一节点X1的向量进行匹配,按照向量的匹配度大小将各个第一邻居节点和当前节点加入匹配队列中。匹配队列的长度可以是预先设定的,也可以是不固定的。
步骤4c,按照匹配度从大到小的顺序,将匹配队列中的节点依次作为当前节点,返回执行步骤2c,当匹配队列满足收敛条件时,将匹配队列中匹配度最大的第一数量个节点作为目标节点M。
在步骤2c到4c的过程不断地循环执行时,匹配队列中的节点可能会被更新。当循环进行到一定程度时,匹配队列中向量匹配度最大的第一数量个节点就不发生变化了。当这种不变化持续一定数量的循环之后,可以认为达到收敛条件。
在步骤S540中,基于从最低层中确定出的目标节点,确定针对第一节点检索得到的节点时,可以基于从最低层中确定出的第一数量个目标节点M,确定针对第一节点X1检索得到的节点。例如,在仅仅针对向量字段进行检索时,可以直接从最低层中确定出的第一数量个目标节点M,确定为针对第一节点X1检索得到的节点。
在实际检索中,检索条件还可以包括针对向量字段之外的其他字段的检索。本说明书实施例还提供了结合向量字段和其他字段进行检索的检索方法。
数据库还包括各个节点的向量之外的第一字段,例如第一字段可以为地域字段、年龄字段或者年份字段等非向量字段,这些字段也可以是文本字段。在步骤S510获取待检索的第一节点X1时,还可以获取针对第一字段的限制字段值条件。限制字段条件可以包括,第一字段的值在某个范围内,或者第一字段的值等于预设的某个值。例如,第一字段为城市时,字段值可以限制为北京;第一字段为年份时,字段值可以限制为2015年—2020年。
在步骤S540中,基于从最低层中确定出的第一数量个目标节点M,确定针对第一节点X1检索得到的节点时,具体可以包括:
从数据库中获取最低层的第一数量个目标节点M的第一字段值,基于各个第一字段值,从第一数量个目标节点中筛选出满足限制字段值条件的节点,得到针对第一节点X1检索得到的节点。
如果筛选出的满足限制字段值条件的节点数量比较少,还可以从匹配队列的第一数量个目标节点M中去除不符合限制字段值条件的节点,继续进行上述步骤2c到4c所示的循环,更新匹配队列,直至检索得到满足数量要求、向量字段要求以及限制字段值要求的节点。
上述内容对本说明书的特定实施例进行了描述,其他实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行,并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要按照示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的,或者可能是有利的。
图7为实施例提供的利用向量图索引从PostgreSQL数据库中检索节点向量的装置的一种示意性框图。该装置可以部署在计算机中。其中,数据库包含多个节点的向量,向量图索引将数据库中的各个节点划分在从高到低的各个层中,高层中节点的数量小于低层中节点的数量,每一层中的节点在该层以及该层以下的各层中均存在设定数目的邻居,且高层的邻居数目小于低层的邻居数目,节点的向量与其邻居节点的向量之间的匹配度大于预设阈值。该装置实施例与图5所示方法实施例相对应,该装置700包括:
待检索获取模块710,配置为获取待检索的第一节点;
目标检索模块720,配置为基于向量图索引,按照从最高层到最低层的顺序依次将每个层确定为当前层,并针对确定的每一个当前层,按照以下方式确定当前层的目标节点:确定当前层的入口节点,从入口节点、入口节点在当前层的邻居节点以及该邻居节点在当前层的邻居节点中,确定与第一节点在向量上最匹配的目标节点;其中,当当前层是最高层时,从最高层中任意选择节点作为最高层的入口节点;当当前层不是最高层时,基于当前层的上一层确定的目标节点,确定当前层的入口节点;
节点确定模块730,配置为基于从最低层中确定出的目标节点,确定针对第一节点检索得到的节点。
在一种实施方式中,向量图索引包括多个数据页和多个邻居页,数据页用于存储各个节点的向量,邻居页用于存储各个节点在各层中的邻居节点以及该邻居节点的起始邻居页,一个节点的所有邻居节点处于一个邻居页中或者连续的多个邻居页中,不同节点的邻居节点位于不同的邻居页中。
在一种实施方式中,目标检索模块720,从入口节点、入口节点在当前层的邻居节点以及该邻居节点在当前层的邻居节点中,确定与第一节点在向量上最匹配的目标节点时,包括:
将入口节点确定为当前节点;
基于向量图索引,获取当前节点的邻居页,从当前节点的邻居页中获取当前节点在当前层的各个第一邻居节点;
从数据页中获取各个第一邻居节点的向量以及当前节点的向量,并与第一节点的向量进行匹配,得到一个最匹配邻居节点;
将最匹配邻居节点作为当前节点,返回执行基于向量图索引,获取当前节点的邻居页,当循环满足收敛条件时,将本次的最匹配邻居节点作为目标节点。
在一种实施方式中,目标检索模块720,基于当前层的上一层确定的目标节点,确定当前层的入口节点时,包括:
将当前层的上一层确定的一个目标节点,确定为当前层的入口节点。
在一种实施方式中,目标检索模块720,从入口节点、入口节点在当前层的邻居节点以及该邻居节点在当前层的邻居节点中,确定与第一节点在向量上最匹配的目标节点时,包括:
将入口节点确定为当前节点;
基于向量图索引,获取当前节点的邻居页,从当前节点的邻居页中获取当前节点在当前层的各个第一邻居节点;
从数据页中获取各个第一邻居节点的向量以及当前节点的向量,并与第一节点的向量进行匹配,按照向量的匹配度大小将各个第一邻居节点和当前节点加入匹配队列中;
按照匹配度从大到小的顺序,将匹配队列中的节点依次作为当前节点,返回执行基于向量图索引,获取当前节点的邻居页,当匹配队列满足收敛条件时,将匹配队列中匹配度最大的第一数量个节点作为目标节点。
在一种实施方式中,节点确定模块730具体配置为:
基于从最低层中确定出的第一数量个目标节点,确定针对第一节点检索得到的节点。
在一种实施方式中,上述数据库还可以包括各个节点的向量之外的第一字段。装置700还包括:
条件获取模块(图中未示出),配置为在获取待检索的第一节点时,获取针对第一字段的限制字段值条件;
节点确定模块730,具体配置为:
从数据库中获取最低层的第一数量个目标节点的第一字段值;
基于各个第一字段值,从第一数量个目标节点中筛选出满足限制字段值条件的节点,得到针对第一节点检索得到的节点。
在一种实施方式中,目标检索模块720,从最高层中任意选择节点作为最高层的入口节点时,包括:
从预先存储的处于最高层的各个节点中,任意选择节点作为最高层的入口节点。
图8为本说明书实施例提供的用于PostgreSQL数据库的节点向量检索的向量图索引构建装置的一种示意性框图。该装置部署在计算机中。其中,数据库包含多个节点的向量,向量图索引包括从高到低的各个层,各个层对应的邻居数目为设定数目,且高层的邻居数目小于低层的邻居数目。该装置实施例与图2所示方法实施例相对应,该装置800包括:
节点获取模块810,配置为从数据库中依次获取每个节点;
节点层确定模块820,配置为针对获取的任意一个第二节点,确定第二节点所在的层,使其满足高层中节点的数量小于低层中节点的数量的条件;
邻居确定模块830,配置为将第二节点所在的层以及该层以下的各层中的任意一层作为当前层,按照以下方式确定第二节点在当前层中的邻居节点:当当前层的已有节点的数目大于当前层设定的邻居数目时,从当前层中任意选择一个已有节点作为当前层的入口节点,从入口节点、入口节点在当前层的邻居节点以及该邻居节点在当前层的邻居节点中,确定与第二节点在向量上最匹配的目标节点;将目标节点确定为第二节点在当前层的邻居节点。
在一种实施方式中,邻居确定模块830还配置为:
当当前层的已有节点的数目不大于当前层设定的邻居数目时,将当前层的已有节点确定为第二节点在当前层的邻居节点。
在一种实施方式中,装置800还包括:
邻居更新模块(图中未示出),配置为在将目标节点确定为第二节点在当前层的邻居节点之后,将第二节点在当前层的邻居节点作为第三节点,基于第二节点更新第三节点在当前层的邻居节点。
在一种实施方式中,邻居更新模块,基于第二节点更新第三节点在当前层的邻居节点时,包括:
当第三节点在当前层的邻居节点的数目小于当前层设定的邻居数目时,直接将第二节点作为第三节点在当前层的邻居节点;
当第三节点在当前层的邻居节点的数目等于当前层设定的邻居数目时,如果第二节点与第三节点在向量上的匹配度,大于第三节点在当前层的某个邻居节点与第三节点在向量上的匹配度,则用第二节点替换某个邻居节点。
在一种实施方式中,装置800还包括:
邻居页生成模块(图中未示出),配置为在确定第二节点所在的层之后,根据第二节点所在的层以及该层以下各层设定的邻居数目,生成第二节点的邻居页;
邻居存储模块(图中未示出),配置为在将目标节点确定为第二节点在当前层的邻居节点之后,将第二节点在当前层的邻居节点存储至第二节点的邻居页中;
邻居页更新模块(图中未示出),配置为将第二节点在当前层的邻居节点作为第三节点,基于第二节点,更新第三节点在当前层的邻居节点;当将第二节点更新为第三节点在当前层的邻居节点时,将第二节点的起始邻居页添加至第三节点的邻居页中。
在一种实施方式中,节点获取模块810具体配置为:
生成数据页,将数据库包含的多个节点的向量存储至数据页中,并从数据页中依次获取每个节点;
邻居确定模块830,从入口节点、入口节点在当前层的邻居节点以及该邻居节点在当前层的邻居节点中,确定与第二节点在向量上最匹配的目标节点时,包括:
将入口节点确定为当前节点;
获取当前节点的邻居页,从当前节点的邻居页中获取当前节点在当前层的各个第二邻居节点;
从数据页中获取各个第二邻居节点的向量以及当前节点的向量,并与第二节点的向量进行匹配,得到一个最匹配邻居节点;
将最匹配邻居节点作为当前节点,返回执行获取当前节点的邻居页,当循环满足收敛条件时,将本次的最匹配邻居节点作为目标节点。
在一种实施方式中,邻居存储模块,将第二节点在当前层的邻居节点存储至第二节点的邻居页中时,包括:
将第二节点在当前层的邻居节点,存储在第二节点的邻居页中与当前层的邻居节点对应的位置处。
在一种实施方式中,装置800还包括:
节点存储模块(图中未示出),配置为在确定第二节点所在的层之后,当确定第二节点所在的层为最高层时,存储第二节点。
上述每个装置实施例与方法实施例相对应,具体说明可以参见方法实施例部分的描述,此处不再赘述。装置实施例是基于对应的方法实施例得到,与对应的方法实施例具有同样的技术效果,具体说明可参见对应的方法实施例。
本说明书实施例提供了一种计算机可读存储介质,其上存储有计算机程序,当计算机程序在计算机中执行时,令计算机执行图1至图6中任一项所述的方法。
本说明书实施例提供了一种计算设备,包括存储器和处理器,存储器中存储有可执行代码,处理器执行可执行代码时,实现图1至图图6中任一项所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于存储介质和计算设备实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明实施例的目的、技术方案和有益效果进行了进一步的详细说明。所应理解的是,以上所述仅为本发明实施例的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (29)
1.一种利用向量图索引从PostgreSQL数据库中检索节点向量的方法,通过计算机执行;所述数据库包含多个节点的向量;所述向量图索引将所述数据库中的各个节点划分在从高到低的各个层中,高层中节点的数量小于低层中节点的数量,每一层中的节点在该层以及该层以下的各层中均存在设定数目的邻居,且高层的邻居数目小于低层的邻居数目;所述向量图索引包括若干数据页和若干邻居页,所述数据页用于存储若干节点的向量,所述邻居页用于存储若干节点在各层中的邻居节点以及该邻居节点的起始邻居页;所述方法包括:
获取待检索的第一节点;
基于所述向量图索引,按照从最高层到最低层的顺序依次将每个层确定为当前层,并针对确定的每一个当前层,按照以下方式确定所述当前层的目标节点:确定所述当前层的入口节点,从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第一节点在向量上最匹配的目标节点;其中,当所述当前层是最高层时,从所述最高层中任意选择节点作为所述最高层的入口节点;当所述当前层不是最高层时,基于所述当前层的上一层确定的目标节点,确定所述当前层的入口节点;
基于从最低层中确定出的目标节点,确定针对所述第一节点检索得到的节点。
2.根据权利要求1所述的方法,一个节点的所有邻居节点处于一个邻居页中或者连续的多个邻居页中,不同节点的邻居节点位于不同的邻居页中。
3.根据权利要求2所述的方法,所述从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第一节点在向量上最匹配的目标节点的步骤,包括:
将所述入口节点确定为当前节点;
基于所述向量图索引,获取所述当前节点的邻居页,从所述当前节点的邻居页中获取所述当前节点在所述当前层的各个第一邻居节点;
从所述数据页中获取各个第一邻居节点的向量以及所述当前节点的向量,并与所述第一节点的向量进行匹配,得到一个最匹配邻居节点;
将所述最匹配邻居节点作为当前节点,返回执行所述基于所述向量图索引,获取所述当前节点的邻居页的步骤,当循环满足收敛条件时,将本次的最匹配邻居节点作为所述目标节点。
4.根据权利要求3所述的方法,所述基于所述当前层的上一层确定的目标节点,确定所述当前层的入口节点的步骤,包括:
将所述当前层的上一层确定的一个目标节点,确定为所述当前层的入口节点。
5.根据权利要求2所述的方法,所述从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第一节点在向量上最匹配的目标节点的步骤,包括:
将所述入口节点确定为当前节点;
基于所述向量图索引,获取所述当前节点的邻居页,从所述当前节点的邻居页中获取所述当前节点在所述当前层的各个第一邻居节点;
从所述数据页中获取各个第一邻居节点的向量以及所述当前节点的向量,并与所述第一节点的向量进行匹配,按照向量的匹配度大小将所述各个第一邻居节点和所述当前节点加入匹配队列中;
按照匹配度从大到小的顺序,将所述匹配队列中的节点依次作为当前节点,返回执行所述基于所述向量图索引,获取所述当前节点的邻居页的步骤,当所述匹配队列满足收敛条件时,将所述匹配队列中匹配度最大的第一数量个节点作为所述目标节点。
6.根据权利要求5所述的方法,所述基于从最低层中确定出的目标节点,确定针对所述第一节点检索得到的节点的步骤,包括:
基于从最低层中确定出的第一数量个目标节点,确定针对所述第一节点检索得到的节点。
7.根据权利要求6所述的方法,所述数据库还包括各个节点的向量之外的第一字段;在获取待检索的第一节点时,还包括:
获取针对所述第一字段的限制字段值条件;
所述基于从最低层中确定出的第一数量个目标节点,确定针对所述第一节点检索得到的节点的步骤,包括:
从所述数据库中获取最低层的第一数量个目标节点的第一字段值;
基于各个第一字段值,从所述第一数量个目标节点中筛选出满足所述限制字段值条件的节点,得到针对所述第一节点检索得到的节点。
8.根据权利要求1所述的方法,所述从所述最高层中任意选择节点作为所述最高层的入口节点的步骤,包括:
从预先存储的处于最高层的各个节点中,任意选择节点作为所述最高层的入口节点。
9.一种用于PostgreSQL数据库的节点向量检索的向量图索引构建方法,通过计算机执行,所述数据库包含多个节点的向量;所述向量图索引包括从高到低的各个层,各个层对应的邻居数目为设定数目,且高层的邻居数目小于低层的邻居数目;所述向量图索引包括若干数据页和若干邻居页,所述数据页用于存储若干节点的向量,所述邻居页用于存储若干节点在各层中的邻居节点以及该邻居节点的起始邻居页;所述方法包括:
从所述数据库中依次获取每个节点;
针对获取的任意一个第二节点,确定所述第二节点所在的层,使其满足高层中节点的数量小于低层中节点的数量的条件;
将所述第二节点所在的层以及该层以下的各层中的任意一层作为当前层,按照以下方式确定所述第二节点在所述当前层中的邻居节点:
当所述当前层的已有节点的数目大于所述当前层设定的邻居数目时,从所述当前层中任意选择一个已有节点作为所述当前层的入口节点,从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第二节点在向量上最匹配的目标节点;将所述目标节点确定为所述第二节点在所述当前层的邻居节点。
10.根据权利要求9所述的方法,当所述当前层的已有节点的数目不大于所述当前层设定的邻居数目时,还包括:
将所述当前层的已有节点确定为所述第二节点在所述当前层的邻居节点。
11.根据权利要求10所述的方法,在将所述目标节点确定为所述第二节点在所述当前层的邻居节点之后,还包括:
将所述第二节点在所述当前层的邻居节点作为第三节点,基于所述第二节点更新所述第三节点在所述当前层的邻居节点。
12.根据权利要求11所述的方法,所述基于所述第二节点更新所述第三节点在所述当前层的邻居节点的步骤,包括:
当所述第三节点在所述当前层的邻居节点的数目小于所述当前层设定的邻居数目时,直接将所述第二节点作为所述第三节点在所述当前层的邻居节点;
当所述第三节点在所述当前层的邻居节点的数目等于所述当前层设定的邻居数目时,如果所述第二节点与所述第三节点在向量上的匹配度,大于所述第三节点在所述当前层的某个邻居节点与所述第三节点在向量上的匹配度,则用所述第二节点替换所述某个邻居节点。
13.根据权利要求9所述的方法,在确定所述第二节点所在的层之后,还包括:
根据所述第二节点所在的层以及该层以下各层设定的邻居数目,生成所述第二节点的邻居页;
在将所述目标节点确定为所述第二节点在所述当前层的邻居节点之后,还包括:
将所述第二节点在所述当前层的邻居节点存储至所述第二节点的邻居页中;
将所述第二节点在所述当前层的邻居节点作为第三节点,基于所述第二节点更新所述第三节点在所述当前层的邻居节点;
当将所述第二节点更新为所述第三节点在所述当前层的邻居节点时,将所述第二节点的起始邻居页添加至所述第三节点的邻居页中。
14.根据权利要求13所述的方法,所述从所述数据库中依次获取每个节点的步骤,包括:
生成数据页,将所述数据库包含的多个节点的向量存储至所述数据页中,并从所述数据页中依次获取每个节点;
所述从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第二节点在向量上最匹配的目标节点的步骤,包括:
将所述入口节点确定为当前节点;
获取所述当前节点的邻居页,从所述当前节点的邻居页中获取所述当前节点在所述当前层的各个第二邻居节点;
从所述数据页中获取各个第二邻居节点的向量以及所述当前节点的向量,并与所述第二节点的向量进行匹配,得到一个最匹配邻居节点;
将所述最匹配邻居节点作为当前节点,返回执行所述获取所述当前节点的邻居页的步骤,当循环满足收敛条件时,将本次的最匹配邻居节点作为所述目标节点。
15.根据权利要求13所述的方法,所述将所述第二节点在所述当前层的邻居节点存储至所述第二节点的邻居页中的步骤,包括:
将所述第二节点在所述当前层的邻居节点,存储在所述第二节点的邻居页中与所述当前层的邻居节点对应的位置处。
16.根据权利要求9所述的方法,在确定所述第二节点所在的层之后,还包括:
当确定所述第二节点所在的层为最高层时,存储所述第二节点。
17.一种利用向量图索引从PostgreSQL数据库中检索节点向量的装置,部署在计算机中;所述数据库包含多个节点的向量;所述向量图索引将所述数据库中的各个节点划分在从高到低的各个层中,高层中节点的数量小于低层中节点的数量,每一层中的节点在该层以及该层以下的各层中均存在设定数目的邻居,且高层的邻居数目小于低层的邻居数目,节点的向量与其邻居节点的向量之间的匹配度大于预设阈值;所述向量图索引包括若干数据页和若干邻居页,所述数据页用于存储若干节点的向量,所述邻居页用于存储若干节点在各层中的邻居节点以及该邻居节点的起始邻居页;所述装置包括:
待检索获取模块,配置为获取待检索的第一节点;
目标检索模块,配置为基于所述向量图索引,按照从最高层到最低层的顺序依次将每个层确定为当前层,并针对确定的每一个当前层,按照以下方式确定所述当前层的目标节点:确定所述当前层的入口节点,从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第一节点在向量上最匹配的目标节点;其中,当所述当前层是最高层时,从所述最高层中任意选择节点作为所述最高层的入口节点;当所述当前层不是最高层时,基于所述当前层的上一层确定的目标节点,确定所述当前层的入口节点;
节点确定模块,配置为基于从最低层中确定出的目标节点,确定针对所述第一节点检索得到的节点。
18.根据权利要求17所述的装置,一个节点的所有邻居节点处于一个邻居页中或者连续的多个邻居页中,不同节点的邻居节点位于不同的邻居页中。
19.根据权利要求18所述的装置,所述目标检索模块,从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第一节点在向量上最匹配的目标节点时,包括:
将所述入口节点确定为当前节点;
基于所述向量图索引,获取所述当前节点的邻居页,从所述当前节点的邻居页中获取所述当前节点在所述当前层的各个第一邻居节点;
从所述数据页中获取各个第一邻居节点的向量以及所述当前节点的向量,并与所述第一节点的向量进行匹配,得到一个最匹配邻居节点;
将所述最匹配邻居节点作为当前节点,返回执行所述基于所述向量图索引,获取所述当前节点的邻居页,当循环满足收敛条件时,将本次的最匹配邻居节点作为所述目标节点。
20.根据权利要求18所述的装置,所述目标检索模块,从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第一节点在向量上最匹配的目标节点时,包括:
将所述入口节点确定为当前节点;
基于所述向量图索引,获取所述当前节点的邻居页,从所述当前节点的邻居页中获取所述当前节点在所述当前层的各个第一邻居节点;
从所述数据页中获取各个第一邻居节点的向量以及所述当前节点的向量,并与所述第一节点的向量进行匹配,按照向量的匹配度大小将所述各个第一邻居节点和所述当前节点加入匹配队列中;
按照匹配度从大到小的顺序,将所述匹配队列中的节点依次作为当前节点,返回执行所述基于所述向量图索引,获取所述当前节点的邻居页,当所述匹配队列满足收敛条件时,将所述匹配队列中匹配度最大的第一数量个节点作为所述目标节点。
21.根据权利要求20所述的装置,所述节点确定模块,具体配置为:
基于从最低层中确定出的第一数量个目标节点,确定针对所述第一节点检索得到的节点。
22.根据权利要求21所述的装置,所述数据库还包括各个节点的向量之外的第一字段;所述装置还包括:
条件获取模块,配置为在获取待检索的第一节点时,获取针对所述第一字段的限制字段值条件;
所述节点确定模块,具体配置为:
从所述数据库中获取最低层的第一数量个目标节点的第一字段值;
基于各个第一字段值,从所述第一数量个目标节点中筛选出满足所述限制字段值条件的节点,得到针对所述第一节点检索得到的节点。
23.一种用于PostgreSQL数据库的节点向量检索的向量图索引构建装置,部署在计算机中,所述数据库包含多个节点的向量;所述向量图索引包括从高到低的各个层,各个层对应的邻居数目为设定数目,且高层的邻居数目小于低层的邻居数目;所述向量图索引包括若干数据页和若干邻居页,所述数据页用于存储若干节点的向量,所述邻居页用于存储若干节点在各层中的邻居节点以及该邻居节点的起始邻居页;所述装置包括:
节点获取模块,配置为从所述数据库中依次获取每个节点;
节点层确定模块,配置为针对获取的任意一个第二节点,确定所述第二节点所在的层,使其满足高层中节点的数量小于低层中节点的数量的条件;
邻居确定模块,配置为将所述第二节点所在的层以及该层以下的各层中的任意一层作为当前层,按照以下方式确定所述第二节点在所述当前层中的邻居节点:当所述当前层的已有节点的数目大于所述当前层设定的邻居数目时,从所述当前层中任意选择一个已有节点作为所述当前层的入口节点,从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第二节点在向量上最匹配的目标节点;将所述目标节点确定为所述第二节点在所述当前层的邻居节点。
24.根据权利要求23所述的装置,所述邻居确定模块,还配置为:
当所述当前层的已有节点的数目不大于所述当前层设定的邻居数目时,将所述当前层的已有节点确定为所述第二节点在所述当前层的邻居节点。
25.根据权利要求24所述的装置,还包括:
邻居更新模块,配置为在将所述目标节点确定为所述第二节点在所述当前层的邻居节点之后,将所述第二节点在所述当前层的邻居节点作为第三节点,基于所述第二节点更新所述第三节点在所述当前层的邻居节点。
26.根据权利要求23所述的装置,还包括:
邻居页生成模块,配置为在确定所述第二节点所在的层之后,根据所述第二节点所在的层以及该层以下各层设定的邻居数目,生成所述第二节点的邻居页;
邻居存储模块,配置为在将所述目标节点确定为所述第二节点在所述当前层的邻居节点之后,将所述第二节点在所述当前层的邻居节点存储至所述第二节点的邻居页中;
邻居页更新模块,配置为将所述第二节点在所述当前层的邻居节点作为第三节点,基于所述第二节点,更新所述第三节点在所述当前层的邻居节点;当将所述第二节点更新为所述第三节点在所述当前层的邻居节点时,将所述第二节点的起始邻居页添加至所述第三节点的邻居页中。
27.根据权利要求26所述的装置,所述节点获取模块,具体配置为:
生成数据页,将所述数据库包含的多个节点的向量存储至所述数据页中,并从所述数据页中依次获取每个节点;
所述邻居确定模块,从所述入口节点、所述入口节点在所述当前层的邻居节点以及该邻居节点在所述当前层的邻居节点中,确定与所述第二节点在向量上最匹配的目标节点时,包括:
将所述入口节点确定为当前节点;
获取所述当前节点的邻居页,从所述当前节点的邻居页中获取所述当前节点在所述当前层的各个第二邻居节点;
从所述数据页中获取各个第二邻居节点的向量以及所述当前节点的向量,并与所述第二节点的向量进行匹配,得到一个最匹配邻居节点;
将所述最匹配邻居节点作为当前节点,返回执行所述获取所述当前节点的邻居页,当循环满足收敛条件时,将本次的最匹配邻居节点作为所述目标节点。
28.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-16中任一项所述的方法。
29.一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-16中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010136299.9A CN111400314B (zh) | 2020-03-02 | 2020-03-02 | 利用向量图索引从数据库中检索节点向量的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010136299.9A CN111400314B (zh) | 2020-03-02 | 2020-03-02 | 利用向量图索引从数据库中检索节点向量的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111400314A CN111400314A (zh) | 2020-07-10 |
CN111400314B true CN111400314B (zh) | 2023-10-27 |
Family
ID=71436062
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010136299.9A Active CN111400314B (zh) | 2020-03-02 | 2020-03-02 | 利用向量图索引从数据库中检索节点向量的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111400314B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102411632A (zh) * | 2011-12-27 | 2012-04-11 | 北京人大金仓信息技术股份有限公司 | 基于链表的内存数据库页式存储方法 |
CN110413848A (zh) * | 2019-07-19 | 2019-11-05 | 上海赜睿信息科技有限公司 | 一种数据检索方法、电子设备和计算机可读存储介质 |
CN110659375A (zh) * | 2019-09-20 | 2020-01-07 | 中国科学技术大学 | 哈希模型训练方法、相似对象检索方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10157239B2 (en) * | 2013-12-23 | 2018-12-18 | Oracle International Corporation | Finding common neighbors between two nodes in a graph |
CN104809134B (zh) * | 2014-01-27 | 2018-03-09 | 国际商业机器公司 | 检测数据序列中的异常子序列的方法和设备 |
US11797838B2 (en) * | 2018-03-13 | 2023-10-24 | Pinterest, Inc. | Efficient convolutional network for recommender systems |
-
2020
- 2020-03-02 CN CN202010136299.9A patent/CN111400314B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102411632A (zh) * | 2011-12-27 | 2012-04-11 | 北京人大金仓信息技术股份有限公司 | 基于链表的内存数据库页式存储方法 |
CN110413848A (zh) * | 2019-07-19 | 2019-11-05 | 上海赜睿信息科技有限公司 | 一种数据检索方法、电子设备和计算机可读存储介质 |
CN110659375A (zh) * | 2019-09-20 | 2020-01-07 | 中国科学技术大学 | 哈希模型训练方法、相似对象检索方法及装置 |
Non-Patent Citations (1)
Title |
---|
李秋珍.量化编码的分层可通航小世界图算法.计算机工程与科学.2019,第41卷(第4期),第【0618】-【0625】页. * |
Also Published As
Publication number | Publication date |
---|---|
CN111400314A (zh) | 2020-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5193518B2 (ja) | パターン探索装置及びその方法 | |
US7627537B2 (en) | Score result reuse for Bayesian network structure learning | |
US9647927B2 (en) | Computer-implemented K-shortest path finding method | |
CN110413848B (zh) | 一种数据检索方法、电子设备和计算机可读存储介质 | |
CN108027816B (zh) | 数据管理***、数据管理方法及记录介质 | |
CN113342403A (zh) | 信息处理方法、信息处理***和计算机可读记录介质 | |
US8422802B2 (en) | Robust large-scale visual codebook construction | |
JP3152279B2 (ja) | 準最適割当決定方法 | |
CN112015898A (zh) | 基于标签树的模型训练、文本标签确定方法及装置 | |
CN112434031A (zh) | 一种基于信息熵的不确定高效用模式挖掘方法 | |
Romero Ruiz et al. | Memetic algorithm with hungarian matching based crossover and diversity preservation | |
CN111400314B (zh) | 利用向量图索引从数据库中检索节点向量的方法及装置 | |
JP6705764B2 (ja) | 生成装置、生成方法、及び生成プログラム | |
JP2019144780A (ja) | 生成装置、生成方法、及び生成プログラム | |
US9665538B2 (en) | Solving satisfiability problems through search | |
CN111309984B (zh) | 利用索引从数据库中进行节点向量检索的方法及装置 | |
Chen et al. | Switching poisson gamma dynamical systems | |
US7542606B2 (en) | Use of Hausdorff distances in the earth mover linear program | |
CN114399027A (zh) | 利用神经网络进行序列处理的方法及序列处理的装置 | |
Rachkovskij | Fast similarity search for graphs by edit distance | |
JP7037048B2 (ja) | 探索プログラムおよび探索方法 | |
CN112598153A (zh) | 一种基于天牛须搜索算法的旅行商问题求解方法 | |
Gallas et al. | Negative relevance feedback for improving retrieval in large-scale image collections | |
WO2017072717A1 (en) | Learning of the structure of bayesian networks from a complete data set | |
JP2011150404A (ja) | 情報検索装置、情報検索方法 |
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 |