MS Sql全文搜索与LIKE表达式

时间:2010-06-14 11:34:26

标签: sql database full-text-search sql-like

我目前正在寻找一种方法来搜索大型数据库(500MB - 10个表格中的10GB或更多),其中包含许多不同的字段(nvarchars和bigints)。 应该搜索的许多字段不在同一个表中。

一个例子:搜索'5124 Peter'应该返回所有项目,那......

  • 的ID为5124,
  • 标题或说明中有'Peter'
  • 项目类型ID为5124
  • 由名为'peter'的用户或其ID为5124的用户创建
  • 由街道地址为“5124”或“peter”的用户创建。

我应该如何进行搜索?我读到MS-Sql的全文搜索比使用LIKE关键字的查询更高效,我认为语法更清晰,但我认为它无法搜索bigint(id)值并且我读了它索引的性能问题因此减慢了DB的插入速度。在我的项目中,插入比插入更多,所以这可能是一个问题。

提前致谢, 标记

3 个答案:

答案 0 :(得分:3)

您可以尝试使用独立的搜索引擎,例如Sphinx Search:

http://www.sphinxsearch.com/index.html

或Apache Solr:

http://lucene.apache.org/solr/

答案 1 :(得分:1)

我认为你不会从MS SQL中获得所需的性能;您将需要构建非常复杂的查询来覆盖您将要搜索的所有数据/表,并且在查询数据的同时,您还有额外的障碍,即将数据写入数据库。 / p>

我建议您查看Apache Solr(http://lucene.apache.org/solr/)或Lucene(http://lucene.apache.org)。 Solr建立在Lucene之上,两者都可用于创建倒置文件索引,基本上类似于书后面的索引(术语1出现在文档1,3,7等中)Solr是一个搜索引擎 - in-a-box,有几种机制可以让你告诉它如何以及在何处索引数据。 Lucene更低级,可以让您更灵活地设置索引和搜索架构。

Solr的好处在于它可以作为Web服务使用,所以如果您不熟悉Java,可以使用您选择的语言找到Solr客户端,并以任何适合的语言编写索引和搜索代码您。这是一个指向Solr客户端库列表的链接,包括一些C#http://wiki.apache.org/solr/IntegratingSolr这就是我要开始的地方。

答案 2 :(得分:0)

全文搜索肯定比表达更高效。你可以做的是在一个视图而不是一个表上创建一个全文索引,因为它只是被搜索的索引,可以在以后保存表连接,这可以加快速度。该视图还允许您将bigint列转换为varchar,然后可以将其编入索引,例如将所有要搜索的列连接在一起作为一个varchar列。为此,您需要使用SCHEMABINDING创建一个视图,并选择至少一个唯一的列,并在其上创建一个聚簇唯一索引。

至于对插入性能的全文的影响,我没有注意到我自己对批量插入的影响很大但我从stackoverflow问题3301470看到,有人提到sql 2005上的性能很慢但是在sql 2008中那已经修好了。这是因为它现在在批量插入之后而不是在每个单独的行插入之后更新索引(我正在运行2008)。如果您正在运行2005,那么为了改进,您可以仅针对批量插入禁用更改跟踪,并在之后手动调用更新索引。