我有字段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条记录。
答案 0 :(得分:0)
目前尚不清楚您的矢量是实际空间坐标还是数据矢量。
如果它们是实数,则可以使用余弦相似度之类的东西来计算两个向量之间的相似性。 http://en.wikipedia.org/wiki/Cosine_similarity
如果它们是空间坐标,您可以使用空间索引,就像建议的其他海报一样。我用R-Tree Spatial Index取得了很好的成功,它以多种语言实现,并允许您进行各种空间查询。