達夢資料庫全文索引簡介

little-dba發表於2020-11-06

全文檢索技術是智慧資訊管理的關鍵技術之一,其主要目的就是實現對大容量的非結構化資料的快速查詢。DM 實現了全文檢索功能,並將其作為 DM 伺服器的一個較獨立的元件,提供更加準確的全文檢索功能,較好地解決了模糊查詢方式帶來的問題。
全文索引為在字串資料中進行復雜的詞搜尋提供了有效支援,使用者可以在指定表的文字列上建立和刪除全文索引。建立全文索引後全文索引未插入任何索引資訊。當使用者填充全文索引時,系統才將定義了全文索引的文字列的內容進行分詞,並根據分詞結果填充索引。使用者可以在進行全文索引填充的列上使用 CONTAINS 謂詞進行全文檢索。
在建立全文索引成功後,假設索引名為 INDEX_NAME,則系統會自動產生如下相關的輔助表(後面簡稱 I表,P表,N表,D表):CTI I N D E X N A M E INDEX_NAME INDEXNAMEI,CTI I N D E X N A M E INDEX_NAME INDEXNAMEP, CTI I N D E X N A M E INDEX_NAME INDEXNAMEN和 CTI I N D E X N A M E INDEX_NAME INDEXNAMED,I 表主鍵為(WORD、FIRSTID、WID),用於儲存分詞結果,記錄詞的基本資訊,通過該資訊就可以快速地定位到該詞的基表記錄;P 表主鍵為(PND_DOCID),用於儲存基表發生的增量資料變化,用於修改全文索引時的增量填充。N表主鍵為(N_DOCID),用於儲存原表記錄rowid和新詞條記錄的docid的對映關係,N_DOCID 是 unique 的;D 表主鍵為(DOCID),儲存了所有將被刪除的 docid,被刪除的 docid 即將不能通過全文索引查詢到。另外,如果原表有自定義聚集主鍵,那麼P 表和 N 表會將該自定義聚集主鍵列“複製”到各自表中。
DM 全文索引建立的過程中,使用者可以為分詞器定義分詞引數,即控制分詞器分詞的數量,包括 5 種分詞引數:

  1. CHINESE_LEXER,中文最少分詞;
  2. CHINESE_VGRAM_LEXER,機械雙字分詞;
  3. CHINESE_FP_LEXER,中文最多分詞;
  4. ENGLISH_LEXER,英文分詞;
  5. DEFAULT_LEXER,預設分詞,為中文最少分詞。
    指定中文分詞引數可以切分英文,但是指定英文分詞引數不可以切分中文,所以使用英文分詞演算法對中文文字進行分詞時,分詞結果將為空。
    經過全文的建立和更新後,可以進行全文檢索,全文檢索支援的檢索方式有:
  6. 在 CONTAINS 謂詞內支援 AND、OR 和 AND NOT 的短語查詢組合條件,例如查詢address 表中地址在洪山區太陽城的記錄:SELECT * FROM person.address WHERE CONTAINS(address1, ‘洪山區’ AND ‘太陽城’);
  7. 全文檢索支援單詞或者句子的檢索, 例如查詢 address 表中地址在江漢區發展大道的記錄:SELECT * FROM person.address WHERE CONTAINS(address1, ‘江漢區發展大道’);
  8. 不支援模糊方式的全文檢索,例如查詢“江漢區*”。
  9. 檢索條件子句可以和其他子句共同組成 WHERE 的檢索條件,例如查詢 address表中地址在武漢市洪山區的記錄。
    SELECT * FROM person.address WHERE CONTAINS(address1, ‘洪山區’) AND city LIKE ‘%武漢市%’;

在這裡插入圖片描述

如上圖所示,DM 全文檢索時對查詢的文字做了預處理,首先根據詞文字進行最少分詞,並依據詞頻資訊找出查詢關鍵字,然後對這些關鍵字進行優先順序排序,這樣可以在第一次檢索時找出所需文字的最小結果集,然後在該結果集的基礎上再進行依次篩選,最終獲得查詢文字,這樣能較大地提高查詢效能。

相關文章