查找最接近我的值的记录

时间:2011-10-05 20:25:48

标签: mongodb

我有字段A, B, C, D,需要A,B,C,D壁橱的记录到此向量MY = (2, 3, 4, 5)

MY在每个查询中都有所不同。

唯一想到的是每次按abs(A - MY.A) + abs(B - MY.B) + ...排序。但我认为它应该工作得很慢。

现在我正在考虑使用MongoDB。如果你说MongoDB不是最好的工具 - 我会很高兴听到任何建议。

GeoLocation - 它只需要2个坐标。 我只是数字的向量。它不是空间的。 ABCD介于1到10之间。 我的意思是我需要找到矢量OTHER以最小化K = | MY-OTHER |。

事先谢谢。

新主意

查询A在[A - s,A + s]中的所有记录,在[B - s,B + s]中查询B,然后使用某种逻辑对它们进行排序。 s - 基于记录数量的常量,选择使查询返回最多10-20条记录。

1 个答案:

答案 0 :(得分:0)

目前尚不清楚您的矢量是实际空间坐标还是数据矢量。

如果它们是实数,则可以使用余弦相似度之类的东西来计算两个向量之间的相似性。 http://en.wikipedia.org/wiki/Cosine_similarity

如果它们是空间坐标,您可以使用空间索引,就像建议的其他海报一样。我用R-Tree Spatial Index取得了很好的成功,它以多种语言实现,并允许您进行各种空间查询。