Oracle Text簡介

q499311546發表於2020-06-18
Oracle Text為查詢應用程式和文件分類應用程式中的文字提供索引,單詞和主題搜尋以及檢視功能。
要設計Oracle Text應用程式,首先確定期望執行的查詢型別。 知道型別後,就可以為任務選擇最合適的索引。
Oracle Text用於以下類別的應用程式:
  • Document Collection Applications
  • Catalog Information Applications
  • Document Classification Applications
  • XML Search Applications


1.文件集合應用程式
文字查詢應用程式使使用者可以搜尋文件集合,例如網站,數字圖書館或文件倉庫。


1.1關於 文件集合應用集合
該集合通常是靜態的,並且在初始索引執行之後,內容沒有明顯變化。 文件可以是任何大小和格式,例如HTML,PDF或Microsoft Word。 這些文件儲存在文件表中。 通過首先為文件集合建立索引來啟用搜尋。
查詢通常由單詞或短語組成。 應用程式使用者使用OR和AND等運算子指定單詞和短語的邏輯組合。 使用者可以應用其他查詢操作來改善搜尋結果,例如詞幹,鄰近搜尋和萬用字元。
對於這種型別的應用程式,應該檢索與查詢最相關的文件。 文件必須在結果列表中排在高位。
查詢最好與文件表上的CONTEXT索引一起使用。 為了查詢該索引,應用程式在SELECT語句的WHERE子句中使用SQL CONTAINS運算子。


1.2文字查詢應用程式流程圖
文件集合上的典型文字查詢應用程式使使用者可以輸入查詢。 該應用程式輸入CONTAINS查詢,並返回滿足查詢條件的文件列表(稱為命中列表)。 結果通常按相關性排名。 該應用程式使使用者可以檢視命中列表中的一個或多個文件。
例如,一個應用程式可能會索引Web上的URL(HTML檔案)並在整個索引URL中提供查詢功能。 查詢應用程式返回的命中列表由使用者可以訪問的URL組成。

下圖展示了使用者與簡單文字查詢應用程式進行互動的流程圖:

  • 1)使用者輸入查詢
  • 2)該應用程式執行CONTAINS查詢
  • 3)應用程式將顯示一個命中列表
  • 4)使用者從命中列表中選擇文件
  • 5)該應用程式將文件呈現給使用者以供檢視


2.目錄資訊應用程式
目錄資訊由庫存型別資訊組成,例如線上書店或拍賣網站。


2.1關於目錄資訊應用程式

儲存的目錄資訊由文字資訊(例如書名)和相關結構化資訊(例如價格)組成。 通常會定期更新資訊,以使線上目錄與庫存保持最新。
查詢通常是文字元件和結構化元件的組合。 結果幾乎總是按結構化組成部分排序,例如日期或價格。 良好的響應時間始終是此類查詢應用程式的重要因素。
CTXCAT索引可以最好地服務Catalog應用程式。 在SELECT語句的WHERE子句中使用CATSEARCH運算子查詢此索引。


2.2目錄查詢應用程式流程圖
目錄應用程式使使用者可以搜尋目錄中的特定專案。 例如,線上商店應用程式使使用者可以搜尋和購買庫存中的物品。 通常,使用者查詢由一個文字元件組成,該元件在文字描述以及一些其他訂購條件(例如價格或日期)中進行搜尋。
下圖說明了線上電子商店的目錄查詢應用程式的流程圖:

  • 1)使用者輸入一個查詢,該查詢由文字元件(例如CD播放器)和結構化元件(例如按價格訂購)組成。
  • 2)該應用程式執行CATSEARCH查詢。
  • 3)該應用程式顯示相應的排序結果。
  • 4)使用者瀏覽結果。
  • 5)使用者輸入另一個查詢或執行操作,例如購買商品。


3.文件分類應用程式
在文件分類應用程式中,將輸入流或一組文件與一組預定義規則進行比較。 如果文件符合一個或多個規則,則應用程式將執行一項操作。
例如,假設有新聞報導傳入。 定義一個規則來表示“財務”類別。 該規則本質上是一個或多個查詢,用於選擇有關財務主題的文件。 該規則可能具有“股票或債券或收益”的形式。
當文件到達華爾街收入預測並滿足該類別的規則時,應用程式將採取措施,例如將文件標記為財務或向一個或多個使用者傳送電子郵件。
要建立文件分類應用程式,請建立一個規則表,然後建立一個CTXRULE索引。 要對輸入的文字流進行分類,請在SELECT語句的WHERE子句中使用MATCHES運算子。



4.XML搜尋應用程式
XML搜尋應用程式對XML文件執行搜尋。 常規文件搜尋通常會搜尋一組文件,以返回滿足文字謂詞的文件。 XML搜尋通常使用XML文件的結構來限制搜尋。 通常,僅返回滿足搜尋條件的文件部分。 例如,使用者可能只需要註釋欄位包含電力的採購訂單,而不是查詢包含單詞"電力"的所有采購訂單。


