2011-10-05 64 views
0

我有場A, B, C, D並且需要A,B,C,D衣櫃記錄這一載體MY = (2, 3, 4, 5)查找與最接近這些值記錄我有

我的每個查詢都不同。

,想到的唯一的事情是由abs(A - MY.A) + abs(B - MY.B) + ...某種方式排序每次。但我認爲它應該工作得很慢。

現在我想使用的MongoDB。如果你認爲MongoDB不是最好的工具 - 我很樂意聽到任何建議。

地理位置 - 它只需要2個座標。 我只是數字的矢量。它不是空間的。 ABCD介於1和10之間。 我的意思是我需要找到其他矢量來最小化K = | MY-OTHER |。

預先感謝。

新鮮想法

查詢中的所有記錄,其中A是在[A - S,A + S],B在[B - S,B + S] ..然後使用一些邏輯對它們進行排序。 s - 基於記錄數量的常量,選擇它使查詢返回多達10-20條記錄。

回答

0

目前尚不清楚你的載體是否實際空間座標或僅僅是數據的載體。

如果他們是真正的數字,你可以使用類似的餘弦相似度計算兩個向量之間的相似性。 http://en.wikipedia.org/wiki/Cosine_similarity

如果他們是空間座標,你可以使用空間索引像其他海報建議。我在R-Tree空間索引方面取得了很好的成功,它以多種語言實現,並且允許您執行各種空間查詢。

+0

我在我的問題中指定了詳細信息。這很好,如果它是我自己的內存數據庫。但是,如果它不是(並且不是) - 我必須檢查每個記錄是否接近(通過任何Cosline算法或簡單的差異長度)。這真的很慢。 –