隨著資料量爆炸與用戶激增,傳統 Web 應用將查詢與全文檢索直接下推至 DB2,導致資料庫成為系統瓶頸。若引入外部搜尋引擎(如 Google 站內搜尋),又面臨結果不全、權限不可控、資安風險等問題。本文提出一種架構:讓 DB2 專注於即時性極強的核心交易(寫入、更新、強一致性查詢),將即時性要求較低的複雜查詢與全文檢索卸載給企業級搜尋平台 IBM OmniFind,從而大幅降低 DB2 壓力並提升查詢效能。
OmniFind 是企業級資訊搜尋平台,支援多元資料源(檔案系統、資料庫、郵件、ECM 等),可整合 UIMA 第三方分析元件,滿足高安全性、高可用性、高效能與擴展性需求,提供彈性部署選項。
核心優勢:查詢完全在 OmniFind 索引上執行,零 DB2 負載;目標表可省去索引,提升寫入效能並節省儲存空間;OmniFind 次秒級查詢速度遠優於 DB2 全文檢索。
DB2 V9.1、OmniFind Enterprise Edition V8.5、Windows Server 2003 同機部署。建立 PRODUCTINFO(商品主檔)與 SALESINFO(銷售明細)兩表,透過 PID 外鍵關聯,並灌入測試資料。
Plug-in 為 XML 設定檔,定義表關聯與爬取規則。關鍵點:
RelationMap 的 Root 必須是「含外鍵的表」(本例為 SALESINFO)。PID)。Field 的 Name 屬性建議帶入表名標識(如 NAME_PRODUCTINFO),便於後續特定欄位查詢。<Crawler Version="1.00">
<DataSources>
<Server DBURL="jdbc:db2://9.181.139.53:50000/liyulong">
<JDBCDriver>com.ibm.db2.jcc.DB2Driver</JDBCDriver>
<User>db2admin</User>
<Password Encryption="False">search</Password>
<RelationMap Root="ADMINISTRATOR.SALESINFO">
<Relation Parent="ADMINISTRATOR.SALESINFO" ParentAlias="T0" ParentKey="PID"
Child="ADMINISTRATOR.PRODUCTINFO" ChildAlias="T1" ChildKey="PID" />
</RelationMap>
<Target TableAlias="T1">
<Field Name="PID" FieldName="PID" Enabling="False" Searchable="True" IsContent="True" />
<Field Name="NAME" FieldName="NAME_PRODUCTINFO" Enabling="True" Searchable="True" IsContent="True" />
<Field Name="DESCRIPTION" FieldName="DESCRIPTION_PRODUCTINFO" Enabling="True" Searchable="True" IsContent="True" />
</Target>
</Server>
</DataSources>
</Crawler>
爬取完成後,多表關聯資料會合併為單一 Document 存放於 OmniFind 原始資料庫。
crawler_rdb_plugin.xml 至 master_config 並依需求修改。esadmin system stop && esadmin system start。com.ibm.es.plugin.rdb.RDBPlugin 與完整 Classpath(含 plugin_rdb.jar、db2jcc.jar、db2jcc_license_cu.jar)。| SQL 語法 | OmniFind 查詢 | 說明 |
|---|---|---|
WHERE name='thinkpad computer' | NAME_PRODUCTINFO:"thinkpad computer" | 字串精確比對 |
WHERE price>1000 AND price<1500 | #price::<1500>1000 | 數值範圍查詢 |
WHERE name=... AND price>... AND price<... | NAME_PRODUCTINFO:"thinkpad computer" #price::<1500>1000 | 多條件 AND 以空格分隔 |
LIKE '%keyword%' | FIELD:keyword* 或模糊查詢 | 支援萬用字元 |
IN (val1, val2) | FIELD:(val1 val2) | 多值匹配 |
前端應用可封裝 OmniFind 查詢語法,提供類似資料庫的查詢介面,使用者無需了解底層語法細節。
DB2 + OmniFind 混合架構將「寫多讀少、強一致」交易留給 DB2,「讀多寫少、複雜檢索」交給 OmniFind,雙引擎各司其職,實現效能與成本的最佳平衡。對於即時性要求極高的少數查詢,可建立高頻爬取集合補足;其餘絕大多數報表、搜尋、分析查詢皆可安全卸載。