设为首页 收藏本站
查看: 952|回复: 0

[经验分享] SQL Server 2008 全文搜索的一些知识

[复制链接]

尚未签到

发表于 2018-10-18 08:27:54 | 显示全部楼层 |阅读模式
  一. 看了几篇不错的帖子,
  SQL Server 2008 Full-Text Search Overview(SQL Server 2008全文检索概览)http://www.cnblogs.com/galaxyyao/archive/2009/02/13/1390139.html
  全文索引 http://www.cnblogs.com/liulun/articles/1368655.html
  先照抄一段:
  Q:为什么要Full-text search(全文检索)?
  A:因为对文字的查询速度慢(不建议在文字上建索引也就是这个道理)
  Q:和2005有区别么?
  A;当然有区别,名字前都加了个integrated了。以前05里有单独的索引文件和引擎,08中集成到filegroup里去了。
  Q:什么原理?
  A:基于关键字(keyword)
  Q:和普通索引的关系?
  A:目的都是提高查询速度。全文索引不少特性和Index(索引)一样
  全文检索使用了语义检索(这技术听上去就很高深么),还能用于二进制文件。
  Q:有啥用?
  A:举个最简单的例子,搜论文,模糊匹配,快速大量还能排rank。
  二.然后再去msdn上看些东东:
  全文索引概述
  http://msdn.microsoft.com/zh-cn/library/cc879306.aspx
  照抄如下一些语录如下:
  1.在 SQL Server 2008 中,全文引擎已完全集成到数据库引擎中。全文引擎现位于 SQL Server 进程 (sqlservr.exe) 中,而不是位于单独的进程 (msftesql.exe) 中。通过将全文引擎集成到数据库引擎中,提高了全文可管理性,优化了混合查询并改善了整体性能。出自: http://msdn.microsoft.com/zh-cn/library/ms142587.aspx
  2.全文检索的创建步骤, 懒得截图了, 看人家已经做好了, 直接引用一下吧, 但从第二页开始就和我本地不太一样了, 我这里不能直接在表上右键建全文检索, 默认都给置灰了, 只能在storage里的全文索引目录catalog里建索引.  http://www.sql-server-performance.com/2010/full-text-search-2008/
  3.开始以为全文检索目录应该就对应硬盘上的一个目录, 和locune的目录概念类似. 但事实上错了, 从 SQL Server 2008 开始,全文目录为虚拟对象且不属于任何文件组。全文目录是表示一组全文索引的逻辑概念。来源自:
  http://msdn.microsoft.com/zh-cn/library/ms142497.aspx
  4.只能对表或索引视图创建全文索引, 不能对普通视图创建全文索引.
  全文索引是一种特殊类型的基于标记的功能性索引,由全文引擎生成和维护。若要对表或视图创建全文搜索,则该表或视图必须具有唯一的、不可为 Null 的单列索引。全文引擎需要使用此唯一索引将表中的每一行映射到一个唯一的可压缩键。全文索引可以包括 char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary 和 varbinary(max) 列。
  5.欲在表A上创建全文索引, 有一个前提, 就是表A上必须已经至少有一个唯一索引了, 也就是说, 表A上如果还没有任何索引, 则休想在表A上创建全文索引.
  6.SQL Server 2008 中,全文索引大小仅受运行 SQL Server 实例的计算机的可用内存资源限制。http://msdn.microsoft.com/zh-cn/library/cc879306.aspx
  7.查询多个列(全文搜索)
  通过指定要搜索的列的列表,可以使用 CONTAINS 谓词来查询多个列。这些列必须来自同一个表。
  用括号, SELECT Name, Color FROM Production.Product WHERE CONTAINS((Name, Color), 'Red');
  或者用*号, SELECT Name, Color FROM Production.Product WHERE CONTAINS(*, 'Red');
  来源自: http://msdn.microsoft.com/zh-cn/library/ms142488.aspx
  9.查询多个表的多个列
  只能 CONTAINS or CONTAINS了, 如 WHERE CONTAINS(t1.Name, 'Red') or CONTAINS(t2.Name, 'Red');
  10.全文查询的性能优化

  使用>  ALTER FULLTEXT CATALOG customer REBUILD WITH ACCENT_SENSITIVITY=OFF
  更多就直接看这个吧: http://msdn.microsoft.com/zh-cn/library/cc879244.aspx
  11.执行前缀搜索 http://msdn.microsoft.com/zh-cn/library/ms142492.aspx
  可以使用全文搜索来搜索带有指定的前缀的词或短语。
  执行前缀搜索时,将返回列中所有包含以指定前缀开头的文本的项。例如,若要搜索包含前缀 top 的所有行(如 topple、topping 和 top 本身),则查询将如下所示:
  SELECT * FROM Product WHERE CONTAINS (ProductName, '"auto*"' );
  将会返回所有与星号 (*) 之前指定的文本相匹配的文本。
  注意: 如果未在文本和星号前后加上双引号标记(如 CONTAINS (DESCRIPTION, 'top*')),则全文搜索将不把星号当作通配符。
  当前缀词是短语时,组成该短语的每个标记均被看作是单独的前缀词。将返回包含以这些前缀词开头的词的所有行。例如,前缀词“light bread*”将查找带有“light breaded”、“lightly breaded”或“light bread”文本的行,但不会返回“Lightly toasted bread”。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-622994-1-1.html 上篇帖子: SQL Server中的高可用性---概念 下篇帖子: SQL Server简洁查询正在运行的进程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表