(3)通过SQL Server Cluster,借助Scale out或者Scale up分担负载。
5.2 内存
由于全文检索的过程需要在内容临时存放大量的中间结果,因此内存也很容易成为应用的瓶颈。
Catalog Counter
Memory Available MBytes
Page Reads/sec
Pages/sec
Cache Bytes
Cache Faults/sec
Server Pool Nonpaged Failures
Pool Nonpaged Peak
Cache MDL Read Hits %
表6:判断内存瓶颈的主要指标
下面对于一台单纯进行全文检索的服务器而言,是一个典型的内存瓶颈结果。
图11:内存成为系统瓶颈
根据全文检索的应用经验,处理上主要可以采取如下办法:
(1)减少应用的并发。
(2)配置SQL Job,把长时间挂起或者工作时间没有必要的过大查询的session清理。
(3)优化检索语句。
(4)尽量精确限制条件,可能的话尽量在尺寸较小的列上定义全文检索索引。
(5)适当增加内存。
(6)根据用户需要,使用TOP_<N>_BY_RANK,而不是把所有符合条件的内容全部提取。
5.3 磁盘IO
如果平均磁盘等待队列长度多于磁盘头数量的两倍,则磁盘成为瓶颈。主要的解决方法是创建独立于 SQL Server 数据库文件和日志的全文目录。将日志、数据库文件和全文目录分别放在不同的磁盘上。购买运行速度更快的磁盘和使用 RAID 也能帮助改善索引性能。
Catalog Counter
PhysicalDisk Avg. Disk Queue Length
Avg. Disk Read Queue Length
Avg. Disk Write Queue Length
Avg. Disk sec/Read
Avg. Disk sec/Transfer
Disk Writes/sec
(7)检查全文查询计划以确保选择了适当的联接计划。若有必要,可使用一个联接提示或查询提示。如果全文查询中使用了参数,则该参数的第一时间值决定查询计划。可使用 OPTIMIZE FOR 查询提示来强制使用所需值编写查询。这有助于获得确定性查询和更好的性能。
6. 更多的集成选择
当然,SQL Server 2005的全文检索不是微软平台上的唯一选择,其他主要的全文检索技术如下:
(1)Index Server, Indexing Service for Microsoft Windows
(2)Microsoft SharePoint? Portal Server 2001(及后续版本)
(3)Microsoft SQL Server 7.0 、SQL Server 2000、SQL Server 2005
(4)Microsoft Exchange Server 2000(及后续版本)
(5)Microsoft Site Server 3.0
(6)Microsoft Office XP(及后续版本)
对于这些全文检索技术,笔者不准备展开介绍,只不过提醒您的是这些技术既有操作系统内置的也有需要购买服务器端产品才可以获得的,它们的检索对象领域各有不同。不过它们都具有微软平台产品普遍开发比较容易的特点,如果您要提供企业全文检索的同时,还考虑提供用户本地桌面或者是文件服务器、Web服务器内容检索的话,完全不必把它们登记到SQL Server 2005里,直接使用对应的技术通过简单的开发即可,结合笔者上文提供查询结果合并的办法一样可以快速的完成系统集成。
7. 总结
本文笔者简单介绍了SQL Server 2005的全文检索技术,及其如何应用于企业级的检索环境,文章最后还提供了其他微软平台全文检索技术的特性对别,结合关系数据库查询、多维数据分析、XML数据查询,希望您可以参照上文的合并方式真正的把本政府行业或者企业内部的信息用起来,真正做到“随时、随地、任何设备上您的数据就在指尖。”
URL Title Doc
Type
Content Inventory
Date
Extension
Http://
www.ViT.com
Full-text
Data
Definition
Language
PDF Microsoft SQL Server 2005 introduces new Transact-SQL data definition language (DDL) statements for creating, implementing, and managing full-text catalogs and indexes. The following is a list of the new Full-Text Search DDL statements.
那么根据各地的信息,如果要查询和“中国”相关的信息,各自相关的全文检索命令类似下表。
ID
编号 Title
检索内容 Site 位置 DB
数据库 Command
检索命令示例
Q_01 A点人事信息 A Adventureworks SELECT Comments,StartWorkDate
FROM <prefix>HR.Employee
WHERE CONTAINS(Comments, ' "from china" ');
GO
Q_02 A点财务信息 A Adventureworks SELECT Notes,AccountDate
FROM <prefix>Finance.Expanse
WHERE CONTAINS(Notes, ' " china" ');
GO
Q_03 B点仓库信息 B Adventureworks SELECT Note, RegisterDate
FROM <prefix>Warehouse.Inventory
WHERE CONTAINS(Note, ' "from china" ');
GO
Q_04 2号工厂的产品信息。
(已将Oracle的信息导入到SQL Server 2005的Northwind数据库)
B Northwind SELECT COMMENT, INPUT_DATE
FROM <prefix>PRODUCT_LIST
WHERE ORIGINAL_COUNTRY = 'CHINA'
GO
Q_05 1号工厂的产品信息 C Adventureworks SELECT Note, InputDate
FROM <prefix>Production.Producct
WHERE CONTAINS(Note, ' "from china" ');
GO
ID
编号
Name
名称 From
从 To
至 DB
数据库 Comment 检索命令示例
LS_01 LSAtoBwithAdventureworks A B Adventureworks A城SQL Server到B城SQL Server Adventureworks数据库的连接服务器
LS_02 LSAtoBwithNorthwind A B Northwind A城SQL Server到B城SQL Server Northwind数据库的连接服务器
LS_03 LSAtoCwithAdventureworks A C Adventureworks A城SQL Server到C城SQL Server Adventureworks数据库的连接服务器
LS_04 LSCtoAwithAdventureworks C A Adventureworks C城SQL Server到A城SQL Server Adventureworks数据库的连接服务器
LS_05 LSBtoAwithAdventureworks B A Adventureworks B城SQL Server到A城SQL Server Adventureworks数据库的连接服务器
对于第一种,由于都是SQL Server的内置类型,因此数据提取很容易。对于后两种,为了保证Word、Excel、Power Point之类的格式化二进制数据可以被检索,一般在规划上还要增加伪列来标明对应的文件扩展名。这样,可以保证SQL Server 2005全文检索的过滤器可以从对应的文件中提取出需要的文本内容,并把它通过断字符拆分成有效的词汇列表(Wordlist)。集成方式如下:
图3:标准VarBinary(max)、Image、XML类型的集成方式
通过查询视图sys.fulltext_document_types可以获得已经安装的过滤器(即支持的文档类型),下面是现有SQL Server 2005默认支持的文档类型:
说明如下:每个中心内部的异构数据源的导入在本数据中心内部完成;不同数据中心间通过双向的Linked Server完成;但是对于每个点视为其他中心对自己的单向Linked Server;客户端全文检索在就近的SQL Server 2005服务器上执行。
3.4 引入政府行业或者企业自身的的数据字典
为了让SQL Server 2005的全文检索更适于本政府行业或者企业使用,还需要把自己特色的缩略语、书面替换语进行配置。但是,在此之前,还要把主要使用的语言的相关信息进行配置,主要是配置相关的断字符和干扰字。
SQL Server 2005的断字符配置是根据语言分析规则而异,可以为每个全文索引列指定不同的语言。每种语言的断字符能够使得为该语言生成的词更加准确。如果断字符用于整个语系而不是特定的子语言,将使用该语系中的主要语言。例如,使用法语断字符来处理加拿大法语文本。如果某一特定语言没有可用的断字符,将使用非特定语言断字符。使用非特定语言断字符时,词将在非特定语言字符(如空格和标点符号)处断开。
SQL Server 2005 包含 23 种区域设置的断字符。通过参阅 sys.fulltext_languages 就可以获得所有支持语言的列表。
地区编号 语言
2052 Simplified Chinese
1028 Traditional Chinese
1031 German
2057 British English
1033 English
3082 Spanish
1036 French
1040 Italian
1041 Japanese
1042 Korean
0 Neutral
1043 Dutch
1053 Swedish
1054 Thai
3076 Chinese (Hong Kong SAR, PRC)
5124 Chinese (Macau SAR)
4100 Chinese (Singapore)
表2:SQL Server 2005支持的23种区域语言
注:所查询的全文索引列的语言决定了对 CONTAINS、FREETEXT、CONTAINSTABLE 和 FREETEXTTABLE 等全文查询函数的参数执行的语言分析。如果未指定列的语言,默认值是配置选项 default full-text language 的值。对于SQL Server 2005的本地版本,SQL Server 安装程序将把 default full-text language 选项设置为操作系统使用的语言;对于 SQL Server 的非本地化版本,default full-text language 选项为“英语”。
在明确了区域语言之后,还需要进行本政府行业或者企业的定制化操作:
(1)在$<SQL Server Install Path>\Microsoft SQL Server\MSSQL.1\MSSQL\FTDATA\中配置对应的干扰词,可以在对应的noise***.文件中增加或者修改干扰词。
图1:Your Data,Any Where、Any Time、Any Device. But not on your finger.
1.2 主要检索技术的区别
有了数据但是没有被使用,那么这些数据不应该被称为信息。它们无非是不断充斥设备和网络的比特而已,但是如何把数据提供给必要的人员,检索技术是其中非常有效的途径之一。本文笔者主要基于微软平台,针对SQL Server 2005提供的全文检索技术进行介绍。与关系数据查询、多维数据库查询和基于XML的XQuery、XPath不同,全文检索技术主要处理对象是基于超大数据量的文本数据和结构化的二进制数据上类似LIKE的模糊查询。主要区别见下表。