我構建的應用程序可存儲數百萬個浮點向量,每個向量具有〜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