随笔:19 文章:2 评论:6 引用:0
BlogJava 首页 发新随笔
发新文章 联系 聚合管理

2006年7月12日

我个人凭借自己的眼光和技术,创作了一个有潜在商业价值的网站,中国IDC资源导航,当然名称虽然是导
航,但我的想法是作成国内IDC行业的资源整合,主要内容包括IDC导航站、商务站、资讯站、论坛四个版
块。

导航站:是收集互联网资源,为客户导航;
商务站:是整合国内现有运营商,让运营商在此建立自己的信息平台。目标是形成国际IDC商务站;
资讯站:是国内外有关IDC的新闻资讯、技术信息;

我现在是一个人在作,目前版本是1。0只有导航站。2。0正在全面开发之中,增加商务站。生成Html页,利
于搜索引擎的收录。目前使用技术是asp+sql2000,但准备在4。0时有可能全面改版,使用技术Jsp+MySql。

目前的问题,个人精力有限,开发速度慢,思维有限,希望业界精英提供好的建议,欢迎懂技术的精英加
入。现在纯属开发阶段,但可以承诺,如果项目有发展,可以分得相应股份。

QQ:316156915
Msn:yan65919@hotmail.com
E-mail:yan65919@gmail.com

目前可以看到的痕迹:www.idcdh.com
posted @ 2006-10-24 11:33 yanzhicun 阅读(390) | 评论 (1)编辑 收藏
 
今天“百年不遇”的停电了,看了一天书。晚上搞了一下全文索引,决定把心得贴出来,我尽量写的详细,大家共同学习,欢迎指正!
  
  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('a') and a.name='a' 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----------
  --调试环境:SQLServer2K、Windows2Kas
posted @ 2006-07-12 12:00 yanzhicun 阅读(607) | 评论 (0)编辑 收藏
 

在SQL 企业管理器上操作步骤:

一:进入企业管理器,打开支持服务,选取全文检索,点击启动。

 

二:对相关的数据表建立全文索引。

三:全文索引建立向导

 

 

 

然后确定提交后,建立向导就基本完成。

到这里在SQL上建立全文索引已经完成!

四:补充:由于全文填充是按照调度里设定周期进行的,所以不会马上生效,如果需要的话可以点击全目录,运行填充。通常数据量大的话不建议在访问量大的时候进行。

 

解决在全文搜索中搜索中文字符出错补丁:点击下载

解决中文字符出错问题:

方法一:
把下载解压的文件复制到...\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config\
目录下(该路径为全文目录路径,可以全文目录属性中查看)

方法二:
编辑...\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config\目录下的
noise.chs文件,清空文档,输入‘@’(其他的偏僻符号也可以)


最后,重新进行全文完全填充!

posted @ 2006-07-12 11:44 yanzhicun 阅读(361) | 评论 (0)编辑 收藏
 

引言

微软的SQL Server数据库是一个在中低端企业应用中占有广泛市场的关系型数据库系统,它以简单、方便、易用等特性深得众多软件开发人员和数据库管理人员的钟爱。但SQL Server 7.0以前的数据库系统由于没有全文检索功能,致使无法提供像文本内容查找此类的服务,成为一个小小的遗憾。从SQL Server 7.0起,到如今的SQL Server 2000终于具备了全文检索功能,使用户可以高效地检索存储在数据库char、varchar、text、ntext、nchar、nvarchar等数据类型列中的文本数据。

建立全文索引

在进行全文检索之前,必须先建立和填充数据库全文索引。为了支持全文索引操作,SQL Server 7.0新增了一些存储过程和Transact-SQL语句。使用这些存储过程创建全文索引的具体步骤如下(括号内为调用的存储过程名称):

1. 启动数据库的全文处理功能(sp_fulltext_

database);;

2. 建立全文检索目录(sp_fulltext_catalog);

3.在全文检索目录中注册需要全文索引的表(sp_fulltext_table);

4. 指出表中需要全文检索的列名(sp_fulltext_

column);;

5. 为表创建全文索引(sp_fulltext_table);;

6. 填充全文检索目录(sp_fulltext_catalog)。

下面举例说明如何创建全文索引,在本例中,对Test数据库Book表中Title列和Notes列建立全文索引。

use test //打开数据库

//打开全文索引支持,启动SQL Server的全文搜索服务

execute sp_fulltext_database ‘enable’

//建立全文检索目录ft_test

execute sp_fulltext_catalog ‘ft_test’, ‘create’

为Title列建立全文索引数据元,pk_title为Book表中由主键所建立的唯一索引,这个参数是必需的。

execute sp_fulltext_table ‘book’,‘create’, ‘ft_test’,‘pk_title’

//设置全文索引列名

execute sp_fulltext_column ‘book’, ‘title’, ‘add’