4.1具有XML搜尋應用程式的CONTAINS運算子

CONTAINS運算子非常適合結構化搜尋,可以使用WITHIN,HASPATH和INPATH運算子執行限制性搜尋。 如果使用CONTEXT索引,那麼還可以受益於Oracle Text搜尋的以下特徵:
  • 基於令牌的空格標準化搜尋
  • 命中列表按相關性排名
  • 區分大小寫的搜尋
  • 章節搜尋
  • 語言功能,例如詞幹和模糊搜尋
  • 針對大型文件集的效能優化查詢


注意:如果手動解除安裝Oracle Text,則刪除DBMS_XDBT軟體包。 如果手動安裝Oracle Text,則建立DBMS_XDBT軟體包。從Oracle Database 12c開始,當安裝新的Oracle資料庫軟體或進行升級時,將自動安裝Oracle XML資料庫(XML DB)。


4.2將Oracle文字功能與Oracle XML DB(XML Search Index)相結合

當請想要對應用程式進行全文檢索時,結合使用Oracle Text和Oracle XML DB的功能來建立XML搜尋索引。 在這種情況下,通過輸入諸如"查詢包含單詞Pentium的所有節點"之類的查詢來利用XML結構。 Oracle Database 12c通過新增對XQuery全文擴充套件的支援,擴充套件了Oracle對W3C XQuery規範的支援。 通過此支援,可以對儲存在資料庫中的XML內容執行支援XML的全文搜尋。


4.2.1使用xml_enable方法獲取XML Search Index

XML Search Index是啟用XML的Oracle文字索引(CTXSYS.CONTEXT)。 該索引型別在一個統一索引中支援資訊檢索搜尋和結構化搜尋。XML Search Index還在Oracle文字表中內部儲存了二進位制持久文件物件模型(PDOM),因此可以在二進位制PDOM上對XML操作進行功能評估。 XMLTYPE資料儲存支援此XML搜尋索引。 在存在這樣的XML搜尋索引的情況下,XMLEXISTS被無縫地重寫為CONTAINS查詢。
建立XML Search Index時,將在Oracle Text內部表中實現XML文件的Binary PDOM。 來自Oracle Text索引的後期評估被重定向為與儲存在此內部表中的PDOM背道而馳。
建立XML Search Index:
exec CTX_DDL.CREATE_SECTION_GROUP('secgroup','PATH_SECTION_GROUP');
exec CTX_DDL.SET_SEC_GRP_ATTR('secgroup','xml_enable','t');
CREATE INDEX po_ctx_idx on T(X) indextype is ctxsys.context parameters ('section group SECGROUP');


4.2.2使用Text-on-XML方法
使用Oracle Text,可以在包含XML資料的列上建立CONTEXT索引。 列型別可以是XMLType或任何受支援的型別,只要對XML資料使用正確的索引首選項。
使用XML上的文字方法,使用標準的CONTAINS查詢並新增結構化約束,以將搜尋範圍限制為特定部分,欄位,標記或屬性。 即,指定文字運算子內部的結構,例如WITHIN,HASPATH和INPATH。
例如,設定的CONTEXT索引以使用XML文件建立章節。 考慮以下定義purchase order的XML文件:
<?xml version="1.0"?>
<PURCHASEORDER pono="1">
   <PNAME>Po_1</PNAME>
   <CUSTNAME>John</CUSTNAME>
   <SHIPADDR>
      <STREET>1033 Main Street</STREET>
      <CITY>Sunnyvalue</CITY>
      <STATE>CA</STATE>
   </SHIPADDR>
   <ITEMS>
     <ITEM>
       <ITEM_NAME> Dell Computer </ITEM_NAME>
       <DESC> Pentium 2.0 Ghz 500MB RAM  </DESC>
     </ITEM>
     <ITEM>
       <ITEM_NAME> Norelco R100 </ITEM_NAME>
       <DESC>Electric Razor </DESC>
     </ITEM>
   </ITEMS>
</PURCHASEORDER>
--要在ITEM描述部分中查詢所有包含Pentium的purchase order,請使用WITHIN運算子:
SELECT id from po_tab where CONTAINS( doc, 'Pentium WITHIN DESC') > 0;
--使用INPATH運算子可以使用XPATH表示式指定更復雜的條件:
SELECT id from po_tab where  CONTAINS(doc, 'Pentium INPATH (/PURCHASEORDER/ITEMS/ITEM/DESC') > 0;



4.2.3索引JSON資料

JavaScript Object Notation(JSON)是一種獨立於語言的資料格式,用於序列化結構化資料並通過網路(通常在伺服器和Web應用程式之間)交換該資料。 JSON提供了一種基於文字的方式來表示JavaScript物件文字,陣列和標量資料。
create table t1 (txn_date date, po CLOB, constraint c1 check (po is json));
create search index idx on t1(po) for JSON parameters('DATAGUIDE ON sync (on commit)');


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31355629/viewspace-2699315/,如需轉載,請註明出處,否則將追究法律責任。

相關文章