2009-07-19 143 views
1

我正在做一個基於asp.net mvc框架的web項目。作爲db我使用的是Postgre SQL。問題是如何在我的應用程序中組織搜索。一種選擇是使用.net庫,如lucene.net。另一種選擇是使用Postgre全文搜索。那麼最好的選擇是什麼?postgres全文搜索

回答

3

我還沒有在生產中運行postgres,但是我在一個測試數據庫上玩了很多重要的數據(我認爲)。索引大約600,000行平均3個字的文本字符串可創建120MB的全文索引。在之後,針對每個搜索詞的第一個查詢之後,查詢對於該索引非常快。看起來每個術語的索引都必須從磁盤提取到內存中。我還沒有找到一種方法在啓動時將整個索引存入內存。由於我在單檯筆記本電腦上運行,因此有些初始緩慢可能與磁盤IO相關。我也不確定120MB索引是否需要120MB或更多的DB內存。

對於生產應用程序,我們使用Lucene for Java,它的表現非常好 - 亞秒級響應與幾GB的索引數據。我看到的Lucene的優點是1)它獨立於數據庫,2)可分配。對於#1,這可能不是問題,但這意味着無論您的底層數據庫是什麼,您都可以使用相同的索引代碼。對於#2,這取決於應用程序有多大。 Lucene(尤其是Hadoop)被設計成多線程的,所以你可以將索引存儲在共享驅動器上,並讓多臺機器一次運行搜索(注意索引仍然是單線程的)。無論你是否想要這個,取決於你的架構是什麼。你願意有1個大型數據庫還是1個小型/中型數據庫以及一些支持它的小型索引服務器?