我想在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]
如果我是Mike的帐户,我想找一个Lucene查询另一个帐户,其中有更多的共同朋友。如果可能的话,还要在响应中添加具有该数字的字段。
答案 0 :(得分:0)
您可以尝试以下步骤。
1)访问Mike文档的termvector。
2)访问字段friends_id
中的条款3)迭代这些术语(即friend_ids)并形成术语查询的布尔查询。
4)使用该查询搜索索引。
5)假设您在friends_id字段中没有重复的条款,它应该可以工作。最高结果应符合您的要求。
这更好,因为Lucene提供了MoreLikeThisQuery来为查询中提供的术语实现类似的文档。
简而言之,此查询用于查找候选文档的类似文档。它所做的只不过是上面的步骤。在您的用例中,您不是要为候选文档寻找类似的文档,而是为文档中的字段寻找类似的顶级文档。
的示例代码