SQL全文本检索应用

上传人:博****1 文档编号:559769340 上传时间:2023-04-25 格式:DOC 页数:11 大小:77KB
返回 下载 相关 举报
SQL全文本检索应用_第1页
第1页 / 共11页
SQL全文本检索应用_第2页
第2页 / 共11页
SQL全文本检索应用_第3页
第3页 / 共11页
SQL全文本检索应用_第4页
第4页 / 共11页
SQL全文本检索应用_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《SQL全文本检索应用》由会员分享,可在线阅读,更多相关《SQL全文本检索应用(11页珍藏版)》请在金锄头文库上搜索。

1、SQL全文本检索应用基本知识SQLServer7的DeskTop版中没有全文本检索。1. 一个表只能有一个全文本检索。2. 被检索的表必须有单列的唯一索引。3. 全文本的索引存储在文件系统中,而非数据库中。4. 更新全文本索引的过程比常规索引要耗时,而且也不象常规索引那样可以由数据库系统立即更新。5. 全文本索引包含在全文本目录(Full-TextCatalog)中,每个数据库可以包含一个或多个目录,但一个目录不能属于多个数据库。6. 全文本检索只能在真正的表上创建,不能是视图,系统表,临时表。7. 全文本检索会忽略某些噪音字(noiseWords),比如英文的a,the,and,中文的和,是

2、等等。8. 如果在查询中包含noisewords,就会引发错误,在应用程序中应去除这些noisewords。启动全文本检索服务。方法A:在企业管理器中打开SupportServices文件夹,在Full-TextSearch的右键菜单中选择Start。方法B:在SQLServerServiceManager的Services下拉列表中选择MicrosoftSearch,并单击Start/Continue按钮。方法C:使用netstartmssearch的命令行方式。使用全文本检索向导(Full-TextIndexingWizard)。step1.选择被检索的数据库,在Tools的菜单中,选择F

3、ull-textIndexing,进入欢迎(Welcome)的屏幕,单击next。step2.选择被检索的表,单击next。step3.选择唯一索引,单击next。step4.选择被索引的列,单击Add,该列显示在右栏中。单击next。step5.选择目录(选择已存在的目录,或创建新的目录),单击next。step6.选择或创建populationschedule(可选项),单击next。step7.单击finish。使用SQL-DMO(以VB为例)step1.在工程的引用中选择MicrosoftSQLDMOObjectLibrary。step2.创建SQLServer对象。DimobjSQL

4、AsNewSQLDMO.SQLServerobjSQL.Connectlocalhost,sa,step3.创建新的目录,并加入到被索引的数据库目录中。DimobjCatalogAsNewSQLDMO.FullTextCatalog使pubs为全文本检索的数据库objSQL.Databases(pubs).EnableFullTextCatalogs创建新的目录objCatalog.Name=ftcPubsTest将新目录加入到目录集合中objSQL.Databases(pubs).FullTextCatalogs.AddobjCatalogstep4.在表上创建全文本索引。DimobjTab

5、leAsNewSQLDMO.Table指定被索引的表SetobjTable=objSQL.Databases(pubs).Tables(authors)指定目录名和唯一索引名objTable.FullTextCatalogName=ftcPubsTestobjTable.UniqueIndexForFullText=UPKCL_auidindobjTable.FullTextIndex=True指定被索引的列objTable.Columns(au_lname).FullTextIndex=TrueobjTable.Columns(au_fname).FullTextIndex=True激活该表

6、上的全文本索引objTable.FullTextIndexActive=Truestep5.启动全文本目录objCatalog.StartSQLDMOFullText_Full使用存储过程step1.使pubs为全文本检索的数据库USEPubsgosp_fulltext_databaseenablestep2.创建新的目录sp_fulltext_catalogftcPubsTest,createstep3.指定被索引的表sp_fulltext_tableauthors,create,ftcPubsTest,UPKCL_auidindstep4.指定被索引的列sp_fulltext_column

7、authors,au_lname,addsp_fulltext_columnauthors,au_fname,addstep5.激活该表上的全文本索引sp_fulltext_tableauthors,activatestep6.启动全文本目录sp_fulltext_catalogftcPubsTest,start_fullCONTAINS语法我们通常在WHERE子句中使用CONTAINS,就象这样:SELECT*FROMtable_nameWHERECONTAINS(fullText_column,searchcontents)。我们通过例子来学习,假设有表students,其中的addres

