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 ' , 1 as  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


--  要删除的全文目录必须为空,即不能包含有全文索引
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值