1

我想在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 查询找到另一个具有更多共同朋友的帐户。如果可能的话,还可以在响应中添加带有该数字的字段。

4

1 回答 1

0

您可以尝试以下步骤。

1) 访问 Mike 文档的 termvector。

2)访问字段friends_id中的条款

3) 迭代这些术语(即friend_ids)并形成术语查询的布尔查询。

4) 使用该查询搜索索引。

5)假设您在 friends_id 归档中没有重复的术语,它应该可以工作。最佳结果应符合您的要求。

更好的是,Lucene 提供了 MoreLikeThisQuery 来实现查询中提供的术语的相似文档。

简而言之,此查询用于查找候选文档的相似文档。它所做的只是上述步骤。在您的用例中,您不是在为候选文档寻找相似的文档,而是为文档中的某个字段寻找最相似的文档。

这是MoreLikeThisQuery的示例代码

另一个教程

于 2013-03-10T19:09:42.493 回答