2013-03-27 40 views
1

我列出的運動和用戶,有一個連接表(UserSports)的數據庫:設置Lucene.Net指數

Sports Table: 
ID Name 
1 Running 
2 Swimming 
3 Football 
4 Baseball 
5 Basketball 

Users Table: 
ID Name 
1  George 
2  Jane 
3  Alex 

UsersSports 
UserID SportID 
1   2 
3   1 
2   4 
2   5 

我想搜索使用lucene.net運動,所以我爲他們創建一個索引並分析名稱。這很好。當我搜索「球」時,我得到足球,棒球,籃球。我想要做的只是對於特定的用戶而言,他們只會在UserSports中沒有記錄的情況下返回運動。所以如果簡搜尋「球」它應該只返回足球。我可以在SQL中使用not inleft join ... where join is null來做到這一點,並且工作正常,但我想添加Lucene.net提供的模糊邏輯搜索。

在Lucene.Net中索引數據的最佳方式是什麼?

回答

1

有很多方法可以做到這一點。

既然你將永遠不會有非常大量的運動,你可以簡單地查詢Lucene索引像你這樣做其實並建立從它的SQL查詢:

如果
SELECT * 
FROM Sports 
WHERE Sports.ID IN([list from lucene]) 
AND NOT EXISTS(
    SELECT 1 
    FROM UsersSports 
    WHERE UsersSports.UserId = [current user id] 
    AND UserSports.SportID = Sports.ID 
) 
+1

有很多的記錄運動(比如1000個可能的比賽)?你還會這樣做嗎? – Greg 2013-03-29 04:14:12