搜索 DB2 中的 XML 文檔需要執行的任務分成兩部分:
1、索引管理任務
2、全文搜索
本節簡要討論這兩種任務,使用的示例針對 清單 1 中定義的 “product” 表。注意,“product” 表的 “description” 和 “comments” 列是 XML 類型的(換句話說,“description” 和 “comments” XML 文檔原生存儲在數據庫中)。
清單 1. 表定義:
create table product (
pid varchar(10) primary key not null,
description XML,
comments XML
);
“product.description” 和 “product.comment” 列中存儲的 XML 數據示例分別見 圖 1 和 圖 2。後面的查詢示例搜索這些 XML 文檔的特定元素。“DB2 Viper 快速入門” (developerWorks,2006 年 3 月)討論了如何在 DB2 中插入 XML 文檔。
圖 1. “product.description” 列的數據示例
圖 2. “product.comments” 列的數據示例
首先考慮一下對 “product” 表執行文本搜索操作時需要做什麼,比如搜索在評論的 “message” 元素中有單詞 “satisfactory” 的產品的名稱,或者在描述的 “details” 元素中有短語 “sugar and creamer” 的產品的名稱。
在使用 Net Search Extender 之前,必須先啟動它的實例服務,見清單 2:啟動 Net Search Extender 實例服務的命令:
db2text start
注意,這個命令調用一個單獨的可執行程序 db2text。以後會看到,任何文本索引管理任務都需要用命令 db2text 來執行。
在啟動 Net Search Extender 之後,對 DB2 數據庫啟用文本搜索操作。這個步驟創建必需的管理表以及各種用戶定義函數(UDF)和存儲過程(STP),這是對 DB2 數據進行全文搜索所需要的,而且對每個數據庫只執行一次。
對數據庫 “test” 啟用文本搜索操作的命令如下:
清單 3. 對數據庫 “test” 啟用文本搜索操作的命令
db2text enable database for text connect to test
如果還沒有設置 DB2DBDFT 環境變量,那麼所有 Net Search Extender 管理任務都需要 connect to 子句,其中的 是數據庫的名稱。以下命令假設設置了 DB2DBDFT。
在為數據庫啟用文本搜索操作之後,可以在以各種格式(比如 XML)存儲文本數據的列上創建文本索引。create index 命令定義文本索引屬性,比如更新頻率、文檔格式、索引目錄等等,從而建立文本索引基礎設施。關於各種索引屬性的更多信息,請參考 Net Search Extender 文檔。本文中的示例使用一個基本的文本索引創建過程,見清單4:在 “product.description” 上創建文本索引 ix1
db2text create index ix1 for text on product(description)。
清單 4 中的命令在 “product” 表的 “description” 列中本機存儲的 XML 文檔上創建一個名為 “ix1” 的全文索引。
注意,在創建文本索引之後,文本搜索還不能找到任何結果,因為此時文本索引不包含任何數據。如果沒有指定更新頻率,那麼需要顯式地對數據和文本索引進行同步。對文本索引進行同步的任務稱為索引更新,通常在創建文本索引之後立即執行。
清單 5. 使文本索引與基表中的數據同步
db2text update index ix1 for text
索引更新過程可以使用清單5中的命令手工執行,也可以使用後台守護進程自動執行。自動索引更新可以在創建索引時用索引屬性指定,也可以以後使用 alter index 命令指定。
下面總結一下在 DB2 中准備全文搜索操作所需完成的步驟:
表 1. 在 DB2 中准備全文搜索操作的步驟
在完成這四個管理步驟之後,就可以對 XML 數據進行全文搜索了。那麼,可以用來尋找相關信息的實際搜索特性是什麼?