關于Oracle Text索引
1.Oracle Text索引類型
索引類型 |
描述 |
支持的首選項與參數 |
查詢運算符 |
注意事項 |
CONTEXT |
當文本由大型,連貫的文檔(例如,MS Word,HTML或純文本)組成時,請使用此索引來構建文本檢索應用程序。
可以通過多種方式自定義索引。
在對基表進行插入,更新和刪除操作之后,此索引類型需要CTX_DDL.SYNC_INDEX。 |
支持所有CREATE INDEX首選項和參數,但INDEX SET除外。
支持的參數:索引分區子句格式,字符集和語言列 |
CONTAINS
CONTEXT語法支持一組豐富的操作。
將CTXCAT語法與查詢模板一起使用。 |
支持所有文檔服務和查詢服務。
支持分區文本表的索引。
支持CREATE INDEX的FILTER BY和ORDER BY子句以索引結構化的列值,以更有效地處理混合查詢。 |
CTXCAT |
使用此索引可以更好地混合小型文檔和文本片段的查詢性能。 為了提高混合查詢的性能,請在基表中包括其他列,例如項目名稱,價格和描述。
此索引類型是事務性的。 在插入,更新或刪除基表之后,它會自動更新自己。 不需要CTX_DDL.SYNC_INDEX。
|
INDEX SET
LEXER
STOPLIST
STORAGE
WORDLIST(僅日語數據支持prefix_index屬性。)
不支持:格式,字符集和語言列
表和索引分區 |
CATSEARCH
CTXCAT語法支持邏輯運算,短語查詢和通配符。
將CONTEXT語法與查詢模板一起使用。
支持主題查詢。 |
該索引比CONTEXT索引更大,構建時間也更長。
CTXCAT索引的大小與要建立索引的文本總數,索引集中的索引數以及被索引的列數有關。 在將索引添加到索引集中之前,請仔細考慮您的查詢和資源。
CTXCAT索引不支持索引分區,文檔服務(突出顯示,標記,主題和要點)或查詢服務(解釋,查詢反饋和瀏覽詞)。 |
CTXRULE |
使用此索引來構建文檔分類或路由應用程序。 在查詢表上創建此索引,查詢在其中定義分類或路由條件 |
|
MATCHES |
使用MATCHES運算符可以對單個文檔進行分類(純文本,HTML或XML)。 MATCHES將文檔轉換為一組查詢,并在索引中找到匹配的行。
要使用簡單分類或基于規則的分類構建文檔分類應用程序,請創建CTXRULE類型的索引。 該索引使用MATCHES運算符對純文本,HTML或XML文檔進行分類。 將定義的查詢集存儲在索引的文本表中。 |
Oracle Text索引是Oracle數據庫domain index。 要構建查詢應用程序,可以創建混合文本和結構化數據列的CONTEXT類型的索引,并使用CONTAINS運算符進行查詢。
從填充的文本表中創建索引。 在查詢應用程序中,表必須包含文本或指向所存儲文本位置的指針。 文本通常是文檔的集合,但也可以是小的文本片段。
注意:如果要構建使用XML數據的新應用程序,Oracle建議您使用XMLIndex,而不是CTXRULE。
使用標準SQL將Oracle Text索引創建為Oracle數據庫的一種可擴展索引。 這意味著Oracle Text索引的運行方式類似于Oracle Database索引。 它具有引用它的名稱,并且可以使用標準SQL語句進行操作。
創建Oracle Text索引的好處是使用CONTAINS,CATSEARCH和MATCHES運算符可以快速響應文本查詢。 這些運算符分別查詢CONTEXT,CTXCAT和CTXRULE索引類型。
注意:由于啟用了透明數據加密的列不支持域索引,因此請勿將其與Oracle Text一起使用。 但是,可以在存儲在啟用了透明數據加密的表空間中的表的列上創建Oracle Text索引。
2.Oracle Text CONTEXT INDEX的結構
Oracle Text通過將所有單詞轉換為標記來索引文本。 Oracle Text CONTEXT索引的一般結構是一個反向索引,其中每個標記都包含包含該標記的文檔(行)列表。
例如,在單個初始索引操作之后,單詞DOG可能具有如下條目:
這意味著DOG一詞包含在存儲文檔一,三和五的行中。
合并詞和主題索引
默認情況下,Oracle Text使用英語和法語,用單詞信息對主題信息進行索引。 可以使用ABOUT運算符查詢主題信息。 還可以啟用和禁用主題索引。
3.Oracle文本索引過程
通過使用CREATE INDEX語句創建索引的Oracle文本索引來啟動索引過程,該索引根據您的參數和首選項進行組織。
索引編制過程如圖3-1所示。 此過程是由不同索引對象作用的數據流。 每個對象對應于可以在CREATE INDEX或ALTER INDEX的參數字符串中指定的索引首選項類型或節組。
3.1Datastore(存儲)對象
該流從數據存儲區開始,因為它們根據您的數據存儲區首選項將文檔存儲在系統中,因此會讀取這些文檔。 例如,如果將數據存儲區定義為FILE_DATASTORE,則流將通過從操作系統讀取文件開始。 還可以將文檔存儲在Internet上或Oracle數據庫中。 無論文件實際位于何處,Oracle數據庫中的文本表都必須始終指向文件。
3.2Filter(過濾)對象
流通過filter。 FILTER首選項確定發生了什么。 可以通過以下方式之一對流進行操作:
- 當指定NULL_FILTER首選項類型或格式列的值為IGNORE時,不會進行任何過濾。 純文本,HTML或XML的文檔無需過濾。
- 當指定AUTO_FILTER首選項類型或格式列的值為BINARY時,格式化的文檔(二進制)將被過濾為標記文本。
3.3Sectoner(分段)對象
過濾后,標記的文本將通過分段器,該分段器將流分為文本和分段信息。 分段信息包括分段在文本流中的開始和結束位置。 提取的分段的類型由分段組類型決定。
文本被傳遞到詞法分析器。 節信息直接傳遞給索引引擎,索引引擎稍后將使用它。
3.4Lexer(詞法分析器)對象
通過使用一種Oracle Text詞法分析器類型來指定要建立索引的文本的語言,可以創建詞法分析器首選項。 詞法分析器根據您的語言將文本分為標記。 這些標記通常是單詞。 要提取令牌,詞法分析器使用您的詞法分析器首選項中定義的參數。 這些參數包括分隔令牌的字符的定義,例如空格。 參數還包括將文本轉換為全部大寫還是將其保留為混合大小寫。
啟用主題索引后,詞法分析器將分析您的文本以創建主題標記以進行索引。
3.5索引引擎
索引引擎創建反向索引,該反向索引將令牌映射到包含令牌的文檔。 在此階段,Oracle Text使用您指定的stoplist從索引中排除stopwords或stopthemes 。 Oracle Text還使用在WORDLIST首選項中定義的參數。 這些參數告訴系統如何創建前綴索引或子字符串索引(如果啟用)。
4.關于索引列的更新
在Oracle Database 12c第2版(12.2)之前的版本中,如果對Oracle Text索引所基于的列進行了更新,則在索引同步之前,該文檔不可用于搜索操作。 用戶查詢無法搜索該文檔。 從Oracle Database 12c第2版(12.2)開始,可以指定更新后必須可搜索文檔,而無需立即執行索引同步。 在同步索引之前,查詢將使用舊索引條目來獲取舊文檔的內容。 索引同步后,用戶查詢將獲取更新文檔的內容。
索引的ASYNCHRONOUS_UPDATE選項可以在更新后保留文檔的舊內容,然后使用該索引來回答用戶查詢。
5.分區表和索引
在分區文本表上創建分區CONTEXT索引時,必須按范圍對表進行分區。 不支持哈希,合成和列表分區。
可以創建一個分區的文本表,以按日期對數據進行分區。 例如,如果應用程序維護著一個大型的過時新聞文章庫,則可以按月份或年份對信息進行分區。 分區簡化了大型數據庫的可管理性,因為查詢,插入,更新,刪除操作以及備份和恢復可以作用于單個分區。
在具有多個表集的本地CONTEXT索引上,Oracle Text支持Oracle數據庫支持的分區數。
若要查詢分區表,請在查詢常規表時在SELECT語句的WHERE子句中使用CONTAINS。 可以查詢整個表或單個分區。 但是,如果使用ORDER BY SCORE子句,則Oracle建議查詢單個分區,除非包含將查詢限制為單個分區的范圍謂詞。
6.在線索引
當由于正在進行的更新而無法鎖定基表以建立索引時,可以使用CREATE INDEX語句的ONLINE參數在線創建索引。 這樣,具有頻繁插入,更新或刪除功能的應用程序不必停止更新基表以建立索引。
在索引過程的開始和結束時基表被鎖定的時間很短。
7.并行索引
Oracle Text通過CREATE INDEX語句支持并行索引。
在非分區表上輸入并行索引語句時,Oracle Text將基本表拆分為臨時分區,生成子進程,并將子級分配給分區。然后,每個子級都為其分區中的行建立索引。將基表切片為分區的方法由Oracle確定,不受直接控制。對于實際產生的子進程的數目也是如此,這取決于機器功能,系統負載,init.ora設置和其他因素。由于這些變量,實際的并行度可能與請求的并行度不匹配。
因為索引是一項密集的I / O操作,所以當具有分布式磁盤訪問權限和多個CPU時,并行索引最有效地減少了索引時間。并行索引只能通過CREATE INDEX語句才能影響初始索引的性能。它不影響使用ALTER INDEX的插入,更新和刪除操作,并且對查詢性能的影響最小。
由于并行索引減少了初始索引時間,因此對于以下情況很有用:
- 產品包含Oracle Text索引時的數據暫存
- 基于大數據收集的應用程序的快速初始啟動
- 應用程序測試,當您在開發應用程序時需要測試不同的索引參數和架構時
8.索引和視圖
Oracle SQL標準不支持在視圖上創建索引。 如果需要索引內容在不同表中的文檔,請使用USER_DATASTORE對象創建數據存儲首選項。 使用此對象,您可以定義一個在索引時間從不同表合成文檔的過程。