8、s是全文本检索的列。1. 查询住址在北京的学生SELECTstudent_id,student_nameFROMstudentsWHERECONTAINS(address,beijing)remark:beijing是一个单词,要用单引号括起来。2. 查询住址在河北省的学生SELECTstudent_id,student_nameFROMstudentsWHERECONTAINS(address,HEIBEIprovince)remark:HEBEIprovince是一个词组,在单引号里还要用双引号括起来。3. 查询住址在河北省或北京的学生SELECTstudent_id,student_na

9、meFROMstudentsWHERECONTAINS(address,HEIBEIprovinceORbeijing)remark:可以指定逻辑操作符(包括AND,ANDNO,TOR)。4. 查询有南京路字样的地址SELECTstudent_id,student_nameFROMstudentsWHERECONTAINS(address,nanjingNEARroad)remark:上面的查询将返回包含nanjingroad,nanjingeastroad,nanjingwestroad等字样的地址。ANEARB就表示条件:A靠近B。5. 查询以湖开头的地址SELECTstudent_id,

10、student_nameFROMstudentsWHERECONTAINS(address,hu*)remark:上面的查询将返回包含hubei,hunan等字样的地址。记住是*,不是%。6. 类似加权的查询SELECTstudent_id,student_nameFROMstudentsWHERECONTAINS(address,ISABOUT(cityweight(.8),countywright(.4)remark:ISABOUT是这种查询的关键字,weight指定了一个介于01之间的数,类似系数(我的理解)。表示不同条件有不同的侧重。7. 单词的多态查询SELECTstudent_id

11、,student_nameFROMstudentsWHERECONTAINS(address,FORMSOF(INFLECTIONAL,street)remark:查询将返回包含street,streets等字样的地址。对于动词将返回它的不同的时态,如:dry,将返回dry,dried,drying等等。以上例子都使用英文,不使用中文是因为有的查询方式中文不支持,而且我的计算机是英文系统6.更新全文本索引的过程比常规索引要耗时,而且也不象常规索引那样可以由数据库系统立即更新。可以立即更新的9.如果在查询中包含noisewords,就会引发错误,在应用程序中应去除这些noisewords。不对,

12、查询时会自己过滤掉noiseword,只有查询的内容全是noisewords时才会出现错误CONTAINSTABL语法我们通常在FROM子句中使用CONTAINSTABLE就象这样:SELECT*FROMtable_name,CONTAINTABLE(fulltext_table,fullText_column,searchcondition)WHERE。CONTAINSTABL在查询方式上与CONTAINS几乎一样,所以就不用赘述了。CONTAINSTABL返回的是符合查询条件的表,在SQL语句中我们可以把它当作一个普通的表来使用。我们看一个例子,比较这两种表的不同。SELECTFT_TBL

13、.student_name,FT_TBL.student_score,KEY_TBL.RANKFROMreportASFT_TBLINNERJOINCONTAINSTABLE(student,address,ISABOUT(cityweight(.8),countywright(.4)ASKEY_TBLONFT_TBL.student_id=KEY_TBL.KEYORDERBYKEY_TBL.RANKCONTAINSTABL返回的表包含有特殊的两列:KEYRANK在第一部分里我们就强调了:被全文索引的表必须有唯一索引。这个唯一的索引列在返回的表中就成为KEY。我们通常把它作为表连接的条件。在某

14、些网站搜索时,结果中会出现表示匹配程度的数字,RANK与此类似。它的值在01000之间,标识每一行与查询条件的匹配程度,程度越高,RANK的值大,通常情况下,按照RANK的降序排列。FREETEX语法FREETEX与CONTAINS类似,只是没有CONTAINS的精度高。在CONTAINS中,对查询条件的写法有很多要求,而FREETEXT就没有,可以是任意的单词,词组或句子。看下面的例子:SELECTCategoryNameFROMCategoriesWHEREFREETEXT(Description,sweetestcandybreadanddrymeat)FREETEXTTABLE语法和C

15、ONTAINSTABL一样,FREETEXTTABL返回带有KEY,RANK的表。举例说明:SELECTFT_TBL.CategoryName,FT_TBL.Description,KEY_TBL.RANKFROMCategoriesASFT_TBLINNERJOINFREETEXTTABLE(Categories,Description,sweetestcandybreadanddrymeat)ASKEY_TBLONFT_TBL.CategoryID=KEY_TBL.KEY在ASP中使用全文本检索DimcnnDimrsDimstrSQLstrSQL=SELECTbook_name&_FROMbooks&_WHERECONTAINS(description,&Request(search_condition)&)Setcnn=Server.CreateObject(ADODB.Connection)Setrs=Server.CreateObject(ADODB.RecordSet)cnn.Openprovider=sqloledb;datasource=.;initialca

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号