技术开发 频道

SQL Server 2005全文检索技术


【IT168 技术文档】

    4.2 多个全文检索结果的前期设计 

    受到全文检索仅仅支持单个表的限制,每个全文检索的结果相对有限。但是,对于用户而言他们常常做的是一个模糊的关键词在通盘信息中的检索,这些工作应该由开发人员在应用层通过搜索引擎帮助用户进行后台的合并。此外,对于整个政府行业和大型的企业而言,非结构化文本数据和结构化二进制信息资源很可能物理上分散在不同的物理位置上。因此,对于高层的决策者和信息工作者而言,他们也需要查询引擎内部提供检索结果合并的支持。 

    这里,基于上文笔者提出的统一检索结果Schema,统一全文检索系统需要提供一个配置库,用于保存不同全文检索功能需要把哪些检索命令的执行结果进行合并,此外考虑到个别高级用户的需要,还需要提供给这一部分用户Ad-Hoc同时全文检索多个数据内容(甚至是多个信息源)的支持。为了说明这个数据合并的过程,这里笔者假设了一个业务应用情形:

 (1)AdventureWorks公司的高管、人事、财务等部门位于A城的总部(Headquarter),使用的是SQL Server 2005。

 (2)AdventureWorks公司的仓库位于B城,但是生产系统与总部是互联的,使用的是SQL Server 2005。

 (3)AdventureWorks公司的1号工厂位于C城,但是生产系统与总部是互联的,使用的是SQL Server 2005。

 (4)AdventureWorks公司最近收购了Northwind的工厂,作为它的2号工厂,这个工厂也位于B城,但是生产系统与AdventureWorks总部和原有的仓库也是互联的,使用的是Oracle 9i,但是产品信息很少,相关产品绝大多数都是在本地销售。

图7:示例应用的地理分布关系

    那么根据各地的信息,如果要查询和“中国”相关的信息,各自相关的全文检索命令类似下表。

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

表3:查询的配置表 (Q : Query)

    说明如下。 

    这里既有全文检索也有关系数据库查询,例如:由于Northwind由于产品信息很少,而且登记产品的时候还登记了产品的来源国,所以完全可以通过关系数据库查询完成检索工作。

 其他全文检索的示例都采用的是本地搜索特定词或短语(简单词条)的方式。


 与可以直接执行的语句不同,这里每个查询的FROM对象前面还有个<prefix>,它的内容会根据查询是本地还是远程链接服务器在运行态动态修改的。

0
相关文章