CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

高分求全文检索的具体做法!!

楼主pangyong0221(Forget)2005-12-10 16:17:48 在 .NET技术 / ASP.NET 提问

请详细说一下全文搜索的思路,不胜感激! 问题点数:100、回复次数:5Top

1 楼pangyong0221(Forget)回复于 2005-12-10 16:18:32 得分 0

全文检索Top

2 楼smx717616(又笨又不努力)回复于 2005-12-10 16:36:22 得分 10

http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=199232Top

3 楼smx717616(又笨又不努力)回复于 2005-12-10 16:37:30 得分 40

全文索引和查询概念(摘自SQL     联机帮助)      
     
  全文索引、查询和同步化最主要的设计要求是,在注册进行全文检索的所有表上都有一个唯一的全文键列(或者单列主键)。全文索引对使用的重要字及其所在位置进行跟踪。      
     
  例如,假定有一个对     DevTools     表的全文索引。全文索引可能指出在     Abstract     列的第     423     个和第     982     个单词处找到了单词     Microsoft,所在的行与     ProductID     6     关联。该索引结构支持对所有包含被索引单词的项进行有效检索,以及高级检索操作,如短语检索和邻近检索。      
     
  为防止全文索引因包含很多对检索没有帮助的词而变得臃肿,a、and、is     或     the     这类额外的词都忽略不计。例如,指定"the     products     ordered     during     these     summer     months"与指定"products     ordered     during     summer     months"是一样的。有这两个字符串的行都会被返回。      
     
  目录     \Mssql\Ftdata\Sqlserver\Config     下提供了多种语言的干扰词列表。在安装带有全文检索支持的     Microsoft®     SQL     Server™     时会创建这个目录,并同时安装干扰词文件。干扰词文件可以编辑。例如,高技术公司的系统管理员可以把单词     computer     添加到他们的干扰词表中去。(如果编辑干扰词文件,则必须在更改生效之前重新填充全文目录。)下表显示了干扰词文件及其相应的语言。      
     
  干扰词文件                         语言          
  --------------     ---------      
  Noise.chs                         简体中文          
  Noise.cht                         繁体中文          
  Noise.dat                         语言中性          
  Noise.deu                         德语          
  Noise.eng                         英语(英国)          
  Noise.enu                         英语(美国)          
  Noise.esn                         西班牙语          
  Noise.fra                         法语          
  Noise.ita                         意大利语          
  Noise.jpn                         日语          
  Noise.kor                         韩文          
  Noise.nld                         荷兰语          
  Noise.sve                         瑞典语          
     
     
  在处理全文查询时,检索引擎将满足检条件的行的键值返回给     Microsoft     SQL     Server。比如有一个     SciFi     表,其中     Book_No     列是主键列。      
     
  Book_No             Writer                     Title          
  --------     -----------     --------------------------      
  A025                     Asimov                         Foundation's     Edge          
  A027                     Asimov                         Foundation     and     Empire          
  C011                     Clarke                         Childhood's     End          
  V109                     Verne                             Mysterious     Island          
     
     
  假定想使用一个全文检索查询来查找包含单词     Foundation     的书名。在本例中,将从全文索引获得值     A025     和     A027。然后     SQL     Server     用这些键值和其它栏的信息响应该查询。      
     
  下表显示了存储全文索引数据所使用的语言。这些语言基于     SQL     Server     安装期间选择的     Unicode     排序规则区域设置标识符。      
     
  Unicode     排序规则区域设置标识符                 全文数据存储所用的语言          
  -------------------------------     -----------------------      
  中文注音符号(台湾)                                                         繁体中文              
  汉语拼音                                                                                                     简体中文              
  中文笔画                                                                                                     简体中文              
  中文笔画(台湾)                                                                     繁体中文              
  荷兰语                                                                                                             荷兰语              
  英语(英国)                                                                                     英语(英国)              
  法语                                                                                                                 法语              
  通用     Unicode                                                                                 英语(美国)              
  德语                                                                                                                 德语              
  德文电话簿                                                                                             德语              
  意大利语                                                                                                     意大利语              
  日语                                                                                                                 日语              
  日语     Unicode                                                                                 日语              
  韩文                                                                                                                 韩文              
  韩文     Unicode                                                                                 韩文              
  西班牙语(现代)                                                                     西班牙语              
  瑞典/芬兰语                                                                                         瑞典语              
     
     
     
  此列表中没有的其它所有     Unicode     排序规则区域设置标识符值都映射到使用空格分隔单词的中性语言单词的断字符和词干分隔符。      
     
  说明         Unicode     排序规则区域设置标识符设置用于所有可进行全文索引的数据类型(如     char、nchar     等)。如果为     char、varchar     或     text     类型列的排序次序设置的语言类型,不是     Unicode     排序规则区域设置标识符语言,那么在对     char、varchar     和     text     类型的列进行全文索引和查询时,仍然使用     Unicode     排序规则区域设置标识符值。      
     
     
  Top

