设为首页   加入最爱           最新更新:全方位英文文章资料库
 
资料坊搜索: 标题 全文     
全文本检索的应用
   首页>>YesizeCOM>>电脑技能坊>>ASP>>正文       
 
广告招租,e-mail:yesize@hotmail.com

广告招租,e-mail:yesize@hotmail.com


基本知识

1. SQL Server7 的 DeskTop 版中没有全文本检索。

2. 一个表只能有一个全文本检索。

3. 被检索的表必须有单列的唯一索引。

4. 全文本的索引存储在文件系统中,而非数据库中。

5. 更新全文本索引的过程比常规索引要耗时,而且也不象常规索引那样可以由数据库系统立即更新。

6. 全文本索引包含在全文本目录( Full-Text Catalog )中,每个数据库可以包含一个或多个目录,但一个目录不能属于多个数
据库。

7. 全文本检索只能在真正的表上创建,不能是视图,系统表,临时表。

8. 全文本检索会忽略某些噪音字( noise words),比如英文的 a,the,and,中文的和,是等等。

9. 如果在查询中包含 noise words ,就会引发错误,在应用程序中应去除这些 noise words。

启动全文本检索服务。

方法A:在企业管理器中打开 Support Services 文件夹,在 Full-Text Search 的右键菜单中选择 Start。

方法B:在 SQL Server Service Manager 的 Services 下拉列表中选择 Microsoft Search,并单击 Start/Continue 按
钮。

方法C:使用 net start mssearch 的命令行方式。

使用全文本检索向导( Full-Text Indexing Wizard )。

step1. 选择被检索的数据库,在 Tools 的菜单中,选择 Full-text Indexing,进入欢迎( Welcome )的屏幕,单击 next。

step2. 选择被检索的表,单击 next。

step3. 选择唯一索引,单击 next。

step4. 选择被索引的列,单击 Add,该列显示在右栏中。单击 next。

step5. 选择目录(选择已存在的目录,或创建新的目录),单击 next。

step6. 选择或创建 population schedule(可选项),单击 next。

step7. 单击 finish。

使用 SQL-DMO (以 VB 为例)

step1. 在工程的引用中选择 Microsoft SQLDMO Object Library。

step2. 创建 SQLServer 对象。


Dim objSQL As New SQLDMO.SQLServer
objSQL.Connect localhost, sa,


step3. 创建新的目录,并加入到被索引的数据库目录中。

Dim objCatalog As New SQLDMO.FullTextCatalog

使 pubs 为全文本检索的数据库
objSQL.Databases(pubs).EnableFullTextCatalogs

创建新的目录
objCatalog.Name = ftcPubsTest

将新目录加入到目录集合中
objSQL.Databases(pubs).FullTextCatalogs.Add objCatalog

step4. 在表上创建全文本索引。

Dim objTable As New SQLDMO.Table

指定被索引的表
Set objTable = objSQL.Databases(pubs).Tables(authors)

指定目录名和唯一索引名
objTable.FullTextCatalogName = ftcPubsTest
objTable.UniqueIndexForFullText = UPKCL_auidind
objTable.FullTextIndex = True

指定被索引的列
objTable.Columns(au_lname).FullTextIndex = True
objTable.Columns(au_fname).FullTextIndex = True

激活该表上的全文本索引
objTable.FullTextIndexActive = True

step5. 启动全文本目录


objCatalog.Start SQLDMOFullText_Full


使用存储过程

step1. 使 pubs 为全文本检索的数据库


USE Pubs
go
sp_fulltext_database enable

step2. 创建新的目录


sp_fulltext_catalog ftcPubsTest,create


step3. 指定被索引的表


sp_fulltext_table authors,create,ftcPubsTest,UPKCL_auidind


step4. 指定被索引的列


sp_fulltext_column authors,au_lname,add
sp_fulltext_column authors,au_fname,add


step5. 激活该表上的全文本索引


sp_fulltext_table authors,activate


step6. 启动全文本目录


sp_fulltext_catalog ftcPubsTest,start_full
CONTAINS 语法

我们通常在 WHERE 子句中使用 CONTAINS ,就象这样:SELECT * FROM table_name WHERE CONTAINS
(fullText_column,search contents)。

我们通过例子来学习,假设有表 students,其中的 address 是全文本检索的列。

1. 查询住址在北京的学生


SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, beijing )

remark: beijing是一个单词,要用单引号括起来。

2. 查询住址在河北省的学生


SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, HEIBEI province )

remark: HEBEI province是一个词组,在单引号里还要用双引号括起来。

3. 查询住址在河北省或北京的学生


SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, HEIBEI province OR beijing )

remark: 可以指定逻辑操作符(包括 AND ,AND NOT,OR )。

4. 查询有 南京路 字样的地址


SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, nanjing NEAR road )

