2013-01-22 112 views
0

我不認爲這是一個非常模糊的Lucene問題,但不知何故,我似乎無法找到一個好的解決方案。我將用一個例子。用戶特定的Lucene搜索

假設我正在構建新聞報道網站。註冊用戶可以爲他們感興趣的文章添加書籤。我想讓用戶只搜索他/她的書籤。爲了舉例,我們還假設用戶可以爲數千篇文章添加書籤,並且我們的數據庫中有數十萬用戶。如何爲這個問題構建一個可擴展的解決方案?

非常感謝!

回答

0

這是一個非常典型的Lucene問題,因爲它不支持連接。更具體地說,沒有一流的支持,你必須找到解決方法。我可以提出幾個:

  1. 你可以有一個數據庫,裏面有usersarticlesbookmarks表(後者將有外鍵指向前兩個)。你也可以在Lucene中索引文章。當針對文章運行搜索時,您可以編寫一個Lucene Filter,這將排除當前用戶未加書籤的所有文章。

  2. 你可以索引Lucene中的所有文章和書籤 - 如果你使用單獨的索引來做這個,可能是最好的。然後,您可以運行書籤查詢(檢索當前用戶已添加書籤的文章),然後運行另一個單獨的文章查詢。與前面的示例類似,您可以使用第一個查詢的結果來排除當前用戶未加書籤的所有其他文章。

我個人比較喜歡的選項#1,因爲這是經典的關係結構和數據庫設計出於這樣的目的。使用選項#2時,用戶被刪除時必須修改用戶存儲和Lucene索引。

+0

謝謝Mindas。如果我在過濾器中放入數千甚至數萬個ID,會不會是一個問題? –

+0

如果您的過濾器非常快,請不要使用。請記住,每個搜索都必須通過篩選器才能檢查每個文檔的資格。所以緩存是你的朋友。 – mindas