2012-11-04 72 views
1

我使用AzureDirectory和Lucene .NET 2.9.4,但我有WO問題:如何實現的Lucene搜索的.Net在Azure上webrole

  1. 搜索似乎並不那麼快。我使用這些設置編制索引: indexWriter.SetUseCompoundFile(false); indexWriter.SetMergeFactor(1000); 索引大約3.5GB,它有12.126.436個文檔。 要創建indexSearcher,即使索引已在本地磁盤上,也需要大約5分鐘或更長時間。索引是否太大?我試圖在兩個字段上使用MultiFieldQueryParser執行單項搜索。字段上的TermVector關閉
  2. 無處不在建議只創建一個indexSearcher的實例並在查詢之間共享(實際上它創建起來很慢),但我不知道如何共享Searcher單例(它是類執行搜索)在各種web請求之間。如果我在webrole類上創建單例,那我該如何使用該實例來執行搜索?此時每個Web請求重新創建單例。

非常感謝

回答

1

其實我已經使用了與AzureDirectory Lucene.NET的確切版本,它不能很好地工作。我認爲AzureDirectory不是爲生產規模而編寫的。

如果你看一下AzureDirectory的源代碼,它使用:

  • 舊版本的Lucene的作爲基礎(2.3倍)
  • 異常到處扔滿(硬調試/趕上正確的在生產的)
  • 它使用舊的存儲API(預1.8版本的SDK)

我結束了創建我自己的專用虛擬機和使用.NET 3.0.3 Lucene.Net庫。在該環境中像冠軍一樣工作,因爲我不需要實現AzureDirectory。

您應該只有一個易於使用存儲隊列實現的IndexWriter。如果你想限制它們寫一個IndexReader池(如SQL連接池),你可以有多個IndexReader。我有多個這些運行良好,沒有例外像在AzureDirectory中那樣飛來飛去。

我的環境有點不同很多較小的索引....不是一個巨大的索引。

0

也許this是人們正在討論的AzureDirectory,也許不是 - 我調整了這個以獲得更好的性能。儘管我不會聲稱它是生產級的,並且堅如磐石,但它可以幫助您通過目前使用的AzureDirectory。

希望它有幫助,