SQL Server 2008 全文搜索的一些知识
SQL Server 2008 全文搜索的一些知识
一. 看了几篇不错的帖子,
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 REORGANIZE 重新组织全文目录。
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”。