2013-03-10 59 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

示例代碼