2013-05-10 140 views
4

我构建的应用程序可存储数百万个浮点向量,每个向量具有〜100个维度。使用查询向量,我需要通过这些向量搜索k个最近的(欧几里德)匹配。运行时间必须快于扫描所有数百万个载体。所谓“向量”,我的意思是在线性代数项中列出大约100个浮点数,即[0.3, -15.7, 0.004, 457.1, ...]通过组合地理空间索引进行多维搜索

我知道像MySQL和MongoDB这样的数据库提供了可用于2维的空间索引。有没有一种方法可以使用复合索引来适应更多维度?或者还有其他数据存储支持更多维度的索引吗?

+1

当你说“载体”和“最近”你能准确定义是什么意思? - 我的理解是矢量只是一个方向,因此不适用于空间索引。你是否假设所有的矢量都是从原点开始的,“最近的”是用两个给定矢量的端点之间的距离来衡量的? – GHC 2013-05-10 19:21:19

+0

我猜想在“向量作为元素序列”和“向量作为空间帧中的方向”这两个含义之间,他的确意味着“矢量作为空间帧中的位置” – 2013-05-10 19:34:22

+0

问题澄清。让我知道,如果这仍然没有说话。 – muudscope 2013-05-10 19:34:44

回答

3

如果您正在寻找完全匹配,100个维度是很多。如果您准备好进行大致匹配,那么就有一类局部敏感哈希方案。您可以为您的数据集生成散列值或一系列散列值,并使用普通数据库或二维空间数据库根据散列值查找匹配项。一个参考是http://people.csail.mit.edu/indyk/p117-andoni.pdf