execute sp_fulltext_column ‘book’,‘notes’, ‘add’

//建立全文索引

execute sp_fulltext_table ‘book’, ‘activate’

//填充全文索引目录

execute sp_fulltext_catalog ‘ft_test’, ‘start_full’

至此,全文索引建立完毕。

进行全文检索

SQL Server 2000提供的全文检索语句主要有CONTAINS和FREETEXT。CONTAINS语句的功能是在表的所有列或指定列中搜索:一个字或短语;一个字或短语的前缀;与一个字相近的另一个字;一个字的派生字;一个重复出现的字。

CONTAINS语句的语法格式为:

CONTAINS({column | *}), <contains_search

_condition>)

其中,column是搜索列,使用“*”时说明对表中所有全文索引列进行搜索。Contains_search_

condition 说明CONTAINS语句的搜索内容,其语法格式为:

{<simple_term>|<prefix_term>|<proximity_term>|<generation_term>|<weighted_term>}[{{AND|AND NOT|OR}<contains_search_condition>}] [...n]

下面就simple_term和prefix_term参数做简要说明:

simple_term是CONTAINS语句所搜索的单字或短语,当搜索的是一个短语时,必须使用双引号作为定界符。其格式为:

{‘word’|“ phrase”}

prefix_term说明CONTAINS语句所搜索的字或短语前缀,其格式为:

{“word*” | “phrase*”}

例如,下面语句检索Book表的Title列和Notes列中包含“database”或“computer”字符串的图书名称及其注释信息:

select title, notes

from book

where contains(tilte, ‘database’) or contains(notes,‘database’)

or contains(title,‘computer’) or contains(notes,‘computer’)

FREETEXT语句的功能是在一个表的所有列或指定列中搜索一个自由文本格式的字符串,并返回与该字符串匹配的数据行。所以,FREETEXT语句所执行的功能又称做自由式全文查询。

FREETEXT语句的语法格式为:FREETEXT({column | * },‘freetext_string’)

其中,column是被搜索列,使用“*”时说明对表中的所有全文索引列进行搜索。Freetext_string参数指出所搜索的自由文本格式字符串。

例如,下面语句使用FREETEXT语句搜索Book表中包含“Successful Life”字符串的数据行:

select title, notes

from book

where freetext(*,‘Successful Life’)

posted @ 2006-07-12 11:42 yanzhicun 阅读(445) | 评论 (0)编辑 收藏
 
使用SQL SERVER 2000的全文检索功能 

  
步骤:

1、  打开NorthWind数据库,右键Products表,选择“全文索引表”,“在表上定义全文索引”,为其创建全文目录。在“全文索引向导”中,选择你需要全文查询条件的列(可以是文本或图像),我们选择Productname和QuantityPerUnit列。然后下一步,输入一个新的目录proCatalog,点击下一步。在填充调度一项里,我们暂时不建立填充调度。接着“下一步”,全成全文索引向导。完成后,我们可以看到在“全文目录”里,多了一个全文目录proCatalog。右键proCatalog属性,可以看到其状态、表、调度情况。
2、  右键全文目录proCatalog, “启动完全填充”,系统会出现“全文目录填充成功启动”。
3、  这时,我们可以使用Transact-SQL进行全文检索了,我们使用CONTAINS、FREETEXT等谓词。如:


检索ProductName中,即包含b又包含c的所有列

SELECT *

FROM Products

WHERE CONTAINS(ProductName, '"c*" and "b*" ')

 

检索ProductName中,即包含chai chang tofu之一的所有列

SELECT *

FROM Products

WHERE FREETEXT(ProductName, 'chai chang tofu ')

 

我们还可以使用CONTAINSTABLE、FREETEXTTABLE等

 

4、  我们可以用.NET创建WEB或Form客户端,提供一个良好的全文检索界面,使自己的应用程序得到扩展

 

 

 

参考:
全文查询有关的系统存储过程

(1)启动数据库的全文处理功能(sp_fulltext_datebase); 
(2)建立全文目录(sp_fulltext_catalog); 
(3)在全文目录中注册需要全文索引的表(sp_fulltext_table); 
(4)指出表中需要全文检索的列名(sp_fulltext_column) 
(5)为表创建全文索引(sp_fulltext_table); 
(6)填充全文索引(sp_fulltext_catalog)。

 

 

 

全文查询支持

Microsoft&reg; SQL Server&#8482; 2000 在接收带全文构造的 Transact-SQL 语句时,使用全文提供程序从 Microsoft 搜索服务检索所需信息。全文构造是 CONTAINS 或 FREETEXT 谓词,或者是 CONTAINSTABLE 或 FREETEXTTABLE 行集函数。如果不知道包含搜索条件的列,全文构造可以在全文索引中引用多列。该进程的流程如下图所示。

 


