如何使用与谷歌相同的全文搜索在表中搜索?

时间:2014-01-30 13:43:27

标签: c# sql-server asp.net-mvc tsql

我正在为大公司开发漂亮的企业文档管理系统(DMS项目)。

DMS数据库是Microsoft SQL Server 2012,文档表名称是“Document”。

目前,文件表中有超过4,000,000条记录。

我需要通过SQL Server全文搜索在与Google搜索相同的文档表中搜索,性能非常好(响应时间不到1秒)。

用户查看用于情报搜索的单个文本框。例如,用户需要查找代码包含“1107”且作者姓名包含“Albert”的文档,因此在该文本框中键入: 1107 Albert

我在下面的查询中生成了这个:

select count(*) over() totalRowFound, DocumentID 
from dbo.Document 
where contains(*,N'("*1107*")) AND contains(*,N'("*Albert*"))

我在包含函数中使用*以获得更好的搜索结果,但响应时间约为4~7秒。

我知道google算法非常复杂,但是我想在4到1000万条记录中实现像Google概念这样的智能搜索,响应时间不到1秒。

如何改进此查询? 要么 与Google一样,智力搜索的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

使用*,您正在搜索所有列 尝试

where contains(code,N'("*1107*"))

如果要搜索特定列,如何搜索所有列更好的搜索结果?

不会像谷歌那样使用SQL全文搜索,因为它们不是相同的引擎 我不认为Google引擎可用 Lucene是一个免费软件搜索引擎。

你为什么要写自己的DMS?

答案 1 :(得分:1)

当您说'Google搜索'时,您的真正含义是inverse index。 Apache的Lucene项目以类似的索引方式提供此功能。 SQL Server的FullText也使用反向索引。

如果您想要非常快速的文本搜索,您可能想尝试使用Lucene或Solr,因为它具有SQL Server全文搜索不具备的一些功能(反之亦然),并且在正确配置后,可以执行很好。