2011-10-05 62 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算法或简单的差异长度)。这真的很慢。 –