2010-11-25 76 views
8

我正在使用Lucene開發Web應用程序的搜索組件。我想將用戶查詢保存到索引中,並使用它們向用戶建議備用查詢,並保留查詢統計信息(最常用的查詢,最高得分查詢...)。使用lucene保持查詢統計信息

要將這些數據用於替代查詢建議,我將分析查詢以查看哪些術語最常用於另一個術語,並使用該術語爲用戶創建建議。

但我不知道在哪種形式索引數據。我正在考慮簡單地將查詢添加到索引中,但這樣可能會產生大量冗餘數據,因爲索引中的許多文檔都具有相同的內容。有沒有人有任何想法可以實現這一點?

感謝您的幫助。

回答

1

「我在想簡單地把查詢到的指標,但以這種方式有可能是大量的冗餘數據,因爲在索引中許多文件將具有相同的內容」

你可以tell Lucene不會存儲文檔內容,這意味着主體開銷將是唯一條款和索引本身。因此,將每個查詢存儲爲唯一的文檔可能不是一個很大的開銷......這樣您就不會丟棄任何信息。

+0

我想過這樣做,但我也需要保留一些關於查詢的統計信息(它們被使用的次數,命中次數),並且我能想到實現這一點的唯一方法是存儲次數在索引中使用並在更新文檔之前增加它,但這似乎是一個昂貴的操作。 – jbradaric 2010-11-25 16:19:55

+0

你可以使用lucene中的Term Frequencies來做到這一點嗎? http://stackoverflow.com/questions/667389/get-term-frequencies-in-lucene。如果您想要實時查詢建議,您需要提前計算freq的時間並存儲它們。 – Joel 2010-11-25 16:22:14

1

首先,我相信你應該存儲與現有索引分開的查詢。問題不是多餘的數據,而是讓您的索引「流水」 - 將查詢存儲在同一索引中可能會損害您的搜索的相關性。一些選項爲:

  • 使用單獨的Lucene索引。
  • 使用Solr,有兩個單獨的cores,一個用於文檔,另一個用於查詢。
  • 使用查詢日誌。在查詢中存儲分數。使用後處理來構建查詢統計信息。由於這是一個Web應用程序,因此您可以使用servlet容器(如Tomcat)來記錄此信息。

其次,Auto-Suggest From Popular Queries Using EdgeNGrams建議使用Solr的查詢建議的替代實現。