回答

16

2006年,我在SQL Server 2005的FTS之上構建了一箇中等規模的知識庫(可能是2GB索引文本),現在已經將它移至2008的iFTS。這兩種情況對我而言都很好,但從2005年到2008年的這一舉措對我來說實際上是一種改進。

我的情況並不像StackOverflow的意義上說,我只是每晚刷新數據的索引,但是我試圖將多個CONTAINSTABLE語句的搜索結果返回給對方和關係表。

在2005年的FTS中,這意味着每個CONTAINSTABLE必須在索引上執行搜索,返回完整結果,然後讓DB引擎將這些結果加入到關係表中(這對我來說都是透明的,但它是發生並且查詢費用昂貴)。 2008年的iFTS改善了這種情況,因爲數據庫集成允許多個CONTAINSTABLE結果成爲查詢計劃的一部分,這使得大量搜索更加高效。

我認爲,2005年和2008年的FTS引擎,以及Lucene。NET的架構折衷方案將會與許多項目情況相比更好或更差 - 我很幸運,升級對我有利。我可以完全明白爲什麼2008年的iFTS不能像2005年那樣在StackOverflow.com這種用例的高度OLTP性質上運行。然而,我不會打折2008年iFTS可能與繁重的插入事務負載隔離的可能性......但是這聽起來像完成轉移到Lucene.NET一樣多的工作......以及酷因爲Lucene.NET的因素很難忽略;)對於我來說,SQL 2008的iFTS在大多數情況下的易用性和效率可能會導致Lucene的'酷'因素(儘管它易於使用,我從未在生產系統中使用它,所以我保留對此的評論)。我很有興趣知道在StackOverflow或類似的情況下,Lucene是多麼高效(現在已經實現了嗎?)。

4

我們使用全文搜索的可能性,但在我看來,它取決於數據本身和您的需求。

我們使用網絡服務器進行擴展,因此我喜歡lucene,因爲我沒有那麼多的sql-server負載。

對於從零開始,並希望有一個全文搜索,我寧願sql-server解決方案,因爲我認爲這是真的很快得到的結果,如果你想lucene你必須在開始實施更多(也獲得一些技巧)。

18

SQL Server FTS對於小型部署將更容易管理。由於FTS與數據庫集成,因此RDBMS會自動更新索引。這意味着你沒有一個明顯的縮放解決方案,沒有複製數據庫。所以如果你不需要擴展,SQL Server FTS可能是「更安全」的。在政治上,大多數商店將會更加適應純粹的SQL Server解決方案。

在Lucene方面,我贊成直接使用Lucene的SOLR。無論使用哪種解決方案,您都必須在數據更改時自己更新索引,並將數據映射到SOLR/Lucene索引。專業人員可以通過添加其他索引輕鬆進行縮放。您可以在非常精簡的Linux服務器上運行這些索引,從而消除一些許可成本。如果你採用Lucene/SOLR路線,我會把你需要的所有數據直接放到索引中,而不是把索引放回數據庫。您可以在索引中包含不可搜索的數據,例如,您可以將預先構建的HTML或XML存儲在索引中,並將其作爲搜索結果提供。採用這種方法,您的數據庫可能會關閉,但您仍然可以在斷開模式下提供搜索結果。

我從來沒有見過SQL Server 2008和Lucene之間的頭對頭的性能比較,但很想看到一個。

0

需要注意的一點是除了全文約束之外,還有什麼樣的搜索約束條件。如果你正在做lucene無法提供的約束,那麼你幾乎肯定會使用FTS。 2008年的好處之一是,他們改進了FTS與標準SQL服務器查詢的集成,因此混合數據庫和FT約束條件下的性能應該比2005年更好。