这一进程涉及的步骤包括: 

应用程序给 SQL Server 实例发送带全文构造的 Transact-SQL 语句。

SQL Server 关系引擎通过查询系统表验证全文构造,确定全文索引是否覆盖列引用。关系引擎将每个 SQL 语句简化为一系列行集操作,并使用 OLE DB 将这些操作传递给基础组件,通常是存储引擎。关系引擎通过全文提供程序而不是存储引擎,将任何全文构造转换成对行集的请求。请求的行集是满足搜索条件和等级的键集,而这个等级表示每个键的数据满足搜索条件的程度。向全文提供程序发送的行集请求命令包括全文检索条件。

全文提供程序验证请求并将搜索条件更改为由Microsoft 搜索服务的查询支持组件使用的形式。将请求发送到搜索服务。

查询支持组件使用搜索引擎组件从全文索引析取所请求的数据。然后以行集的形式将这些数据传递回全文提供程序。

全文提供程序将这个行集返回给关系引擎。

关系引擎将它从存储引擎和全文提供程序收到的所有行集进行组合,以生成发送回客户端的最终结果集。 

 

全文目录和索引

Microsoft&reg; SQL Server&#8482; 2000 全文索引为在字符串数据中进行复杂的词搜索提供有效支持。全文索引存储关于重要词和这些词在特定列中的位置的信息。全文查询利用这些信息,可快速搜索包含具体某个词或一组词的行。

全文索引包含在全文目录中。每个数据库可以包含一个或多个全文目录。一个目录不能属于多个数据库,而每个目录可以包含一个或多个表的全文索引。一个表只能有一个全文索引,因此每个有全文索引的表只属于一个全文目录。

全文目录和索引不存储在它们所属的数据库中。目录和索引由 Microsoft 搜索服务分开管理。

全文索引必须在基表上定义,而不能在视图、系统表或临时表上定义。 全文索引的定义包括: 

能唯一标识表中各行的列(主键或候选键),而且不允许 NULL 值。

索引所覆盖的一个或多个字符串列。 

全文索引由键值填充。每个键的项提供与该键相关联的重要词(干扰词或终止词除外)、它们所在的列和它们在列中的位置等有关信息。