4 楼smx717616(又笨又不努力)回复于 2005-12-10 16:37:38 得分 50

---------------------------------------------------------------      
     
  创建全文索引(以索引image列为例,其他类型字段大致一样)      
     
  标题                     全文索引image列,全攻略!      
  作者                     pengdali     [原作]              
  关键字             全文索引     image          
     
         
    今天“百年不遇”的停电了,看了一天书。晚上搞了一下全文索引,决定把心得贴出来,我尽量写的详细,大家共同学习,欢迎指正!      
     
  1、启动     Microsoft     Search     服务      
            开始菜单-->SQL程序组-->服务管理器-->下拉筐-->Microsoft     Search     服务-->启动它      
     
  2、      
        ..\Microsoft     SQL     Server\MSSQL\FTDATA\SQLServer\Config\目录里建一个非空noise.chs文件      
        非空noise.chs文件,也有人说是空的noise.chs文件,但我每次都往里写几个没用的字母。      
     
  3、建立环境      
            打开查询分析器-->执行下列脚本:      
  --------------------------------------------      
  create     database     test     ---创建test数据库      
  use     test                                                     ---选择test数据库      
  create     table         dali     (ID     int     not     null     primary     key,MyImage     image,FileType     varchar(255),FileNmae     varchar(255))     ---创建dali表      
  --dali表中     Id,MyImage,FileType     三列是必须的,因为要对image列索引的话,必须要有一个主键列,一个image列,一个存放文件类型的列      
  --我们知道在windows系统中文件类型是靠扩展名来区分的所以FileType列也就是用来放     文件的扩展名      
  --------------------------------------------      
     
  sp_fulltext_database     'enable'     --为全文索引启用数据库      
  sp_fulltext_catalog     'My_FullDir',     'create'         ---创建一个叫My_FullDif的全文目录      
     
  declare     @Key     sysname     ;     select     @Key=c.name     from     syscolumns     a,sysconstraints     b,sysobjects     c     where     a.id=object_id('dali')     and     a.name='ID'     and     a.id=b.id     and     b.constid=c.id     and     c.name     like     'PK%'      
  exec     sp_fulltext_table     'dali','create','My_FullDir',@Key         ----这两句是为全文索引,对表进行标记      
     
  sp_fulltext_column     'dali','MyImage','add',0x0804,'FileType'         ---这句是指定MyImage列为全文索引列,FileType是类型列      
  ------------------------------------------------      
  4、在c盘下放一个扩展名为doc的word文件,一个扩展名为xls的excel文件,一个扩展名为htm的网页文件,个扩展名为bmp的图片      
            共4个,大家可根据实际情况放入!      
     
  5、插入数据      
        建立下面这个存储过程      
  --------------------------------------------------      
  CREATE     PROCEDURE     sp_textcopy          
        @srvname                 varchar     (30),          
        @login                         varchar     (30),          
        @password                 varchar     (30),          
        @dbname                         varchar     (30),          
        @tbname                         varchar     (30),          
        @colname                 varchar     (30),          
        @filename                 varchar     (30),          
        @whereclause     varchar     (40),          
        @direction         char(1)          
  AS          
  /*     这是使用textcopy工具将文件插入到数据库中,如果有前台工具可以用前台开发工具将文件插入,这里为了演示     */      
  DECLARE     @exec_str     varchar     (255)          
  SELECT     @exec_str='textcopy     /S     '+@srvname+'     /U     '+@login+'     /P     '+@password+'     /D     '+@dbname+'     /T'+@tbname+'     /C     '+@colname+'     /W"'+@whereclause+'"     /F"'+@filename+'"     /'+@direction      
  EXEC     master..xp_cmdshell     @exec_str      
  ----------------------------------------------------      
     
  insert     dali     values(1,0x,'doc','大力的doc')     ---其中第二列是     0x     它是一个16进制数对应image列,是必须的,不要写null,第三列是文件类型,既扩展名      
     
  sp_textcopy     '你的服务器名','sa','你的密码','test','dali','MyImage','c:\大力的doc.doc','where     ID=1','I'      
  -------依次参数是:实例名,用户名,密码,数据库名,表名,image列名,路径及文件名,条件(你必须保证它只选择一行),I      
  ---------------------------------------------------------------------------------------------------------------------      
  insert     dali     values(2,0x,'bmp','图片')      
  sp_textcopy     '你的服务器名','sa','你的密码','test','dali','MyImage','c:\图片.bmp','where     ID=2','I'     --注意条件是     ID=2      
     
  insert     dali     values(3,0x,'xls','Excel文件')      
  sp_textcopy     '你的服务器名','sa','你的密码','test','dali','MyImage','c:\Excel文件.xls','where     ID=3','I'     --注意条件是     ID=3      
     
  insert     dali     values(4,0x,'htm','网页')      
  sp_textcopy     '你的服务器名','sa','你的密码','test','dali','MyImage','c:\网页.htm','where     ID=4','I'     --注意条件是     ID=4      
     
  ----------上面的语句,要保证类型一样,路径正确,条件唯一正确应该就可以了      
     
  6、填充全文索引      
     
  sp_fulltext_table     'dali','start_full'     ---第一个参数是表名,第二个参数是启动表的全文索引的完全填充      
     
  7、可以开始你的实验了      
     
  select     *     from     dali     where     contains(MyImage,'J老师')      
     
  select     *     from     dali     where     contains(MyImage,'海老师')      
     
  ------END----------      
  --调试环境:SQLServer2000企业版、Windows2000高级服务器      
     
  ---------------------------------------------------------------------------      
     
  全文索引中的几个问题:      
     
  1.搜索时出现错误:      
        服务器:     消息     7619,级别     16,状态     1,行     2      
        查询子句只包含被忽略的词      
     
        这种情况修改     \Mssql\Ftdata\Sqlserver\Config     下对应语言的干扰词列表文件      
     
  2.修改了干扰词文件,查询中文时仍然出现上述问题      
        a.首先检查你的SQL有没有安装最新的补丁,检查的方法是在查询分析器中运行:      
                select     @@version      
                如果出来的版本号是8.00.760以下,则表明你未安装sp3的补丁,要装上.      
     
                SQL补丁下载:      
                http://www.microsoft.com/downloads/d  
  Top

5 楼sugarsupper(智慧之刃)回复于 2005-12-10 17:20:55 得分 0

markTop

相关问题

  • 全文检索
  • 全文检索(急)
  • 关于SQL全文检索
  • 如何做全文检索?
  • 全文检索的问题?
  • 文件的全文检索
  • 全文检索问题,急!
  • CS-全文检索相关
  • 全文检索的问题。
  • asp中全文检索

关键词

  • 检索
  • 文件
  • 排序
  • 语言
  • 中文
  • 查询
  • 区域
  • 数据库
  • 全文
  • 索引

得分解答快速导航

  • 帖主:pangyong0221
  • smx717616
  • smx717616
  • smx717616

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo