2013-03-10 44 views
1

我想在Lucene中实现“共同朋友”的功能,所以我有许多文档和朋友列表。Lucene找到交叉点最多的文档

DOC: 
    id: p1 
    name: Mike 
    profile_id: 1 
    friends_id: [2,3,4,5,6,7,8] 

id: p3 
name: John 
profile_id: 3 
friends_id: [6,7,8,9,10] 

id: p5 
    name: Roftl 
    profile_id: 5 
    friends_id: [1,2,3,6,10] 

如果我是迈克帐户,我想找到一个Lucene的查询与共同的朋友高NUMER另一个帐户。如果可能的话,还可以在该答复中添加该字段。

回答

0

您可以尝试以下步骤。

1)访问Mike文档的termvector。

2)进入该领域的术语friends_id

3)迭代那些术语(即friend_ids)和形成术语查询的一个布尔查询。

4)用该查询搜索索引。

5)假设你没有在friends_id提交的重复条款,它应该工作。最好的结果应该符合你的要求。

它更好,因为Lucene提供了MoreLikeThisQuery来为查询中提供的术语实现类似的文档。

简而言之,此查询用于查找候选文档的类似文档。它所做的只是上面的步骤。在你的用例中,你不是在寻找候选文档的类似文档,而是寻找文档中字段的顶部相似文档。

下面是MoreLikeThisQuery

Another tutorial

示例代码