2011-01-11 63 views
1

我有以下语法数据库:查找一组属性之间的最相似(MongoDB的)

{_id:'342', values:{ A: '432', B: 'asdf', C: '23', D: 'gg'}} 
{_id:'343', values:{ A: 's', B: 'fsd', C: 'as', D: '4'}} 
{_id:'344', values:{ A: 'f', B: 'f', C: 'af', D: '32'}} 
{_id:'345', values:{ A: 'f', B: 'f', C: '333', D: 'adf'}} 

给定一组为A,B,C,d值的 - 我想找到具有最相似之处的文件。

例如由于它具有A,B和C,所以它将匹配_id:345。{}匹配。

我想获得与我所拥有的值最相似的结果。

是否有一个查询/算法可以实现这个快速?

注意:不知道如何标题,如果你有更好的标题可以自由编辑它。

+0

而且它真的在Db中吗?还是可以将它加载到内存中? – 2011-01-11 22:22:53

回答

0

这里是你可以做的一种方式,假设你想在亲近匹配的顺序结果,并假设有只4(所以这是可行的,做的所有排列):

使用$ elemMatch(见http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24elemMatch )反复。

首先查询所有4个值(1个查询)。
如果失败查询每个组合的3个值(4个查询)。
如果失败查询每个组合的2个值(6个查询)。
如果只有一个匹配(4个查询)的查询失败。

另一种方法是使用map reduce。在map函数中计算某一行的分数,如果分数> 0,则将文档ID作为关键字,将得分作为该值。在减少阶段通过单一的结果没有任何工作。按分数排序结果。

相关问题