SQL Server 2008全文search(FTS)与Lucene.NET
我知道过去有一些关于SQL 2005和Lucene.NET的问题,但是自从2008年出来以后,他们做了很多的改变,想知道是否有人可以给我优点/缺点(或者链接到一篇文章)。
2006年,我在SQL Server 2005的FTS之上build立了一个中等规模的知识库(可能是2GB的索引文本),现在已经转移到了2008年的iFTS。 这两种情况对我来说都很好,但从2005年到2008年的这一举措实际上是对我的一种改进。
我的情况不像StackOverflow的意义上说,我只是每晚刷新数据的索引,但是我试图将多个CONTAINSTABLE语句的search结果连接到对方和关系表中。
在2005年的FTS中,这意味着每个CONTAINSTABLE都必须在索引上执行search,返回完整的结果,然后让DB引擎将这些结果join到关系表中(这对我来说都是透明的,但是这种情况已经发生并且很贵到查询)。 2008年的iFTS改善了这种情况,因为数据库集成允许多个CONTAINSTABLE结果成为查询计划的一部分,这使得大量search更加高效。
我认为,2005年和2008年的FTS引擎,以及Lucene.NET,都有架构上的权衡,这些权衡会在很多项目环境中与更好或更差一致 – 我很幸运,升级对我有利。 我可以完全明白为什么2008年的iFTS不能像2005年那样在StackOverflow.com这种用例的高度OLTP性质上运行。 不过,我并不打算把2008年的iFTS从繁重的插入事务负载中分离出来,但是这听起来像是转移到Lucene.NET那样的工作, Lucene.NET的因素很难忽略;)
无论如何,对于我来说,在大多数情况下,SQL 2008的iFTS的简易性和效率可能会导致Lucene的“酷”因素(虽然它很容易使用,但我从来没有在生产系统中使用它,所以我保留评论在那)。 在StackOverflow或类似的情况下,我会很有兴趣知道Lucene是多么有效率(现在已经实现了吗?)。
对于小型部署,SQL Server FTS将更容易pipe理。 由于FTS与数据库集成,因此RDBMS会自动更新索引。 这里的意思是,你没有一个明显的缩放解决scheme,没有复制数据库。 所以如果你不需要扩展,SQL Server FTS可能是“更安全”的。 在政治上,大多数商店将会更加适应纯粹的SQL Server解决scheme。
在Lucene方面,我赞成SOLR直接使用Lucene。 无论使用哪种解决scheme,您都必须在数据更改时自行更新索引,以及将数据映射到SOLR / Lucene索引。 专业人士可以通过添加其他索引轻松进行缩放。 您可以在非常精简的Linux服务器上运行这些索引,从而消除一些许可成本。 如果你采用Lucene / SOLR的路线,我的目标是把你需要的所有数据直接放到索引中,而不是把指针放回索引中的数据库。 您可以将索引中的数据包含在不可search的索引中,例如,您可以将预先构build的HTML或XML存储在索引中,并将其作为search结果提供。 使用这种方法,您的数据库可能会closures,但您仍然可以在断开模式下提供search结果。
我从来没有见过SQL Server 2008和Lucene之间的头对头的性能比较,但希望看到一个。
这可能有帮助: http : //blog.stackoverflow.com/2008/11/sql-2008-full-text-search-problems/
还没有亲自使用SQL Server 2008,尽pipe基于这个博客条目,它看起来像全文searchfunction比2005年慢。
我们使用全文search的可能性,但在我看来,这取决于数据本身和您的需求。
我们使用networking服务器进行扩展,因此我喜欢lucene,因为我没有那么多的sql-server负载。
对于从null开始,并希望有一个全文search,我宁愿SQL服务器解决scheme,因为我认为这是真的很快得到的结果,如果你想lucene你必须在开始实施更多(也得到一些知识,怎么样)。
你需要牢记的一个考虑是除了全文约束之外你还有什么样的search约束条件。 如果你正在做lucene不能提供的约束,那么你几乎肯定会使用FTS。 2008年的好处之一是,他们改进了FTS与标准SQL服务器查询的集成,因此混合数据库和FT约束条件下的性能应该比2005年要好。