内容显示页
 
类别:数据库+SQL | 浏览(963) | 2010-4-25 21:59:26

        SQL Server全文搜索 一项强大而又让人无可奈何的技术!说他强大,是因为他的检索速度极快,比like快几十上百倍。说他让人无可奈何,是因为很多场合对准确性要求很高,使用者又不能自己很好的组织查询语句,所以查出来的结果让人觉得没有确定性。

        原本觉得这技术很不错,但真正研究起来,发现问题还是很多,研究到最后觉得这技术对柳永法(yongfa365)'Blog来说,只会用到对精确度不高的场合,像:CMS系统,大量文章,根据tag进行快速检索,这时他的快速检索优势能发挥出来,其它地方,真不敢用。像OA,各种业务系统,用他搜索不出要的东西,或者尝试很多次搜索,那用户还不郁闷死。暂且把研究结果放上来,以备后查。

        前段时间做了个系统,记录客户的地址,下次再输入类似的地址,系统会进行分词,然后搜索看这个客户是不是已经在我们系统里了。感觉全文搜索能实现这样的功能就好了:就是,根据哪些词索引由用户自己定义(如:朝阳区|海淀区|东城区|左家庄|中关村 等,整个北京的地名,也没多少关键词),只对这些词进行索引,这样一来查询速度会更快,全文目录所占的地方也会更小,不知为何SQL Server没提供这样的功能,也许这只是 个例 吧。

注意事项:

操作:

  1. 确保服务已启用:在"SQL Server 配置管理器"里设置"SQL Server FullText Search"启动状态为"自动"
  2. 建全文索引最直观的方法是:右击相关表-->全文索引-->定义全文索引-->然后基本上是下一步就完成了。

最常用语法:

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
 
 
相关链接
 
网友评论:
1 任侠 - 2010-5-1 15:34:56
最近发的SQL server相关的文章挺密集的哈
 
2 匿名网友 - 2010-5-2 15:03:34
是呀,到处都是,cnblog上天天看到
 
3 听风吹雨 - 2010-6-20 0:23:05
比较关心:“全文搜索最好是配合分词组件工作,分词后再使用全文搜索查找,分词组件见:盘古分词”是如何结合起来的?望复。
 
4 匿名网友 - 2010-6-21 14:23:29
盘古分词可以把要搜索的一句话通过智能分词,分成一系列的关键字,这样再搜索,精确性就高了,
比如我要搜索“听风吹雨的cnblogs是什么”,但你实际想搜索 的是"听风吹雨" and "cnblogs"。


盘古分词 可以实现这样的功能
 
姓名: 记住我
网址:
邮箱:
内容:
验证码:  验证码图片 看不清? 换张图试试
 
     
 
 
文章分类
 
 
.Net + C#(74)
 
 
ASP+VBS(161)
 
 
 
Linux(10)
 
 
 
web 2.0(26)
 
 
 
 
 
心程(68)
 
生活(97)
 
 
     

Power by :柳永法(yongfa365)'Blog  | 京ICP备07011491号  QQ:64049027  E-mail:64049027@qq.com Weibo

申请友情链接 要求:跟本站主题相类似正规网站,双方交换为首页位置

转载请注明来源,以便后人及时得到最新、修正、加强版!!!