2013-03-27 1 views
1

У меня есть база данных, которая содержит список видов спорта и пользователей и имеет таблицу Join (UserSports):Setup Index 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 in или left 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

Смежные вопросы