remark: 上面的查询将返回包含 nanjing road,nanjing east road,nanjing west road 等字样的地址。
A NEAR B,就表示条件: A 靠近 B。

5. 查询以 湖 开头的地址


SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, hu* )

remark: 上面的查询将返回包含 hubei,hunan 等字样的地址。
记住是 *,不是 %。

6. 类似加权的查询


SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, ISABOUT (city weight (.8), county wright (.4)) )

remark: ISABOUT 是这种查询的关键字,weight 指定了一个介于 0~1之间的数,类似系数(我的理解)。表示不同条件有不同的侧
重。

7. 单词的多态查询


SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, FORMSOF (INFLECTIONAL,street) )

remark: 查询将返回包含 street,streets等字样的地址。
对于动词将返回它的不同的时态,如:dry,将返回 dry,dried,drying 等等。
CONTAINSTABLE 语法

我们通常在 FROM 子句中使用 CONTAINSTABLE ,就象这样:SELECT * FROM table_name,CONTAINTABLE
(fulltext_table,fullText_column,search condition) WHERE ......。

CONTAINSTABLE 在查询方式上与 CONTAINS 几乎一样,所以就不用赘述了。CONTAINSTABLE 返回的是符合查询条件的表,在
SQL 语句中我们可以把它当作一个普通的表来使用。

我们看一个例子,比较这两种表的不同。


SELECT FT_TBL.student_name,FT_TBL.student_score,KEY_TBL.RANK
FROM report AS FT_TBL INNER JOIN
CONTAINSTABLE( student,address,
ISABOUT (city weight (.8), county wright (.4)) ) AS KEY_TBL
ON FT_TBL.student_id = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK


CONTAINSTABLE 返回的表包含有特殊的两列:KEY,RANK。

在第一部分里我们就强调了:被全文索引的表必须有唯一索引。这个唯一的索引列在返回的表中就成为 KEY。我们通常把它作为表
连接的条件。

在某些网站搜索时,结果中会出现表示匹配程度的数字,RANK 与此类似。它的值在0~1000之间,标识每一行与查询条件的匹配程
度,程度越高,RANK 的值大,通常情况下,按照 RANK 的降序排列。

FREETEXT 语法

FREETEXT 与 CONTAINS 类似,只是没有 CONTAINS 的精度高。在 CONTAINS 中,对查询条件的写法有很多要求,而 FREETEXT
就没有,可以是任意的单词,词组或句子。看下面的例子:


SELECT CategoryName
FROM Categories
WHERE FREETEXT (Description, sweetest candy bread and dry meat )


FREETEXTTABLE 语法

和 CONTAINSTABLE 一样,FREETEXTTABLE 返回带有 KEY,RANK 的表。举例说明:


SELECT FT_TBL.CategoryName,
FT_TBL.Description,
KEY_TBL.RANK
FROM Categories AS FT_TBL INNER JOIN
FREETEXTTABLE(Categories, Description,
sweetest candy bread and dry meat) AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY]


在 ASP 中使用全文本检索

Dim cnn
Dim rs
Dim strSQL

strSQL = SELECT book_name &_
FROM books &_
WHERE CONTAINS( description, & Request(search_condition) & )

Set cnn = Server.CreateObject(ADODB.Connection)
Set rs = Server.CreateObject(ADODB.RecordSet)

cnn.Open provider=sqloledb;datasource=.;initial catalog=books;user id=sa;pasword=;
rs.Open strSQL,cnn


上面的例子十分简单,仅为示意。只要掌握了 CONTAINS 和 CONTAINSTABLE 的语法,在使用上和一般的 ADO 查询一样。


上一篇:全文查询构架 下一篇:index server example

版权说明:作品来源于网上,版权归作者所有,如果无意中侵犯了您的版权,请来信告知,本站将在3个工作日内删除。yesize@hotmail.com
  热门小游戏分类 
射击小游戏 连连看小游戏
台球小游戏 成人小游戏
CS小游戏 化妆小游戏
赛车小游戏 休闲小游戏
篮球小游戏 换装小游戏
儿童小游戏 牛牛小游戏
麻将小游戏 冒险小游戏
美媚小游戏 益智小游戏
体育小游戏  
Society Recreation & Sports
Travel & Leisure Communications
Vehicles Computers
Fashion Arts & Entertainment
Reference & Education Disease & Illness
Writing & Speaking Politics
Product Reviews Food & Beverage
Finance Internet Business
Self Improvement Home & Family
Health & Fitness Business
最新更新内容
警惕“公务员报考热”背
公务员考试不是丈母娘考
一名新公务员的自白:我
公务员考脑筋急转弯与挂
北努斗:2006行政能力测
大讨论:06行测BT题目大
过来人回忆:当年,我也
一家之言:公务员热折射
公务员考试申论要是有正
数十万大学生走进公务员
      粤ICP备05005424         Copyright ©2000 - 2004 Yesize.COM