我正在为大公司开发漂亮的企业文档管理系统(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一样,智力搜索的最佳做法是什么?
答案 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全文搜索不具备的一些功能(反之亦然),并且在正确配置后,可以执行很好。