
--
=========================================================================================
--
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

--
要删除的全文目录必须为空,即不能包含有全文索引

被折叠的 条评论
为什么被折叠?



