我有一个列出体育和用户的数据库,并且有一个连接表(UserSports):
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中记录的运动。因此,如果简搜索“球”,它应该只返回足球。我可以使用not in
或left join ... where join is null
在SQL中执行此操作并且工作正常,但我想添加模糊逻辑搜索Lucene.net给出的内容。
在Lucene.Net中索引数据的最佳方法是什么?
答案 0 :(得分: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
)