mongodb最佳阵列匹配

时间:2013-04-03 06:33:30

标签: mongodb find

假设我有以下结构

[{    
    name: 'John',    
    tags: ['unix','databases']    
},    
{    
    name: 'Jane',    
    tags: ['excel', 'power-point','word', 'outlook']   
},   
{  
    name: 'Smith',  
    tags: ['databases', 'linux', 'android']  
}]  

我想搜索['databases','servers','c++']

的人

我想要一个查询,它会告诉我两个最佳匹配是Smith和John,每个匹配一个匹配。

这与使用两个术语向量并找到余弦积http://en.wikipedia.org/wiki/Vector_space_model

类似

P.S。
我意识到我可以做一个$ in然后计算我的程序中的类似术语的数量(用Java编写),但有没有办法从mongo本身得到答案

1 个答案:

答案 0 :(得分:1)

我想你为什么不使用map-reduce。在新集合中创建标记的反向索引,并将标识存储在标记中。然后你可以计算所有标签的匹配,然后显示按最大匹配排序。在这里查看其中一个博客:http://ngsiolei.blogspot.com/2010/11/basic-inverted-index-in-mongodb.html。即使它看起来像更多的文本搜索,但你也可以使用相同的。即使将来,这种方法也可以让您灵活地为标签添加一些重量 - 年龄,以获得更好的结果。该系列将如下所示。因此,当我同时搜索C ++ for Database时,我将在两者中获得James并且我将它加起来2并且J将得到1,所以James匹配更多。通过这种方式,我们将为每个标签创建一个文档,它将是Id,因此您的搜索速度会更快。如果您想要一些简单的方法,请使用聚合框架(http://docs.mongodb.org/manual/applications/aggregation/)并在标签列上使用展开

         C++ : ["James" , "J" ] , Database : ["James"] 
相关问题