格式化文本字符串(如 Microsoft&reg; Word&#8482; 文档文件或 HTML 文件)不能存储在字符串或 Unicode 列中,因为这些文件中的许多字节包含不构成有效字符的数据结构。数据库应用程序可能仍需要访问这些数据并对其应用全文检索。因为 image 列并不要求每一字节都构成一个有效字符,所以许多站点将这类数据存储在 image 列中。SQL Server 2000 引入了对存储在 image 列中的这些类型的数据执行全文检索的能力。SQL Server 2000 提供筛选,可从 Microsoft Office&#8482; 文件(.doc、.xls 和 .ppt 文件)、文本文件(.txt 文件)及 HTML 文件(.htm 文件)中析取文本化数据。设计表时除包括保存数据的 image 列外,还需包括绑定列来保存存储在 image 列中的数据格式的文件扩展名。可以创建引用 image 列和绑定列的全文索引,以便在存储于 image 列中的文本化信息上启用全文检索。SQL Server 2000 全文检索引擎使用绑定列中的文件扩展名信息,选择从列中析取文本化数据的合适的筛选。

全文索引是用于执行两个 Transact-SQL 谓词的组件,以便根据全文检索条件对行进行测试: 

CONTAINS

FREETEXT 

Transact-SQL 还包含两个返回符合全文检索条件的行集的函数: 

CONTAINSTABLE

FREETEXTTABLE 

SQL Server 在内部将搜索条件发送给 Microsoft 搜索服务。Microsoft 搜索服务查找所有符合全文检索条件的键并将它们返回给 SQL Server。SQL Server 随后使用键的列表来确定表中要处理的行。

全文索引

对 Microsoft&reg; SQL Server&#8482; 2000 数据的全文支持涉及两个功能:对字符数据发出查询的能力和创建及维护基础索引以简化这些查询的能力。

全文索引在许多地方与普通的 SQL 索引不同。

普通 SQL 索引
 全文索引
 
存储时受定义它们所在的数据库的控制。
 存储在文件系统中,但通过数据库管理。
 
每个表允许有若干个普通索引。
 每个表只允许有一个全文索引。
 
当对作为其基础的数据进行插入、更新或删除时,它们自动更新。
 将数据添加到全文索引称为填充,全文索引可通过调度或特定请求来请求,也可以在添加新数据时自动发生。
 
不分组。
 在同一个数据库内分组为一个或多个全文目录。
 
使用 SQL Server 企业管理器、向导或 Transact-SQL 语句创建和除去。
 使用 SQL Server 企业管理器、向导或存储过程创建、管理和除去。
 


 

这些差异使大量管理任务变得不可缺少。全文管理是在几个层次上实施的: 

服务器 

可以对服务器范围的某些属性(如 resource_usage)加以设置,以便增加或减少全文服务所使用的系统资源数量。


说明  全文引擎作为名为 Microsoft 搜索的服务在 Microsoft Windows NT&reg; Server 和 Microsoft Windows&reg; 2000 Server 上运行。对于 Microsoft SQL Server 个人版,Microsoft 搜索服务不可用。尽管这意味着 Microsoft 搜索服务既未安装在 Microsoft Windows 95/98 上,也未安装在 Windows NT 工作站或 Windows 2000 Professional 客户端上,但这些客户端在连接到 SQL Server 标准版安装或企业版实例时可以使用这项服务。

数据库 

必须启用数据库才能使用全文服务。可以在已启用的数据库中创建和除去一个或多个全文目录的元数据。

全文目录 

全文目录包含数据库中的全文索引。每个目录可以用于数据库内的一个或多个表的索引需求。该目录中的索引是使用这里介绍的管理功能来填充的。(全文目录必须驻留在与 SQL Server 实例相关联的本地硬盘驱动器上。不支持可移动的驱动器、软盘和网络驱动器)。在每个服务器上最多可创建 256 个全文目录。


说明  Windows NT 故障转移群集环境完全支持全文索引。有关更多信息,请参见在故障转移群集中运行全文查询。

表 

首先,必须为全文支持启用表。然后,为与该表相关联的全文索引创建元数据(如表名及其全文目录)。表启用后,可以用为全文支持而启用的列中的数据填充它。如果表的全文定义被更改(例如,添加一个也将为全文检索而索引的新列),则必须重新填充相关的全文目录以使全文索引与新的全文定义同步。

列 

可以从非活动的注册表中添加或除去支持全文查询的列。

在所有这些级别上,可使用工具检索元数据和状态信息。

和常规 SQL 索引一样,当在相关表中修改数据时,可自动更新全文索引。或者,也可以适当的间隔手工重新填充全文索引。这种重写可能既耗时又大量占用资源,因此,在数据库活动较少时,这通常是在后台运行的异步进程。

应将具有相同更新特性的表(如更改少的与更改多的,或在一天的特定时段内频繁更改的表)组合在一起,并分配给相同的全文目录。通过以此方法设置全文目录填充调度,使得全文索引和表保持同步,且在数据库活动较多时不对数据库服务器的资源使用产生负面影响。

为全文目录中的表安排全文索引的位置是非常重要的。在为全文目录指定表时,应该注意下列基本原则: 

始终选择可用于全文唯一键的最小唯一索引。(4 个字节且基于整数的索引是最佳的。)这将显著减少文件系统中 Microsoft 搜索服务所需要的资源。如果主键很大(超过 100 字节),可以考虑选择表中其它唯一索引(或创建另一个唯一索引)作为全文唯一键。否则,如果全文唯一键的大小达到允许的上限(450 字节),全文填充将无法继续进行。

如果进行索引的表有成千上万行,请将该表指定给其自己的全文目录。

应该考虑对其进行全文索引的表中发生的更改数以及表的行数。如果要更改的总行数,加上上次全文填充期间表中出现的行数达到成千上万行,请将该表指定给其自己的全文目录。 

请参见

sp_fulltext_table

CONTAINS

一个谓词,用于搜索包含基于字符的数据类型的列,该列与单个词和短语,以及与另一个词一定范围之内的近似词精确或模糊(不太精确的)匹配或者加权匹配。CONTAINS 可以搜索: 

词或短语。

词或短语的前缀。

另一个词附近的词。

由另一个词的词尾变化生成的词(例如,词 drive 是 drives、drove、driving 和 driven 词尾变化的词干)。

比另一个词具有更高加权的词。 

语法
CONTAINS
    ( { column | * } , '< contains_search_condition >'      

 

FREETEXT

是个谓词,用于搜索含有基于字符的数据类型的列,其中的值符合在搜索条件中所指定文本的含义,但不符合表达方式。使用 FREETEXT 时,全文查询引擎内部将 freetext_string 拆分为若干个搜索词,并赋予每个词以不同的加权,然后查找匹配。

语法

FREETEXT ( { column | * } , 'freetext_string' 

 

CONTAINSTABLE 和 FREETEXTTABLE 函数用来指定返回每行的相对排名的全文查询。这两个函数与全文谓词 CONTAINS 和 FREETEXT 很相似,但是用法不同。

(此文部分资料来自MSDN)
posted @ 2006-07-12 11:39 yanzhicun 阅读(552) | 评论 (0)编辑 收藏
CALENDER
<2006年7月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(1)

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜


Powered By: 博客园
模板提供沪江博客