SQL 进阶学习之六



-- =========================================================================================
--
 2007/06/06 SQL学习-- 全文索引
--
 =========================================================================================
--
--
 全文索引是基于标记的功能性索引,使用全文引擎服务创建和维护的。
--
 根据特定的语言的规则对词和短语的搜索,使针对语言的搜索。

-- 相关术语: 
--
 全文索引:是一种特殊的索引,能在给定的列中存储有关重要的词及为位置的信息,
--
             使用这些信息可以快速的进行全文查询,搜索包括特定词或词组的行。
--
 全文目录:存储全文索引
--
 断字符与词干分析器
--
 标记
--
 筛选器
--
 填充(爬网):创造维护全文索引的过程叫填充,也叫爬网。
--
 干扰词

--  创建全文索引的注意事项:
--
 1)全文索引是指对数据表的,只能对数据表创建全文索引,不能对数据库创建全文索引
--
 2)一个数据库中可以创建多个全文目录,每个全文目录都可以存储一个或多个全文索引,但每一个数据表只能创建
--
        一个全文索引,一个全文索引中可以包含多个字段。
--
 3)要创建全文索引的标必须要有主键,或者是具备唯一性的非空索引,并且这个主键或具有唯一性的非空索引只能是
--
   一个字段,不能是多个字段的组合。
--
 4)包含在全文索引里的字段只能是字符型的或Image型的字段。 

--  在 where 子句里设置全文搜索的查询条件,可以使用 contains 和 freetext 两个谓词
--
  在 from 子句里设置全文搜索的查询条件,可以使用 containstable 和 freetexttable 两个行集值函数

-- 使用contains搜索
--
 1) 简单词 
--
 2)派生词
--
 3)前缀词
--
 4)加权词
--
 5)临近词
--
CONTAINS 谓词可以搜索: 
--
词或短语。

--词或短语的前缀。
-
--与另一个词相邻的词。

--由另一个词的词形变化而生成的词(例如,drive 一词是 drives、drove、driving 和 driven 词形变化的词干)。

--使用同义词库确定的另一个词的同义词(例如,metal 一词可能有 aluminum 和 steel 等同义词)。


CONTAINS
          ( { column_name 
| (column_list) | * } 
               , 
'< contains_search_condition >'                         [ , LANGUAGE language_term ]
        ) 
< contains_search_condition > ::= 
    { 
< simple_term > 
    
| < prefix_term > 
    
| < generation_term > 
    
| < proximity_term > 
    
| < weighted_term > 
    } 
    
| { ( < contains_search_condition > ) 
    
[ { < AND > | < AND NOT > | < OR > } ] 
    
< contains_search_condition > [ ...n ] 
    } 
< simple_term > ::= 
          word 
| " phrase "
< prefix term > ::= 
     { "word 
* " | "phrase *" }
< generation_term > ::= 
     FORMSOF ( { INFLECTIONAL 
| THESAURUS } , < simple_term > [ ,...n ] ) 
< proximity_term > ::= 
     { 
< simple_term > | < prefix_term > } 
     { { NEAR 
| ~ }
     { 
< simple_term > | < prefix_term > } 
     } 
[ ...n ] 
< weighted_term > ::= 
     ISABOUT 
        ( { { 
  
< simple_term > 
  
| < prefix_term > 
  
| < generation_term > 
  
| < proximity_term > 
  } 
   
[ WEIGHT ( weight_value ) ] 
   } 
[ ,...n ] 
        ) 
< AND > ::= 
     { 
AND | & }
< AND NOT > ::= 
     { 
AND NOT | & !}
< OR > ::= 
     { 
OR | | }

-- 简单词的搜索方式
--
 
select * from  books 
where contains(title,'us')

--
select * from  books 
where contains(title,'"us" and "C++"')
--
select * from  books 
where contains(title,'"xml" or "LET"'-- 不能写为 contains(title,'xml' or 'LET')

-- 派生词的搜索方式
--
 主要用在英文当中
--
 需要改变断字符的语言
select * from books
where contains(title,'formsof(inflectional,program)')

-- 前缀词的搜索方式
--
 也是用在英文中
select * from books
where contains(title,'"C*"')  -- 只能使用*,并且只能放在英文字母之后,如"*c","*C*"都是错误的

-- 临近词的搜索方式
--
    可以搜索记录中位置相近的两个字符
--
insert into books
(book_id,title)
values(77,'中华人民共和国')
--
select * from books
where contains(title,N'"中华" near "共和"')


-- 使用freetext搜索
--
 freetext的搜索方式是将一个句子中的每个单字拆分开进行搜索的.
select * from books
where freetext(title,'中华')


-- 使用 containstable 搜索
--
 其返回的记录是作为数据表出现在select语句的from子句之中的
--
 key 该字段表示的是全文索引的唯一索引键的内容
--
 rank 该字段时排名值字段,其排名值是系统依查询符合的程度自动生成的
select * from 
containstable(books,title,'let'as table1

-- 使用 freetexttable 搜索
select books.title,table1.* from books
join freetexttable(books,title,'let',1as table1
on books.book_id = table1.[key]




-- SQL Server 2005 新增功能: 与全文索引相关的T-SQL语句
--
 创建全文目录
--
  
create fulltext catalog TSQLFull


-- 创建全文索引
--
  
create fulltext index on authers
--on authers(lastname,firstname,company type column testname)
key index PK__authers__1B0907CE
on TSQLFull


-- 要删除的全文目录必须为空,即不能包含有全文索引
 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值