我构建的应用程序可存储数百万个浮点向量,每个向量具有〜100个维度。使用查询向量,我需要通过这些向量搜索k个最近的(欧几里德)匹配。运行时间必须快于扫描所有数百万个载体。所谓“向量”,我的意思是在线性代数项中列出大约100个浮点数,即[0.3, -15.7, 0.004, 457.1, ...]
通过组合地理空间索引进行多维搜索
我知道像MySQL和MongoDB这样的数据库提供了可用于2维的空间索引。有没有一种方法可以使用复合索引来适应更多维度?或者还有其他数据存储支持更多维度的索引吗?
我构建的应用程序可存储数百万个浮点向量,每个向量具有〜100个维度。使用查询向量,我需要通过这些向量搜索k个最近的(欧几里德)匹配。运行时间必须快于扫描所有数百万个载体。所谓“向量”,我的意思是在线性代数项中列出大约100个浮点数,即[0.3, -15.7, 0.004, 457.1, ...]
通过组合地理空间索引进行多维搜索
我知道像MySQL和MongoDB这样的数据库提供了可用于2维的空间索引。有没有一种方法可以使用复合索引来适应更多维度?或者还有其他数据存储支持更多维度的索引吗?
如果您正在寻找完全匹配,100个维度是很多。如果您准备好进行大致匹配,那么就有一类局部敏感哈希方案。您可以为您的数据集生成散列值或一系列散列值,并使用普通数据库或二维空间数据库根据散列值查找匹配项。一个参考是http://people.csail.mit.edu/indyk/p117-andoni.pdf。
我可以涉及到你的痛苦。 MongoDB中没有R-Tree类型的实现,我不确定在SQL DB中是否有一个。我发现下面的链接有用:
当你说“载体”和“最近”你能准确定义是什么意思? - 我的理解是矢量只是一个方向,因此不适用于空间索引。你是否假设所有的矢量都是从原点开始的,“最近的”是用两个给定矢量的端点之间的距离来衡量的? – GHC 2013-05-10 19:21:19
我猜想在“向量作为元素序列”和“向量作为空间帧中的方向”这两个含义之间,他的确意味着“矢量作为空间帧中的位置” – 2013-05-10 19:34:22
问题澄清。让我知道,如果这仍然没有说话。 – muudscope 2013-05-10 19:34:44