SQL Server全文搜索 一项强大而又让人无可奈何的技术!说他强大,是因为他的检索速度极快,比like快几十上百倍。说他让人无可奈何,是因为很多场合对准确性要求很高,使用者又不能自己很好的组织查询语句,所以查出来的结果让人觉得没有确定性。
原本觉得这技术很不错,但真正研究起来,发现问题还是很多,研究到最后觉得这技术对柳永法(yongfa365)'Blog来说,只会用到对精确度不高的场合,像:CMS系统,大量文章,根据tag进行快速检索,这时他的快速检索优势能发挥出来,其它地方,真不敢用。像OA,各种业务系统,用他搜索不出要的东西,或者尝试很多次搜索,那用户还不郁闷死。暂且把研究结果放上来,以备后查。
前段时间做了个系统,记录客户的地址,下次再输入类似的地址,系统会进行分词,然后搜索看这个客户是不是已经在我们系统里了。感觉全文搜索能实现这样的功能就好了:就是,根据哪些词索引由用户自己定义(如:朝阳区|海淀区|东城区|左家庄|中关村 等,整个北京的地名,也没多少关键词),只对这些词进行索引,这样一来查询速度会更快,全文目录所占的地方也会更小,不知为何SQL Server没提供这样的功能,也许这只是 个例 吧。
注意事项:
操作:
- 确保服务已启用:在"SQL Server 配置管理器"里设置"SQL Server FullText Search"启动状态为"自动"
- 建全文索引最直观的方法是:右击相关表-->全文索引-->定义全文索引-->然后基本上是下一步就完成了。
最常用语法:
SELECT * FROM [test] WHERE CONTAINS(UserName,'柳永法');
SELECT * FROM [test] WHERE CONTAINS(Address,'山西 or 天津');
SELECT * FROM [test] WHERE CONTAINS(Address,'山西 and 天津');
相关网址:
全文搜索 (SQL Server)
http://msdn.microsoft.com/zh-cn/library/ms142571(v=SQL.100).aspx
全文检索 vs.数据库
http://www.coreseek.cn/home/why/
SqlServer 全文检索总结
http://www.cnblogs.com/yinhaiming/articles/1535851.html
CONTAINS (Transact-SQL)
http://msdn.microsoft.com/zh-cn/library/ms187787.aspx
可能会用到:
不会被索引的:D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\noiseCHS.txt
全文检索 vs.数据库:
全文检索是数据库的有力补充,全文检索并不能替代数据库在应用系统中的作用。当应用系统的数据以大量的文本信息为主时,采用全文检索技术可以极大的提升应用系统的价值。
- 数据库搜索,如果搜索范围包括全部正文数据,往往性能很低,用户响应时间长(分钟级,经常超时);而全文检索可以在0.x秒(毫秒级)的时间内将结果反馈给用户;
- 数据库搜索,一个用户在搜索,往往影响其他用户的对应用系统进行操作;全文检索可以同时支持多个用户并发搜索,其他对应用系统进行操作的用户不受影响;
- 数据库搜索很难实现多个关键字的复合搜索;而全文检索可以实现多个关键词的复合搜索,包括 “和(AND)”、“或(OR)”、“否(NOT)” 等;
- 数据库搜索难于对结果进行相关度排序,当检索结果多时,用户往往难于找到最恰当的文档;而全文检索通过统计的研究成果,可以将文档进行相关度排序后,再返回给用户,提高用户的效率;
- 全文检索还可以对检索结果的数据进行聚类分析(Group, 这里的聚类和NLP里面的聚类算法不同),增进用户对数据分布情况的了解;
- 全文检索需要用户定期执行建立索引的动作,比直接使用数据库搜索增加了维护的工作;
- 实现的不完善的全文索引系统容易造成索引与数据库的不一致,反而降低了用户的使用体验;
- 优秀的全文检索系统支持按照文档的不同字段分配不同的检索权重,根据应用的不同动态的改变结果的排序;
- 对于中文、日文和韩文而言,全文检索支持分词,进一步缩小了结果集的范围;而数据库检索往往不支持,往往一些与搜索词毫不相干的内容也混入了结果集。
引用:
SQL Server全文搜索 注意事项及简单介绍http://www.yongfa365.com/item/SQL-Server-FullText-Search-Intro.html