轉 Oracle全文檢索http://docs.oracle.com/cd/E11882_01/text.112/e24436/toc.htm

SQL > exec ctx_ddl.create_preference ('my_test_lexer','chinese_lexer') ;

PL/SQL 過程成功完成

SQL > EXEC ctx_ddl.create_preference ('my_test_mds','MULTI_COLUMN_DATASTORE') ;

PL/SQL 過程成功完成

SQL > exec ctx_ddl.set_attribute ('my_test_mds'、 '列'、 ' base_keyword,base_title,base_content') ;

PL/SQL 過程成功完成

SQL >
建立索引 mc_idx ON tb_knowledge_base_bk(base_title) 爲索引類型是 ctxsys。上下文參數 (數據存儲 my_test_mds LEXER my_test_lexer')

選擇 * tb_knowledge_base_bk t 從哪裏 contains(t.base_title,'轉速',1) > 0 ;

選擇 * 從博士 $MC_IDX$ ;

譯文:
http://gjbxx110.blog.51cto.com/794841/264880

php

標籤: Oracle 休閒 職場

數據庫版本:10g

數據庫操做系統: linux as4

 

表test1,

建立表 TEST1
(
CHINAME VARCHAR2(4000 CHAR)
ABNAME VARCHAR2(50 CHAR)
地址 VARCHAR2(200 CHAR)
市 VARCHAR2(30 CHAR)
X NUMBER(10,5),
Y NUMBER(10,5)
POIID 號
身份證號碼
)。

指定分詞

oracle文檔說'chinese_lexer' 只能用於utf8字符集,經測試在9i,zhs16gbk,windows也能夠。
開始
ctx_ddl. .create_preference('my_lexer', 'chinese_lexer' );
結束 ;
--指定檢索的字段
EXECctx_ddl. .create_preference('mymds', 'MULTI_COLUMN_DATASTORE' );
EXECctx_ddl. .set_attribute('mymds', , 'chiname、 abname、 地址、 城市、 x、 y' );
--建索引
建立索引 mc_idx ON test1(CHINAME) 爲索引類型是 ctxsys。上下文參數 (數據存儲 mymds LEXER my_lexer')
--測試
選擇 * test1 在那裏包含(chiname,,'中國'1) >0
--查看分詞結果
選擇 * 從博士 $MC_IDX$ 我
--查看錯誤信息
選擇 * ctx_user_index_errors


參考資料:
http://docs.oracle.com/cd/B19306_01/text.102/b14218/cdatadic.htm
html

數據存儲類型

使用數據存儲類型來指定如何存儲您的文本。若要建立數據存儲首選項,必須使用下面的數據存儲類型之一:linux

表 2-1 數據存儲類型算法

數據存儲類型 什麼時候使用
DIRECT_DATASTORE 數據存儲在文本列的內部。每一行做爲一個單獨的文檔編制索引。
MULTI_COLUMN_DATASTORE 在多個列中的文本表中存儲數據。列鏈接起來以建立一個虛擬的文檔,另外一個用於每一個行。
DETAIL_DATASTORE 數據存儲在文本列的內部。文檔包含存儲在細節表中的文本列中含有標題信息存儲在主表中的一個或多個行。
FILE_DATASTORE 數據從外部存儲在操做系統的文件。文件名存儲在文本列中,另外一個用於每一個行中。
NESTED_DATASTORE 嵌套表中存儲數據。
URL_DATASTORE 數據從外部存儲在位於 intranet 或 Internet 上的文件中。統一資源定位器 (Url) 存儲在文本欄中。
USER_DATASTORE 在索引時合成了文件,由用戶定義的存儲過程。
Oracle ® 文本參考
10g版本 2 (10.2)

部件號 B14218-01
Go to Documentation Home
首頁
Go to Book List
圖書列表
Go to Table of Contents
內容
Go to Index
索引
Go to Master Index
主索引
Go to Feedback page
聯繫咱們

Go to previous page
上一頁
Go to next page
下一個
PDF ·斯凱·epub 格式

2 oracle 文本索引元素

這一章描述了您可使用來建立您的 Oracle 文本索引的各類元素。sql

在這一章討論瞭如下主題:數據庫

概述

當您使用建立索引建立索引或修改索引管理指數時,能夠選擇在參數字符串中指定索引的偏好、 stoplists、 和節組。指定一個首選項、 非索引字表或節組答案有關 Oracle 文本索引的文本方式的如下問題之一:

首選項類 回答了這個問題
數據存儲區 您的文檔的存儲方式?
篩選器 轉換爲純文本,這些文件的如何?
詞法分析器 什麼語言正在被編制索引?
單詞表 如何幹和模糊查詢是如何擴大呢?
存儲 應如何存儲索引表?
阻止列表 哪些詞或主題是不會索引嗎?
節組 查詢部分啓用,和如何在文檔內定義節嗎?

本章介紹如何設置每一個首選項。能夠經過在這一章中所描述的類型之一建立首選項啓用選項。

例如,若要指定您的文檔存儲在外部文件中,能夠建立稱爲mydatastore使用FILE_DATASTORE類型的數據存儲區偏好。您做爲數據存儲首選項在CREATEINDEX的參數子句中指定mydatastore.

建立首選項

若要建立數據存儲區,詞法分析器、 篩選、 分類、 單詞表或存儲首選項,您可使用 CTX_DDL。CREATE_PREFERENCE程序,並指定在這一章中所描述的類型之一。對於某些類型,您還能夠設置 CTX_DDL 屬性。SET_ATTRIBUTE程序。

索引類型名稱您可使用建立索引偏好的索引對象的類。一種類型,所以,是一個抽象的 ID,而偏好是一個對應於一種類型的實體。許多系統定義的首選項具備相同的名稱做爲類型 (例如, BASIC_LEXER),但不是能保證準確對應 (例如, DEFAULT_DATASTORE偏好使用DIRECT_DATASTORE類型,和沒有對應的CHARSET_FILTER類型的系統偏好)。要當心在假設的存在或性質的索引類型或系統首選項。

您指定索引首選項與CREATE INDEXALTER INDEX索引首選項決定如何建立您的索引。例如,詞法分析器首選項指示要編入索引的文本的語言。您能夠建立並指定您本身 (用戶定義) 的偏好或您可使用系統定義的首選項。

若要建立非索引字表,請使用 CTX_DDL。CREATE_STOPLIST您能夠添加非索引字表與CTX_DDL.ADD_STOPWORD.

若要建立分區組,請使用 CTX_DDL。CREATE_SECTION_GROUP ,並指定一個節組類型。你能夠添加與CTX_DDL. ADD_ZONE_SECTIONCTX_DDL.ADD_FIELD_SECTION.

數據存儲類型

使用數據存儲類型來指定如何存儲您的文本。若要建立數據存儲首選項,必須使用下面的數據存儲類型之一:

表 2-1 數據存儲類型

數據存儲類型 什麼時候使用
DIRECT_DATASTORE 數據存儲在文本列的內部。每一行做爲一個單獨的文檔編制索引。
MULTI_COLUMN_DATASTORE 在多個列中的文本表中存儲數據。列鏈接起來以建立一個虛擬的文檔,另外一個用於每一個行。
DETAIL_DATASTORE 數據存儲在文本列的內部。文檔包含存儲在細節表中的文本列中含有標題信息存儲在主表中的一個或多個行。
FILE_DATASTORE 數據從外部存儲在操做系統的文件。文件名存儲在文本列中,另外一個用於每一個行中。
NESTED_DATASTORE 嵌套表中存儲數據。
URL_DATASTORE 數據從外部存儲在位於 intranet 或 Internet 上的文件中。統一資源定位器 (Url) 存儲在文本欄中。
USER_DATASTORE 在索引時合成了文件,由用戶定義的存儲過程。

DIRECT_DATASTORE

DIRECT_DATASTORE型用於直接在文本列中,爲每一個行的一份文件中存儲的文本。DIRECT_DATASTORE不具備屬性。

支持如下的列類型:CHARVARCHARVARCHAR2BLOBCLOBBFILEXMLType.

注:

若是你的專欄, BFILE索引全部者必須有讀取權限上使用的BFILEs的全部目錄.

DIRECT_DATASTORE CLOB 示例

下面的示例建立一個表,用來存儲文本數據的 CLOB 列。而後填充兩行文本數據索引所使用的系統定義的偏好CTXSYS.DEFAULT_DATASTORE.

create table mytable(id number primary key, docs clob); 

insert into mytable values(111555,'this text will be indexed');
insert into mytable values(111556,'this is a direct_datastore example');
commit;

create index myindex on mytable(docs) 
  indextype is ctxsys.context 
  parameters ('DATASTORE CTXSYS.DEFAULT_DATASTORE');

MULTI_COLUMN_DATASTORE

在你的文本存儲在多個列中時,請使用此數據存儲區。索引,期間系統鏈接列的文本,添加標籤的文本列和索引做爲單個文檔的文本。相似 XML 的標記是可選的。您還能夠設置系統篩選並串聯的二進制列。

MULTI_COLUMN_DATASTORE具備下列屬性:

表 2-2 MULTI_COLUMN_DATASTORE 屬性

屬性 屬性值
指定要在索引過程當中鏈接的列的逗號分隔列表。您還能夠指定容許對基礎表的 select 語句列列表的任何表達式。這包括表達式、 PL/SQL 函數、 列別名等等。

支持NUMBERDATE的列類型。他們是在編制索引使用的默認格式掩碼以前轉換爲文本。TO_CHAR功能可使用列的列表中進行格式設置。

RAWBLOB列直接串聯起來做爲二進制數據。

不支持LONGLONGRAWNCHARNCLOB,嵌套的表的列和收藏。

列列表僅限於 500 字節的空間。

篩選器 指定 Y/N 標誌的逗號分隔的列表。每一個標誌對應於列列表中的列,而且表示是否要篩選的列使用AUTO_FILTER.

指定容許下列值之一:

Y: 列是用AUTO_FILTER篩選

N 或沒有價值: 列,這樣作並非篩選 (默認值)

分隔符 指定的分隔符分隔列文本。使用下列操做之一:

COLUMN_NAME_TAG: 列文本出發由相似 XML 的打開和關閉標記 (默認行爲)。

換行符: 列文本是用換行符分隔。

索引和 DML

要索引,必須建立要在CREATE INDEX語句中指定的虛擬列。除非在列屬性指定它的名稱,此列內容不是虛擬文檔的一部分。

該指數被同步僅當更新虛擬列。您能夠建立觸發器傳播更改,若是須要的話。

MULTI_COLUMN_DATASTORE 示例

下面的示例建立稱爲 my_multi與三個文本列多列數據存儲首選項:

begin
ctx_ddl.create_preference('my_multi', 'MULTI_COLUMN_DATASTORE');
ctx_ddl.set_attribute('my_multi', 'columns', 'column1, column2, column3');
end;

MULTI_COLUMN_DATASTORE 篩選器示例

下面的示例建立多列數據存儲首選項,並表示bar列是要篩選與 AUTO_FILTER。

ctx_ddl.create_preference('MY_MULTI','MULTI_COLUMN_DATASTORE');
ctx_ddl.set_attribute('MY_MULTI', 'COLUMNS','foo,bar');
ctx_ddl.set_attribute('MY_MULTI','FILTER','N,Y');

多列數據存儲區讀取foo bar列,篩選器bar的內容而後組成複合文檔:

<FOO>
foo contents
</FOO>
<BAR>
bar filtered contents (probably originally HTML)
</BAR>

不須要指定 N,並不須要爲每一列的標誌。Y 只須要指定,請用逗號來表示它們適用於哪些列。舉個例子:

ctx_ddl.create_preference('MY_MULTI','MULTI_COLUMN_DATASTORE');
ctx_ddl.set_attribute('MY_MULTI', 'COLUMNS','foo,bar,zoo,jar');
ctx_ddl.set_attribute('MY_MULTI','FILTER',',,Y');

這個過濾器只列zoo.

標記行爲

索引,過程當中,系統將建立爲每一個行的虛擬文檔。虛擬文檔被由串聯的上市順序自動添加的列名稱標籤的列中的內容。舉個例子:

create table mc(id number primary key, name varchar2(10), address varchar2(80));
insert into mc values(1, 'John Smith', '123 Main Street');

exec ctx_ddl.create_preference('mymds', 'MULTI_COLUMN_DATASTORE');
exec ctx_ddl.set_attibute('mymds', 'columns', 'name, address');

這就產生了如下虛擬文本索引:

<NAME>
John Smith
</NAME>
<ADDRESS>
123 Main Street
</ADDRESS>

該系統索引標記,忽略本身的標記之間的文本。

做爲部分的索引列

索引做爲部分這些標記,您能夠選擇建立字段部分與BASIC_SECTION_GROUP.

注:

使用MULTI_COLUMN_DATASTORE時,將建立沒有節組。若要建立這些標記的部分,必須建立一個節組。

當你使用表達式或函數時,該標記被由表達式前 30 個字符除非使用了一個列別名。

例如,若是您的表達式是做爲以下:

exec ctx_ddl.set_attibute('mymds', 'columns', '4 + 17');

而後它產生如下虛擬文本:

<4 + 17>
21
</4 + 17>

若是您的表達式,以下所示:

exec ctx_ddl.set_attibute('mymds', 'columns', '4 + 17 col1');

而後它產生如下虛擬文本:

<col1>
21
<col1>

標記是以大寫形式,除非列名或列別名以小寫,而雙引號包圍。舉個例子:

exec ctx_ddl.set_attibute('mymds', 'COLUMNS', 'foo');

產生如下虛擬文本:

<FOO>
content of foo
</FOO>

爲小寫字母的標記,使用如下方法:

exec ctx_ddl.set_attibute('mymds', 'COLUMNS', 'foo "foo"');

此表達式將生成:

<foo>
content of foo
</foo>

DETAIL_DATASTORE

對直接存儲在數據庫中表的詳細信息表,位於該主表的索引的文本列的文字使用DETAIL_DATASTORE類型。

DETAIL_DATASTORE具備下列屬性:

表 2-3 DETAIL_DATASTORE 屬性

屬性 屬性值
二進制文件 指定要添加不換行字符後每一個詳細信息行的 Oracle 文本的真實。

指定要添加一個換行符 (\n) 的 Oracle 文本爲 FALSE 後每一個詳細信息行自動。

detail_table 指定的名稱的詳細信息表 (全部者。表若有必要)
detail_key 指定詳細信息表的外鍵列的名稱
detail_lineno 指定詳細信息表順序列的名稱。
detail_text 指定詳細信息表的文本列的名稱。

同步主/詳細信息索引

詳細信息表的更改不會觸發從新索引索引進行同步時。只更改主表觸發器中的索引列從新索引同步索引時。

您能夠在將更改傳播到主錶行中的索引的列的詳細信息表上建立觸發器。

示例主/詳細信息表

此示例闡釋了主頁和詳細的表如何彼此相關。

主表的示例

主表中的主/詳細信息關係定義的文檔。您分配的每一個文檔的識別號碼。下表是示例的主表,稱爲my_master:

列名稱 列類型 描述
article_id 數量 文檔 ID,惟一的每一個文檔 (主鍵)
做者 VARCHAR2(30) 文檔的做者
標題 VARCHAR2(50) 文檔的標題
身體 CHAR (1) 要指定在建立索引中的虛擬列

注:

你主表必須包含一個主鍵列,當您使用DETAIL_DATASTORE類型。
詳細信息表的示例

詳細信息表包含一個文檔,其內容一般存儲跨多行的文本。如下詳細表my_detail與主表my_master article_id柱有關。此列標識的每一個詳細信息行 (子文件) 所屬的主控文檔。

列名稱 列類型 描述
article_id 數量 涉及到主表的文檔 ID
seq 數量 由 article_id 定義的主文檔中文檔的順序
文本 VARCHAR2 文檔文本
詳細信息表的示例屬性

在此示例中, DETAIL_DATASTORE屬性具備如下值:

屬性 屬性值
二進制文件 真實
detail_table my_detail
detail_key article_id
detail_lineno seq
detail_text 文本

您使用 CTX_DDL。CREATE_PREFERENCE使用DETAIL_DATASTORE建立的偏好。您使用 CTX_DDL。SET_ATTRIBUTE要設置此首選項的屬性,如前面所述。下面的示例演示如何作到這一點:

begin
ctx_ddl.create_preference('my_detail_pref', 'DETAIL_DATASTORE');
ctx_ddl.set_attribute('my_detail_pref', 'binary', 'true');
ctx_ddl.set_attribute('my_detail_pref', 'detail_table', 'my_detail');
ctx_ddl.set_attribute('my_detail_pref', 'detail_key', 'article_id');
ctx_ddl.set_attribute('my_detail_pref', 'detail_lineno', 'seq');
ctx_ddl.set_attribute('my_detail_pref', 'detail_text', 'text');
end;
主/詳細信息索引示例

到索引這個主/詳細信息關係中定義的文檔CREATEINDEX的主表中指定的列。您指定的列必須容許的類型之一。

此示例使用body列,其功能是可以建立主/詳細信息索引,並提升代碼的可讀性。my_detail_pref首選項被設置爲DETAIL_DATASTORE ,具備所需屬性:

CREATE INDEX myindex on my_master(body) indextype is ctxsys.context
parameters('datastore my_detail_pref');

在此示例中,您還能夠指定要建立索引的titleauthor的列。然而,若是您這樣作,這些列的更改將觸發從新索引的操做。

FILE_DATASTORE

FILE_DATASTORE型用於存儲在經過本地文件系統訪問的文件中的文本。

注:

與某些類型的遠程掛載的文件系統, FILE_DATASTORE可能沒法工做。

FILE_DATASTORE具備如下屬性:

表 2-4 FILE_DATASTORE 屬性

屬性 屬性值
路徑 path1:path2:pathn
路徑

指定外部存儲在文件系統中的文件的完整目錄路徑名稱。當您指定完整的目錄路徑,這樣時,您只須要在文本列中包括文件的名稱。

您能夠指定多個路徑,路徑與在 UNIX 和 Windows 上的 semicolon(;) 由一個冒號 (:) 分隔每一個路徑。文件的名稱存儲在文字的表格中的文本列中。

若是您不使用此屬性指定外部文件的路徑,Oracle 文本須要在文本列中存儲的文件名稱中包含的路徑。

路徑屬性限制

路徑屬性具備下列侷限性:

  • 若是您指定一個路徑屬性,您只能在索引列中使用一個簡單的文件名。你不能將路徑屬性結合路徑做爲文件名的一部分。若是在多個文件夾或目錄中存在這些文件,你必須離開路徑屬性的設置,並在索引列中包含文件的完整名稱,路徑。

  • 在 Windows 系統上,文件必須位於本地驅動器上。他們不能在遠程驅動器上,是否遠程驅動器映射爲本地驅動器盤符。

FILE_DATASTORE 示例

本示例建立稱爲COMMON_DIR具備/mydocs路徑文件數據存儲首選項:

begin
 ctx_ddl.create_preference('COMMON_DIR','FILE_DATASTORE');
 ctx_ddl.set_attribute('COMMON_DIR','PATH','/mydocs');
end;

當您使用填充表mytable時,您只須要插入文件名。路徑屬性告訴系統哪裏看在索引操做期間。

create table mytable(id number primary key, docs varchar2(2000)); 
insert into mytable values(111555,'first.txt');
insert into mytable values(111556,'second.txt');
commit;

建立索引,以下所示:

create index myindex on mytable(docs)
  indextype is ctxsys.context
  parameters ('datastore COMMON_DIR'); 

URL_DATASTORE

URL_DATASTORE型用於存儲文本:

  • 萬維網 (經過 HTTP 或 FTP 訪問) 上的文件中

  • 在本地文件系統 (經過文件協議訪問) 中的文件

你在單個文本字段中存儲的每一個 URL。

URL 語法

您在文本字段中存儲的 url 語法是,以下所示 (用方括號表示可選參數):

[URL:]<access_scheme>://<host_name>[:<port_number>]/[<url_path>]

您指定的access_scheme字符串能夠是ftp、 http或文件。舉個例子:

http://mymachine.us.oracle.com/home.html

因爲這種語法是部分符合 RFC 1738 規範,如下限制適用於 URL 語法:

  • 該 URL 必須包含僅可打印的 ASCII 字符。非打印 ASCII 字符和多字節字符必須使用進行轉義 %xx表示法,其中xx是特殊字符的十六進制表示形式。

    注:

    在 URL 中的login:password@語法是僅支持 ftp 訪問方案。

URL_DATASTORE 屬性

URL_DATASTORE具備下列屬性:

表 2-5 URL_DATASTORE 屬性

屬性 屬性值
超時 以秒爲單位指定超時值。有效的範圍是 15 至 3600 秒。默認值爲 30。
maxthreads 指定能夠同時運行的線程的最大數目。使用 1and 介於 1024年。默認值爲 8。
urlsize 指定的 URL 字符串的最大長度,以字節爲單位.使用32 到 65535 之間的數字。默認值爲 256。
maxurls 指定 URL 緩衝區的最大大小。使用 32 到 65535 之間的數字。默認值爲 256。
maxdocsize 指定最大文件大小。使用 256 和 2147483647 字節 (2 千兆字節) 之間的一個數字。默認值是 2,000,000。
從不 指定的 http 代理服務器的主機名。(可選) 在窗體hostname:port中指定端口號,用冒號.
ftp_proxy 指定 ftp 代理服務器的主機名。(可選) 在窗體hostname:port中指定端口號,用冒號.
no_proxy 沒有代理服務器指定的域。使用逗號分隔的達 16 域名的字符串。
超時

指定以秒爲單位,如鏈接或讀取網絡操做在超時並返回到應用程序的超時錯誤以前等待時間的長度。超時的有效範圍是 15 到 3600,默認值爲 30。

注:

因爲超時處於網絡操做水平,總超時可能長於指定超時的時間.
maxthreads

指定能夠同時運行的線程的最大數目。Maxthreads的有效範圍是 1 到 1024年,默認值爲 8。

urlsize

指定最大長度以字節爲單位,URL 數據存儲區支持的 Url 存儲在數據庫中。若是 URL 超過最大長度,則返回錯誤。Urlsize的有效範圍是 32 到 65535,默認值爲 256。

注:

指定爲 maxurls 和urlsize的產品值不能超過 5,000,000。

換句話說,內存緩衝區的最大大小 (maxurls * urlsize) 爲該 URL 是大約 5 兆字節。

maxurls

指定內部的緩衝區可保存爲 HTML 文檔 (行) 從文本表中檢索到的行的最大數目。Maxurls的有效範圍是 32 到 65535,默認值爲 256。

注:

指定爲maxurls和urlsize的產品值不能超過 5,000,000。

換句話說,內存緩衝區的最大大小 (maxurls * urlsize) 爲該 URL 是大約 5 兆字節。

從不

指定用做安裝了 Oracle 文本的計算機的 HTTP 代理 (網關) 的主機的徹底限定的名稱。您能夠選擇指定端口號,用冒號的形式hostname:port.

若是這臺機器是在須要經過代理服務器訪問位於防火牆外部的 Web 文件的身份驗證的 intranet,則必須設置此屬性。

ftp_proxy

指定用做安裝了 Oracle 文本的計算機的 FTP 代理 (網關) 的主機的徹底限定名稱。您能夠選擇指定一個端口號,用冒號的形式hostname:port.

若是這臺機器是在須要經過代理服務器訪問位於防火牆外部的 Web 文件的身份驗證的 intranet,必須設置此屬性。

no_proxy

在 intranet 中指定的域 (達十六,單獨用逗號) 存在於大多數,若是不是所有,機器的字符串。當其中一個域中的主機名稱遇到時,沒有請求發送到ftp_proxy和從不爲指定的計算機。相反,直接由主機標識在 URL 中,處理了該請求。

例如,若是爲no_proxy輸入字符串us.oracle.com, uk.oracle.com ,則包含這些域中的主機名的機器的任何 URL 請求不會處理由您的代理服務器。

URL_DATASTORE 示例

本示例建立稱爲URL_PREF的從不,no_proxy 和超時屬性設置URL_DATASTORE偏好。對於未設置的屬性,則使用缺省值。

begin
 ctx_ddl.create_preference('URL_PREF','URL_DATASTORE');
 ctx_ddl.set_attribute('URL_PREF','HTTP_PROXY','www-proxy.us.oracle.com');
 ctx_ddl.set_attribute('URL_PREF','NO_PROXY','us.oracle.com');
 ctx_ddl.set_attribute('URL_PREF','Timeout','300');
end;

建立表並將值插入到它:

create table urls(id number primary key, docs varchar2(2000));
insert into urls values(111555,'http://context.us.oracle.com');
insert into urls values(111556,'http://www.sun.com');
commit;
 

若要建立索引,請指定 URL_PREF 做爲數據存儲區:

create index datastores_text on urls ( docs ) 
  indextype is ctxsys.context 
  parameters ( 'Datastore URL_PREF' ); 

USER_DATASTORE

使用USER_DATASTORE類型來定義索引過程當中合成文件的存儲的過程。例如,一個用戶程序可能合成做者、 日期和文本列到一個文檔中,有的做者和日期的信息索引文本的一部分。

USER_DATASTORE具備下列屬性:

表 2-6 USER_DATASTORE 屬性

屬性 屬性值
程序 指定合成要編制索引的文檔的過程。

此過程能夠由任何用戶擁有,而且必須是可由索引全部者執行。

先前 指定程序的第二個參數的數據類型。有效值爲CLOB BLOBCLOB_LOCBLOB_LOCVARCHAR2默認值爲 CLOB。

當您指定CLOB_LOCBLOB_LOC,您指示沒有臨時CLOBBLOB須要,由於程序IN複製定位器 /OUT第二個參數。

程序

指定合成要編制索引的文檔的程序的名稱。本規格書必須在窗體中,PROCEDURENAME 或軟件包名稱。PROCEDURENAME。您還能夠指定架構全部者名稱。

您指定的程序必須具備兩個參數定義以下:

procedure (r IN ROWID, c IN OUT NOCOPY <output_type>)

第一個參數r必須是類型ROWID第二個參數c必須是類型output_type。NOCOPY是指示 Oracle 文本,若是有可能經過引用傳遞參數 c 的編譯器提示。

注::

過程的名稱和它的參數能夠被命名爲任何名稱。爲簡單起見此示例中使用的參數 r 和 c。

存儲的過程是索引的每一行調用一次。鑑於當前行的 rowid,程序必須編寫文檔的文本變成第二個參數,您先前使用指定的類型.

約束

如下限制適用於程序:

  • 程序能夠由任何用戶,但用戶必須具備正確執行程序的數據庫權限

  • 程序必須是可執行的索引全部者

  • 程序必須不發出像COMMIT的 DDL 或交易控制語句

索引以後編輯程序

若是您更改或編輯存儲的過程,在此基礎上的索引不會向外通知,您必須手動從新建立此類的索引。所以,若是該存儲過程使用的其它列,這些列的值更改,不會從新生成索引的行。僅當索引的列更改時從新編制索引行。

先前

指定程序的第二個參數的數據類型。您可使用CLOBBLOBCLOB_LOCBLOB_LOCVARCHAR2.

CLOB 例 USER_DATASTORE

做者、 標題和文本字段分開,如articles表定義以下所示的表,請考慮:

create table articles( 
    id       number, 
    author   varchar2(80), 
    title    varchar2(120), 
    text     clob );

做者和標題的字段是要索引的文檔文本的一部分。假定用戶appowner寫道合成一個文件從文本、 做者和標題字段的用戶數據存儲接口的存儲的過程:

create procedure myproc(rid in rowid, tlob in out clob nocopy) is 
  begin 
      for c1 in (select author, title, text from articles 
                  where rowid = rid) 
      loop 
dbms_lob.writeappend(tlob, length(c1.title), c1.title);
   dbms_lob.writeappend(tlob, length(c1.author), c1.author);
   dbms_lob.writeappend(tlob, length(c1.text), c1.text);
end loop; 
    end; 
 

此過程接受 rowid 和臨時的CLOB定位器,並串聯成臨時CLOB的這篇文章的全部列。For 循環執行只有一次。

用戶appowner建立首選項,以下所示:

begin
ctx_ddl.create_preference('myud', 'user_datastore'); 
ctx_ddl.set_attribute('myud', 'procedure', 'myproc'); 
ctx_ddl.set_attribute('myud', 'output_type', 'CLOB'); 
end;

appownerarticles(text)使用這種偏好上建立索引時,索引操做看到做者和標題文檔文本中。

USER_DATASTORE 與 BLOB_LOC 的示例

下面的過程可能會用OUTPUT_TYPE BLOB_LOC:

procedure myds(rid in rowid, dataout in out nocopy blob)
is
  l_dtype varchar2(10);
  l_pk    number;
begin
  select dtype, pk into l_dtype, l_pk from mytable where rowid = rid;
  if (l_dtype = 'MOVIE') then
    select movie_data into dataout from movietab where fk = l_pk;
  elsif (l_dtype = 'SOUND') then
    select sound_data into dataout from soundtab where fk = l_pk;
  end if;
end;

用戶appowner建立首選項,以下所示:

begin
ctx_ddl.create_preference('myud', 'user_datastore'); 
ctx_ddl.set_attribute('myud', 'procedure', 'myproc'); 
ctx_ddl.set_attribute('myud', 'output_type', 'blob_loc'); 
end;

NESTED_DATASTORE

使用嵌套數據存儲類型存儲爲嵌套表中的行的索引文檔。

表 2-7 NESTED_DATASTORE 屬性

屬性 屬性值
nested_column 指定嵌套的表的列的名稱。此屬性是必需的。僅指定的列名稱。請指定架構全部者或包含的表名稱。
nested_type 指定嵌套表的類型。此屬性是必需的。您必須提供全部者的名稱和類型。
nested_lineno 在命令行的嵌套表中指定的屬性名稱。這就像 DETAIL_LINENO 在詳細數據存儲區中。此屬性是必需的。
nested_text 在嵌套的表類型,它包含的文本行中指定的列的名稱。這就像 DETAIL_TEXT 在詳細數據存儲區中。此屬性是必需的。不支持長列類型,做爲嵌套的表中的文本列。
二進制文件 指定 FALSE,Oracle 文本時合成文檔文本自動插入一個換行符。若是指定 TRUE,Oracle 文本作這。此屬性不是必需的。默認值爲 FALSE。

當使用嵌套的表數據存儲區時,你必須虛擬欄編制索引,由於可擴展索引框架不容許索引嵌套的表的列。請參閱示例。

嵌套表的 DML 不會自動傳播到用於索引的虛擬列。DML 嵌套表上,將其傳播到虛擬列,爲您的應用程序代碼或觸發器必須顯式更新虛擬列。

篩選器索引的默認值基於nested_text列的類型。

在驗證期間,該類型存在的甲骨文文字檢查和屬性您指定爲 nested_lineno 和 nested_text 中的嵌套的表類型存在。Oracle 文本不檢查命名的嵌套的表的列索引表中存在。

NESTED_DATASTORE 示例

本節演示使用索引的文檔存儲爲嵌套表中的行的NESTED_DATASTORE類型的示例。

建立嵌套的表

下面的代碼建立一個嵌套的表和嵌套表存儲表 mytab:

create type nt_rec as object (
  lno number, -- line number
  ltxt varchar2(80) -- text of line
);

create type nt_tab as table of nt_rec;
create table mytab (
   id number primary key, -- primary key
   dummy char(1), -- dummy column for indexing
   doc nt_tab -- nested table
)
nested table doc store as myntab;

將值插入到嵌套表

下面的代碼將值插入到具備 id 等於 1 的父行的嵌套表。

insert into mytab values (1, null, nt_tab());
insert into table(select doc from mytab where id=1) values (1, 'the dog');
insert into table(select doc from mytab where id=1) values (2, 'sat on mat ');
commit;
建立嵌套的表格首選項

下面的代碼設置的首選項和屬性爲NESTED_DATASTORE根據定義的嵌套的表類型nt_tab和父表mytab:

begin
-- create nested datastore pref
ctx_ddl.create_preference('ntds','nested_datastore'); 

-- nest tab column in main table
ctx_ddl.set_attribute('ntds','nested_column', 'doc'); 

-- nested table type
ctx_ddl.set_attribute('ntds','nested_type', 'scott.nt_tab');

-- lineno column in nested table
ctx_ddl.set_attribute('ntds','nested_lineno','lno');

--text column in nested table
ctx_ddl.set_attribute('ntds','nested_text', 'ltxt');
end;
嵌套表上建立索引

下面的代碼建立使用嵌套的表數據存儲的索引:

create index myidx on mytab(dummy) -- index dummy column, not nest table
indextype is ctxsys.context parameters ('datastore ntds');
查詢嵌套數據存儲區

下面的 select 語句查詢創建從嵌套的表的索引:

select * from mytab where contains(dummy, 'dog and mat')>0;
-- returns document 1, since it has dog in line 1 and mat in line 2.

篩選器類型

使用篩選器類型來建立肯定文本索引的篩選方式的首選項。篩選器容許字處理和格式化的文檔,以及純文本、 HTML 和 XML 文檔進行索引。

對於已格式化的文檔,Oracle 文本以本機格式存儲文檔和使用篩選器來創建臨時的純文本或 HTML 版本的文檔。Oracle 文本索引詞來自純文本或 HTML 格式的文檔版本。

若要建立篩選器首選項,必須使用如下類型之一:

表 2-8 篩選器類型

篩選器 當使用
CHARSET_FILTER 字符集轉換篩選器
AUTO_FILTER 汽車濾清器過濾格式化的文件,
NULL_FILTER 無過濾所需。用於索引的純文本、 HTML 或 XML 文檔
MAIL_FILTER 使用MAIL_FILTER來轉換 RFC 822,RFC 2045 消息中對可轉位刀片的文本。
USER_FILTER 用戶定義的外部濾波器用於自定義篩選
PROCEDURE_FILTER 用戶定義的存儲過程篩選器,用於自定義篩選。

CHARSET_FILTER

使用CHARSET_FILTER從字符集到字符集數據庫所用的非數據庫字符集轉換文件。

CHARSET_FILTER具備如下屬性:

表 2-9 CHARSET_FILTER 屬性

屬性 屬性值
字符集 指定源字符集的全球化支持名稱。

若是您指定 UTF16AUTO,此篩選器自動檢測若是字符集是 UTF16 大-或小端字節序。

爲日語字符設置自動檢測指定 JAAUTO。此篩選器自動檢測中 JA16EUC 或 JA16SJIS 的自定義字符規格,並將轉換爲數據庫字符集。此篩選器是有用在日語中,在您的數據文件具備混合字符集。

請參見:

有關受支持的全球化支持字符集的詳細信息oracle 數據庫全球化支持指南設置。

UTF 16 大-和小端字節序檢測

若是你的字符集是 UTF-16,則能夠指定 UTF16AUTO 自動檢測大或小字節數據。甲骨文文字這樣經過檢查文檔行的第一次的兩個字節。

若是前兩個字節是 0xFE,0xFF,文檔公認的小端字節序,減去那些兩個字節的文檔的其他部分經過索引。

若是前兩個字節 0xFF,0xFE,文檔公認的大端字節序,減去那些兩個字節的文檔的其他部分經過索引。

若是前兩個字節是什麼,該文檔被假定爲大端字節序和整篇文檔,包括前兩個字節代代相傳的索引。

索引混合字符設置列

混合的字符設置的列是一種存儲不一樣字符集的文檔。例如,文本表可能以 utf8 表示,將某些文檔存儲在 WE8ISO8859P1 和其餘人。

要索引的表中不一樣字符集的文檔,必須與字符設置列建立你的基表。在本專欄中,能夠指定文檔字符集在每行的基礎上。要編制索引的文檔,Oracle 文本轉換數據庫字符集的文檔。

字符集與CHARSET_FILTER的改建工程。當字符集列中爲NULL或不認可時,Oracle 文本假定源字符集是charset屬性中指定。

注:

字符集轉換也與AUTO_FILTER的做品當文件格式列設置爲TEXT.
索引混合字符設置示例

例如,與字符集列建立表:

create table hdocs (
     id number primary key,
     fmt varchar2(10),
     cset varchar2(20),
     text varchar2(80)
);

建立該篩選器首選項:

begin
cxt_ddl.create.preference('cs_filter', 'CHARSET_FILTER');
ctx_ddl.set_attribute('cs_filter', 'charset', 'UTF8');end

插入純文本文檔和命名的字符集:

insert into hdocs values(1, 'text', 'WE8ISO8859P1', '/docs/iso.txt');
insert into hdocs values (2, 'text', 'UTF8', '/docs/utf8.txt');
commit;

字符集列建立索引和名稱:

create index hdocsx on hdocs(text) indextype is ctxsys.context
  parameters ('datastore ctxsys.file_datastore 
  filter cs_filter 
  format column fmt
  charset column cset');

AUTO_FILTER

AUTO_FILTER是一個通用的過濾器,過濾器大多數文件格式,包括 PDF 和 Microsoft Word ™ 文件。將它用於單格式和混合格式的列進行索引。此篩選器自動繞過純文本、 HTML、 XHTML、 SGML 和 XML 文件。

請參見:

AUTO_FILTER和學會更多關於如何設置您的環境使用此篩選器支持的格式的列表,請參閱附錄 B,"Oracle 文本支持文檔格式".

注:

AUTO_FILTER替換INSO_FILTER,其中已棄用。雖然已盡一切努力確保最大的向後兼容性之間兩個篩選器,以便使用INSO_FILTER應用程序將繼續工做而無需修改,可能會出現一些差別。用戶所以應該在他們新的程序中使用AUTO_FILTER和在可能的狀況下,替換實例的INSO_FILTER,和任何優惠制度或常數,使在舊的應用程序中使用它。

AUTO_FILTER偏好具備下列屬性:

表 2-10 AUTO_FILTER 屬性

屬性 屬性值
超時 以秒爲單位指定AUTO_FILTER超時。使用 0 到 42,949,672 之間的數字。默認值是 120。設置此值 0 禁用的功能。

這等待期如何使用的方法取決於您如何設置 timeout_type。

此功能被禁用,相應的字符集和格式列致使AUTO_FILTER繞行,例如當格式標記TEXT的行.

使用此功能來防止甲骨文文本索引從懸掛無限期地等待操做篩選器操做。

timeout_type 指定的啓發式算法或固定。默認值爲啓發式算法。

指定 Oracle 文本,以檢查每一個超時秒是否從外面在 HTML 導出輸出增長了啓發式算法。若是輸出並無增長,操做將終止該文檔。CTX_USER_INDEX_ERRORS視圖中記錄的錯誤和 Oracle 文本移動到下一文檔的行索引。

指定固定終止外面在 HTML 出口加工後不管是西耶是否只掛過濾的超時秒數。當索引吞吐量比抽出時間來成功地篩選大型文檔更重要時,此值是有用的。

output_formatting 將此屬性設置有對篩選器的性能或濾波器的輸出沒有影響。它被維護向後兼容性。

索引格式文件

若要包含格式化的文件,例如 Microsoft Word 文本欄編制索引,請使用AUTO_FILTER此篩選器將自動檢測文檔格式。您可使用 CTXSYSAUTO_FILTER的系統定義的偏好在參數子句中,以下所示:

create index hdocsx on hdocs(text) indextype is ctxsys.context
  parameters ('datastore ctxsys.file_datastore 
  filter ctxsys.auto_filter');

注:

CTXSYS.AUTO_FILTER替換 CTXSYS.INSO_FILTER,其中已棄用。程序利用CTXSYS.INSO_FILTER應該仍然工做。新的程序應該使用 CTXSYS.AUTO_FILTER.

顯式地繞過純文本或 HTML 混合的格式列中

混合格式列是包含多個文檔的格式,如一列包含 Microsoft Word、 PDF、 純文本和 HTML 文檔的文本列。

AUTO_FILTER能夠索引列混合格式,自動繞過純文本、 HTML 和 XML 文檔。然而,若是您不想依賴於內置旁路機制,您能夠顯式您行標記爲文本並致使AUTO_FILTER來忽略行而且不處理任何方式中的文檔。

基表中的格式列使您可以指定的文本列中所包含的文檔的類型。您能夠指定如下文件類型:TEXTBINARYIGNORE在索引,期間AUTO_FILTER忽略鍵入的TEXT,假定字符集列未指定任何文件。(帶有TEXT格式列類型的文檔和一個與IGNORE類型之間的區別是TEXT文檔編制索引,但而 IGNORE文檔根本未編制索引,該篩選器將忽略。使用IGNORE忽略文件,例如圖像文件或在一種語言,你不想要索引的文檔。IGNORE可使用與任何篩選器類型。

若要設置AUTO_FILTER旁路機制,必須在您的基表建立格式列。

舉個例子:

create table hdocs (
     id number primary key,
     fmt varchar2(10),
     text varchar2(80)
);

你假設你索引大可能是 Word 文檔,指定BINARY格式列篩選 Word 文檔中。或者,爲了AUTO_FILTER忽略 HTML 文檔,請在格式列中指定TEXT

例如,下面的語句將兩個文檔添加到文字的表格,將一種格式指派爲BINARY和其餘TEXT:

insert into hdocs values(1, 'binary', '/docs/myword.doc');
insert in hdocs values (2, 'text', '/docs/index.html');
commit;

若要建立索引,使用CREATEINDEX並在參數字符串中指定的格式列名稱:

create index hdocsx on hdocs(text) indextype is ctxsys.context
  parameters ('datastore ctxsys.file_datastore 
  filter ctxsys.auto_filter 
  format column fmt');

若是您不指定TEXTBINARY格式列,則使用BINARY

注:

您無需指定格式列CREATEINDEX時使用AUTO_FILTER.

字符集轉換與 AUTO_FILTER

AUTO_FILTER將文檔轉換爲數據庫字符集時文件格式列設置爲TEXT在這種狀況下, AUTO_FILTER看字符集列來肯定文檔字符集。

若是字符集列的值不是甲骨文文字字符集名稱,該文檔被經過沒有任何字符集轉換。

注:

在使用AUTO_FILTER時,您無需指定字符集列.

若是你作指定的字符集列,不指定格式列AUTO_FILTER做品喜歡CHARSET_FILTER,只是在這種狀況下有沒有日本字符集自動檢測。

請參見:

"CHARSET_FILTER".

NULL_FILTER

使用純文本或 HTML 時要編制索引的NULL_FILTER類型和沒有篩選的須要來進行。NULL_FILTER不具備屬性。

HTML 文檔編制索引

若是您的文檔集徹底是 HTML,Oracle 建議您在您的篩選器首選項中使用 NULL_FILTER

例如,要索引 HTML 文檔集,能夠以下指定爲NULL_FILTERHTML_SECTION_GROUP的系統定義的首選項:

create index myindex on docs(htmlfile) indextype is ctxsys.context 
  parameters('filter ctxsys.null_filter
  section group ctxsys.html_section_group');

請參見:

節組的索引的 HTML 文檔的詳細信息,請參閱"一節組類型".

MAIL_FILTER

使用MAIL_FILTER來轉換 RFC 822,RFC 2045 消息中對可轉位刀片的文本。如下限制持有爲輸入:

  • 文檔必須是 US-ASCII

  • 行不能超過 1024 個字節

  • 文檔必須是在 RFC 822 語法無效。

若是輸入無效的行爲是未定義的。由無錯誤過濾器,可能強勁處理存在必定的誤差。其餘人可能會致使讀取時間或過濾時間的錯誤。

MAIL_FILTER具備下列屬性:

表 2-11 MAIL_FILTER 屬性

屬性 屬性值
INDEX_FIELDS 指定以冒號分隔的要保留在輸出中的字段列表。這些字段轉換爲標記的標記。例如,若是將INDEX_FIELDS設置爲"FROM":

From: Scott Tiger

成爲:

<FROM>Scott Tiger</FROM>

只有頂級字段將轉換以這種方式。

AUTO_FILTER_TIMEOUT 指定 AUTO_FILTER篩選經過郵件過濾器調用的超時值。默認值爲 60。(替換INSO_TIMEOUT屬性和INSO_TIMEOUT的向後兼容.)
AUTO_FILTER_OUTPUT_FORMATTING 指定或TRUEFALSE默認值是TRUE.

此屬性將替換之前的INSO_OUTPUT_FORMATTING屬性。然而,它在當前版本中沒有任何影響。

PART_FIELD_STYLE 指定應如何轉換髮生在較低級別的部件和INDEX_FIELDS特性所標識的字段。頂級的消息部分由INDEX_FIELDS標識的字段老是轉換爲標記標記 (見INDEX_FIELDS前面的說明) ;PART_FIELD_STYLE控制後續部分 ; 轉的型例如,附加的電子郵件。

可能的值包括IGNORE(默認值),其中一部分字段並不包括在索引 ;TAG,標記,做爲與頂層部件領域 ; 發生於轉化部分字段名稱FIELD,於其中一部分字段名稱保存做爲字段,不做爲標記 ;TEXT,其中部分字段名稱都取消了,而只有字段內容保存爲索引。PART_FIELD_STYLE是如何工做的示例,請參閱"Mail_Filter 示例"

篩選器的行爲

此篩選器執行如下操做爲每一個文檔:

  • 讀取和刪除頁眉字段

  • 解碼的消息正文,若是須要,根據內容傳輸編碼字段

  • 採起行動取決於內容類型字段值和郵件篩選器配置文件中指定的用戶指定的行爲。(請參閱"關於郵件篩選器的配置文件")。可能採起的行動是:

    • 生產輸出文本 (INCLUDE) 體內。若是在包括部分在內容類型標頭字段遇到沒有字符集,則 Oracle 默認爲您在特性中指定的值將列設置在基表中。你的名字你填充的字符設置的列在建立索引命令的參數字符串。

    • AUTO_FILTER正文內容 (AUTO_FILTER指令)。

    • 從輸出文本 (IGNORE刪除正文內容)

  • 若是未指定行爲的配置文件中的類型,默認值以下:

    • 文本 / *: 產生輸出文本的身體

    • 應用程序 / *: AUTO_FILTER正文內容

    • 圖像 / *、 音頻 / *、 視頻 / *、 模型 / *: 忽略

  • 將分析多部分郵件,郵件過濾器應用以遞歸方式對每一個部分。每一個部分追加到輸出。

  • 全部文本製做將字符集轉換爲數據庫字符集中,若是須要的話。

關於郵件篩選器配置文件

MAIL_FILTER篩選器使用的郵件篩選器的配置文件,其中包含指令指定一個郵件文檔的篩選方式。郵件篩選器的配置文件是一個可編輯的文本文件。在這裏能夠爲每一個內容類型來重寫默認行爲。配置文件還包含 IANA Oracle 全球化支持字符設置的名稱映射。

文件的位置必須在ORACLE_HOME/ctx/config。新的系統參數中存儲要使用的文件的名稱 MAIL_FILTER_CONFIG_FILE在安裝,這是設置爲 drmailfl.txt,具備有用的默認值的內容。

Oracle 建議您建立您本身的郵件篩選器配置文件以免覆蓋新的版本或修補程序集的安裝。郵件篩選器配置文件應該在數據庫字符集設置。

郵件文件的配置文件結構

該文件有兩個部分,行爲和數據。你指示開始的行爲部分,以下所示:

[behavior]

每一個線如下始於一個 mime 類型,而後空白,行爲規範。MIME類型能夠是完整的TYPE/SUBTYPE或只是TYPE,它將適用於該類型的全部子類型。TYPE/SUBTYPE規格覆蓋TYPE的規格,以重寫默認行爲。行爲能夠INCLUDEAUTO_FILTERIGNORE(請參閱"篩選器的行爲"的定義)。舉個例子:

application/zip     IGNORE
application/msword  AUTO_FILTER
model               IGNORE

您不能指定爲"多部分"或"郵件"類型的行爲。若是你這樣作,這種行被忽略。一種類型的重複規範替換較早的規範。

評論能夠列入的郵件配置文件的起始行以 # 符號。

字符集映射小節的開頭

[charsets]

線包括 IANA 的名字,而後空格,而後一個 Oracle 全球化支持字符集的名稱,好比:

US-ASCII     US7ASCI
ISO-8859-1   WE8ISO8859P1

此文件是郵件過濾器獲取映射的惟一途徑。沒有默認值。

當您更改配置文件時,更改將影響僅索引後,點過的文檔。您必須在更改該文件後刷新共享的池。

Mail_Filter 示例

假設咱們有一個具備如下形式,其餘帶有不一樣主題行的電子郵件與咱們的電子郵件相連的電子郵件:

To:  somebody@someplace
Subject:  mainheader
Content-Type:  multipart/mixed
. . .
Content-Type: text/plain
X-Ref:  some_value
Subject:  subheader 1
. . .
Content-Type:  text/plain
X-Control:  blah blah blah 
Subject:  subheader 2
. . .

咱們設置INDEX_FIELDS是"主體",最初, PART_FIELD_STYLEIGNORE.

CTX_DDL.CREATE_PREFERENCE('my_mail_filt', 'mail_filter');
CTX_DDL_SET_ATTRIBUTE(my_mail_filt', 'INDEX_FILES', 'subject');
CTX_DDL.SET ATTRIBUTE ('my_mail_filt', 'PART_FIELD_STYLE', 'ignore');

如今時建立該索引,將會索引此文件,以下所示:

<SUBJECT>mainheader</SUBJECT>

若是PART_FIELD_STYLE相反設置爲TAG,這成爲:

<SUBJECT>mainheader</SUBJECT>
<SUBJECT>subheader1</SUBJECT>
<SUBJECT>subheader2</SUBJECT>

若是將PART_FIELD_STYLE設置爲FIELD相反,這是的結果:

<SUBJECT>mainheader<SUBJECT>
SUBJECT:subheader1
SUBJECT:subheader2

最後,若是PART_FIELD_STYLE相反設置爲TEXT,而後結果是:

<SUBJECT>mainheader</SUBJECT>
subheader1
subheader2

USER_FILTER

使用USER_FILTER類型來指定外部篩選器用於篩選的列中的文檔。USER_FILTER具備如下屬性:

表 2-12 USER_FILTER 屬性

屬性 屬性值
命令 指定的篩選器可執行文件的名稱。
命令

指定單一的可執行文件外部篩選器,用於篩選的列中存儲的全部文本。若是不止一個文檔格式存儲在列中,爲命令指定的外部篩選器必須認識和處理全部這種格式。

在 UNIX 上,您指定的可執行文件必須存在於$ORACLE_HOME/ctx/bin目錄中。在 Windows 上,您指定的可執行文件中的%ORACLE_HOME%/bin目錄必須存在。

您必須建立您的用戶篩選器可執行文件具備兩個參數: 第一個是要讀取輸入文件的名稱和第二個是要寫入的輸出文件的名稱。

若是全部文件格式都支持AUTO_FILTER,而不是USER_FILTER使用 AUTO_FILTER ,除非額外任務除了篩選所需的文件。

用戶篩選器示例

下面的示例將用做用戶篩選器的 Perl 腳本。此腳本將轉換爲大寫的第一個參數中指定的輸入的文字文件,並將輸出寫入到第二個參數中指定的位置:

#!/usr/local/bin/perl

open(IN, $ARGV[0]);
open(OUT, ">".$ARGV[1]);

while (<IN>)
{
  tr/a-z/A-Z/;
  print OUT;
}

close (IN);
close (OUT);

假設這個文件命名爲upcase.pl,請建立篩選器首選項以下:

begin 
  ctx_ddl.create_preference 
    ( 
      preference_name => 'USER_FILTER_PREF', 
      object_name     => 'USER_FILTER' 
    ); 
  ctx_ddl.set_attribute
    ('USER_FILTER_PREF','COMMAND','upcase.pl');
end; 

在 SQL 中建立索引 * 加上,以下所示:

create index user_filter_idx on user_filter ( docs ) 
  indextype is ctxsys.context 
  parameters ('FILTER USER_FILTER_PREF'); 

PROCEDURE_FILTER

使用PROCEDURE_FILTER類型來篩選您的文檔的存儲過程。每次一個文檔須要進行篩選的時被調用存儲的過程。

這種類型具備下列屬性:

表 2-13 PROCEDURE_FILTER 屬性

屬性 目的 容許的值
程序 篩選器名稱的存儲過程。 任何程序。該過程能夠是 PL/SQL 存儲過程。
input_type 爲存儲過程的輸入參數的類型。 VARCHAR2, BLOB, CLOB, FILE
先前 輸出參數的存儲過程的類型。 VARCHAR2, CLOB, FILE
rowid_parameter 包括 rowid 參數嗎? TRUE/FALSE
format_parameter 包括格式參數嗎? TRUE/FALSE
charset_parameter 包括 charset 參數嗎? TRUE/FALSE
程序

指定要用於篩選的存儲過程的名稱。該過程能夠是 PL/SQL 存儲過程。該過程能夠是一個安全的標註或調用安全的標註。

rowid_parameterformat_parameter charset_parameter設置爲 FALSE,該過程能夠具備下列簽名之一:

PROCEDURE(IN BLOB, IN OUT NOCOPY CLOB)
PROCEDURE(IN CLOB, IN OUT NOCOPY CLOB)
PROCEDURE(IN VARCHAR, IN OUT NOCOPY CLOB)
PROCEDURE(IN BLOB, IN OUT NOCOPY VARCHAR2)
PROCEDURE(IN CLOB, IN OUT NOCOPY VARCHAR2)
PROCEDURE(IN VARCHAR2, IN OUT NOCOPY VARCHAR2)
PROCEDURE(IN BLOB, IN VARCHAR2)
PROCEDURE(IN CLOB, IN VARCHAR2)
PROCEDURE(IN VARCHAR2, IN VARCHAR2)

第一個參數是行的傳遞數據存儲區未過濾的內容。第二個參數是要傳遞迴篩選的文檔文本的過程。

程序屬性是強制性的而且沒有默認值。

input_type

指定的篩選過程的輸入參數的類型。您能夠指定如下內容之一:

類型 描述
程序 篩選器名稱的存儲過程。
input_type 爲存儲過程的輸入參數的類型。
先前 輸出參數的存儲過程的類型。
rowid_parameter 包括 rowid 參數嗎?

Input_type 屬性不是強制性的。若是未指定,BLOB 是默認值。

先前

指定的篩選過程的輸出參數的類型。您能夠指定下列類型之一:

類型 描述
CLOB 輸出參數是 NOCOPY CLOB 中出來。你的程序必須寫入 CLOB 中經過過濾後的內容。
VARCHAR2 輸出參數是在出 NOCOPY VARCHAR2。你的程序必須寫 VARCHAR2 變量的篩選的內容傳遞。
FILE 輸出參數必須IN VARCHAR2在進入篩選過程,輸出參數是一個臨時文件的名稱。篩選過程必須寫入此命名的文件的已篩選的內容。

只有當該過程是一個安全的標註,能夠向文件中寫入時,使用文件輸出類型頗有用。

先前屬性不是強制性的。若是未指定, CLOB是默認的。

rowid_ 參數

當指定 TRUE 時,做爲第一個參數以前的輸入和輸出參數, 傳遞的 rowid 中要被篩選的文檔。

例如,隨着INPUT_TYPE BLOBOUTPUT_TYPE CLOB,和ROWID_PARAMETER TRUE,篩選過程必須具備簽名,以下所示:

procedure(in rowid, in blob, in out nocopy clob)

此屬性是有用的當您的程序須要從其餘列或表的數據。此屬性不是強制性的。默認值爲FALSE.

format_parameter

若是指定TRUE,被篩選的文檔的格式列的值傳遞給篩選過程輸入和輸出參數,但後 rowid 參數,若是啓用了。

您指定的格式列的名稱在參數字符串中的索引時使用的關鍵字'format column <columnname>'該參數的類型必須是IN VARCHAR2.

格式列的值能夠讀取根據 rowid 參數,但此屬性使得單個篩選器的工做對多個表的結構,由於格式屬性抽象,並不須要的知識的表格或格式的列的名稱。

FORMAT_PARAMETER不是強制性的。默認值爲FALSE.

charset_parameter

當你指定TRUE時,文檔被過濾的字符集列的值傳遞給篩選過程輸入和輸出參數,但後的 rowid 和格式的參數,若是啓用了。

您指定的字符集列的名稱在參數字符串中的索引時使用關鍵字'charset column <columnname>'該參數的類型必須是IN VARCHAR2.

CHARSET_PARAMETER屬性不是強制性的。默認值爲 FALSE。

參數順序

ROWID_PARAMETERFORMAT_PARAMETERCHARSET_PARAMETER是徹底獨立的。該命令是 rowid,格式,而後字符集,但篩選過程傳遞只有所需的最小參數。

例如,假定INPUT_TYPEBLOB OUTPUT_TYPECLOB若是您篩選過程須要全部的參數,必須爲程序簽名:

(id IN ROWID, format IN VARCHAR2, charset IN VARCHAR2, input IN BLOB, output IN
OUT NOCOPY CLOB)

若是您的程序須要只有ROWID,而後程序簽名必須是:

(id IN ROWID,input IN BLOB, ouput IN OUT NOCOPY CLOB)

程序篩選器執行要求

若要建立使用PROCEDURE_FILTER偏好指數,索引全部者必須有執行權限的程序。

錯誤處理

篩選過程能夠提升經過正常的 PL/SQL raise_application_error 設施所需的任何錯誤。這些錯誤傳播到CTX_USER_INDEX_ERRORS視圖或報告給用戶,具體取決於如何調用篩選器。

程序篩選器首選項示例

考慮篩選過程CTXSYS.NORMALIZE您定義具備下列簽名:

PROCEDURE NORMALIZE(id IN ROWID, charset IN VARCHAR2, input IN CLOB, 
output IN OUT NOCOPY VARCHAR2);

若要使用此過程爲您的篩選器,設置您的篩選器首選項,以下所示:

begin
ctx_ddl.create_preference('myfilt', 'procedure_filter');
ctx_ddl.set_attribute('myfilt', 'procedure', 'normalize');
ctx_ddl.set_attribute('myfilt', 'input_type', 'clob');
ctx_ddl.set_attribute('myfilt', 'output_type', 'varchar2');
ctx_ddl.set_attribute('myfilt', 'rowid_parameter', 'TRUE');
ctx_ddl.set_attribute('myfilt', 'charset_parameter', 'TRUE');
end;

詞法分析器類型

使用詞法分析器首選項來指定要索引的文本的語言。若要建立詞法分析器首選項,必須使用如下詞法分析器類型之一:

表 2-14 詞法分析器類型

類型 描述
BASIC_LEXER 從語言如英語和使用空白的大多數西方歐洲語言中的文本中提取令牌的 lexer 分隔單詞。
MULTI_LEXER 詞法分析器的表包含不一樣語言的文檔建立索引
CHINESE_VGRAM_LEXER 從中文文本中提取令牌的詞法分析器。
CHINESE_LEXER 從中文文本中提取令牌的詞法分析器。
JAPANESE_VGRAM_LEXER 從日語文本中提取令牌的詞法分析器。
JAPANESE_LEXER 從日語文本中提取令牌的詞法分析器。
KOREAN_MORPH_LEXER 從朝鮮文文本中提取令牌的詞法分析器。
USER_LEXER 您建立的用於索引特定語言的詞法分析器。
WORLD_LEXER 詞法分析器索引表中包含文件的不一樣的語言 ;在文檔中的自動檢測語言

BASIC_LEXER

使用BASIC_LEXER類型來標識標記用於建立英語和全部其餘支持空白分隔的語言的文本索引。

BASIC_LEXER還容許基地字母轉換、 複合詞標引、 區分大小寫的索引和空格分隔的語言具備擴展字符集的替換拼寫。

以英文和法文,你可使用BASIC_LEXER來啓用主題索引。

注:

在查詢時查詢術語也執行詞法分析器並對標記索引 (例如,刪除字符和基地字母轉換) 以前的任何處理。這將確保查詢條件相匹配的文本索引中的標記形式。

BASIC_LEXER支持任何數據庫的字符集。

BASIC_LEXER具備下列屬性:

表 2-15 BASIC_LEXER 屬性

屬性 屬性值
延續 字符
numgroup 字符
numjoin 字符
printjoins 字符
標點 字符
skipjoins 字符
startjoins 非字母數字字符,出如今標記的開頭(字符串)
endjoins 非字母數字字符,出如今標記的結尾(字符串)
空白 字符(字符串)
換行符 換行符 (\n)

CARRIAGE_RETURN (\r)

base_letter 沒有 (已禁用)
  是的 (啓用)
base_letter_type 泛型 (默認值)
  特定
override_base_letter 真實

FALSE (默認值)

mixed_case 沒有 (已禁用)
  是的 (啓用)
複合材料 默認 (沒有索引,默認設置的複合字)
  德語 (德國組合詞索引)
  荷蘭語 (荷蘭複合字索引)
index_stems 0 無

1 英語

2 派生詞綴

3 荷蘭

4 法國

5 德國

6 意大利

7 西班牙

index_themes 是的 (啓用)
  沒有 (禁用默認值)
  沒有 (禁用默認值)
index_text YES (缺省啓用,
  沒有 (已禁用)
prove_themes 是 (已啓用,默認值)
  沒有 (已禁用)
theme_language 自動 (默認值)
  (任何全球化支持語言)
alternate_spelling 德語 (德國替換拼寫)
  丹麥語 (丹麥替換拼寫)
  瑞典語 (瑞典替換拼寫)
  沒有沒有替換拼寫默認)
new_german_spelling 是啊

無 (默認值)

延續

S指定字符,指示詞下一行上繼續並應做爲單個標記創建索引。最多見的符是連字符 '-' 和反斜槓 \。

numgroup

S指定單個字符指示,當它出如今字符串中的數字,這些數字爲分組在一個大的單一單元內。

例如,逗號 ',' 可能定義爲一個numgroup字符,由於它常常指示數以千計分組,當它出如今數字的字符串。

numjoin

S指定的字符,當他們出如今字符串的位數,致使 Oracle 文本索引的數字字符串做爲一個單一的單位或單詞。

舉個例子,期 '.' 能夠定義爲 numjoin 個字符,由於它經常充當小數點,當它出如今數字的字符串。

注:

Numjoin和numgroup的默認值是由爲數據庫指定的全球化支持初始化參數決定的。

通常狀況下,一個值,不須要指定爲numjoin或numgroup ,建立BASIC_LEXER的 lexer 首選時.

printjoins

S指定的當它們出如今一個詞 (開頭、 中間或結束),任何地方都處理爲字母數字和文本索引中的令牌中包含非字母數字字符。這包括printjoins ,連續發生。

例如,若是連字符-和下劃線 '_' 字符被定義爲printjoins、 _file_等僞知識分子的術語都存放在文本索引做爲僞知識分子和_file_.

注:

若是printjoins字符也被定義爲一個標點字符,該字符只處理做爲一個字母數字字符若是緊跟着它的字符是一個標準的字母數字字符或已被定義爲printjoins或skipjoins的字符。
標點

指定的非字母數字的字符,當它們出如今一個單詞的結尾處顯示一個句子的結束。默認值是期間 '。 ',問號 '嗎? ',和感嘆號'!'。

在文本編制索引以前,從令牌中刪除被定義爲標點的字符。然而,若是一個標點字符也被定義爲一個printjoins字符,只有當它是在令牌中的最後一個字符時移除字符。

例如,若是句點 (.) 被定義爲printjoins和標點字符,下列轉換在進行索引和查詢,以及過程當中會發生:

令牌 索引的標記
.doc .doc
dog.doc dog.doc
狗。doc 狗。doc
那隻狗。
狗...... 狗。

此外, BASIC_LEXER使用標點字符結合換行符和空格的字符,來肯定句子的段落搜索的句子和段落分隔符。

skipjoins

Specify 非字母數字字符,當它們出如今一個單詞內標識 word 做爲單個標記 ;然而,字符不會存儲與文本索引中的令牌中。

例如,若是連字符 '-' 定義爲skipjoins,詞僞知識分子存儲在pseudointellectual做爲文本索引.

注:

printjoins和skipjoins是互斥的。不能爲這兩個屬性指定相同的字符。
startjoins/endjoins

Startjoins,爲指定的字符,當遇到一個令牌中的第一個字符做爲顯式標識標記的開始。字符,以及當即遵循它,任何其餘startjoins字符被列入該標記的文本索引項。此外,一個startjoins字符的字符串的第一個startjoins字符隱式結束前一個標記。

Endjoins,爲指定的字符,當遇到一個令牌中的最後一個字符做爲顯式識別標記的結束。字符,以及當即遵循它,任何其餘startjoins字符被列入該標記的文本索引項。

下列規則適用於startjoins和endjoins:

  • 字符指定爲startjoins/endjoins不能發生的任何其餘屬性爲BASIC_LEXER.

  • startjoins/endjoins字符能夠出現只在開頭或結尾標記

Printjoins 不一樣於 endjoins 和 startjoins,位置並不重要。例如, $35將索引做爲一個標記若是 $是 startjoin 或 printjoin,而是做爲兩個標記若是它被定義爲 endjoin。

空白

S指定被視爲標記之間的空白區域的字符。BASIC_LEXER使用空白字符標點和換行字符結合來識別字符做爲句子分隔符的句子和段落搜索的字符串。

空白的預約義的默認值是 '空間' 和 '選項卡。不能更改這些值。指定字符爲空格字符將添加到這些默認值。

換行符

S指定表示文本的行尾的字符。BASIC_LEXER使用換行符連同標點符號和空格字符識別做爲句子和段落搜索段落分隔符的字符串。

換行符的惟一有效值爲 NEWLINECARRIAGE_RETURN (回車)。默認值是NEWLINE.

base_letter

指定存儲在文本索引中以前是否有音符 (元音變音、 變、 急性口音,等等) 的字符轉換爲其基窗體。默認值爲沒有 (基地字母轉換禁用)。基地字母轉換和base_letter_type的詳細信息,請參閱基礎字母轉換.

base_letter_type

指定泛型或特定。

泛型的值是默認值,並信變換爲基礎的手段使用一個適用於全部語言的轉換表。基地字母轉換和base_letter_type的詳細信息,請參閱基礎字母轉換.

override_base_letter

alternate_spelling同時啓用了base_letter ,則時,有時須要重寫base_letter ,以防止意外的結果,從串行轉換。請參見重寫基信轉換與替換拼寫默認值爲 FALSE.

mixed_case

S指定詞法分析器葉標記顯示在文本中的徹底相同的呢,仍是將標記轉換爲所有大寫。缺省設置爲 NO (標記轉換爲所有大寫)。

注:

Oracle 文本能夠確保這個詞與查詢匹配的被查詢的索引是否區分大小寫。所以,若是您對您的文本索引啓用區分大小寫,針對索引的查詢都區分大小寫。
複合材料

指定是否複合詞標引是禁用或啓用或 GERMANDUTCH的文本。默認值是DEFAULT(複合字索引禁用)。

一般是在德國的字典中的一個條目的單詞不將拆分爲複合的莖,而不是字典條目的單詞被拆分爲複合莖。

要檢索的索引的複合莖,必須發出一個幹查詢,例如$bahnhof。單詞表詞幹分析器語言必須匹配的複合的莖的語言。

阻止用戶詞典

Oracle 文本附帶產生用於ENGLISHDERIVATIONAL所產生的字典 ($ORACLE_HOME/ctx/data/enlx/dren.dct) 的系統。您能夠建立您本身的語言,以自定義如何分解單詞的用戶詞典。這些字典是表 2-16所示.

表 2-16 產生用戶詞典

詞典 語言
$ORACLE_HOME/ctx/data/frlx/drfr.dct 法語
$ORACLE_HOME/ctx/data/delx/drde.dct 德語
$ORACLE_HOME/ctx/data/nllx/drnl.dct 荷蘭語
$ORACLE_HOME/ctx/data/itlx/drit.dct 意大利語
$ORACLE_HOME/ctx/data/eslx/dres.dct 西班牙語

詞幹的用戶詞典比那些表 2-16中列出的語言不受支持.

用戶詞典的格式以下所示:

input term <tab> output term

分解單詞的個別部分必須用 # 字符分隔。如下的示例條目是爲德語單詞火車總站:

Hauptbahnhof<tab>Haupt#Bahnhof
Hauptbahnhofes<tab>Haupt#Bahnhof
Hauptbahnhof<tab>Haupt#Bahnhof
Hauptbahnhoefe<tab>Haupt#Bahnhof
index_themes

是指定索引主題信息用英文或法文。這使得 ABOUT查詢更精確。Index_themes和index_text的屬性不可能都是號

若是您使用BASIC_LEXER ,並指定index_themes沒有值,此屬性默認爲NO.

能夠將此參數設置爲 TRUE,任何爲包括 CTXCAT 的索引類型。若要與 CATSEARCH 發出關於查詢,請將查詢模板使用上下文語法。

注:

index_themes須要安裝的知識庫文章。知識庫文章可能或不可能安裝 Oracle 文本。在知識的基礎上的詳細信息,請參閱Oracle 文本應用程序開發人員指南.
prove_themes

指定YES以證實主題。主題證實試圖在文檔中查找相關的主題。當發現有沒有相關的主題時,父主題被消除從文檔。

雖然主題證實是能夠接受的大型文檔,幾句簡短的文字說明不多證實父主題,從而致使貧窮召回性能與ABOUT查詢。

證實結果在較高的精度和減小 (減小返回的行) 召回ABOUT查詢的主題。爲較高的查全率ABOUT查詢中可能不是那麼精確,您能夠禁用主題證實。YES.

prove_themes屬性支持CONTEXTCTXRULE的索引。

theme_language

指定的知識庫用於主題代當index_themes設置爲YESindex_themes是NO的時將此參數設置有沒有任何的影響。

您能夠指定任何全球化支持的語言或AUTO您必須爲您指定的語言的知識庫文章。此版本提供一個知識庫中只有英文和法文。在其餘語言中,您能夠建立您本身的知識庫。

默認值是AUTO,它指示系統從新設置此參數的語言環境。

index_stems

指定的詞幹分析器用於幹索引。你能夠選擇之一

  • 沒有一個

  • 英語

  • 派生詞綴

  • 荷蘭語

  • 法語

  • 德語

  • 意大利語

  • 西班牙語

令牌被阻擋在索引時除了正常形式單一基窗體。索引莖容許更好的查詢性能,對於幹 ($) 的查詢,如$computed.

index_text

對索引詞信息指定YESIndex_themes和index_text的屬性都不能NO.

缺省設置爲NO.

alternate_spelling

GERMANDANISH,或指定SWEDISH,使不一樣的拼寫這些語言之一。啓用備用拼寫使您可以查詢中任何其餘形式的單詞。

替換拼寫默認是關閉的 ;然而,在 Oracle 提供admin/defaults(德語, drdefdk.sql爲丹麥語和瑞典語drdefs.sql drdefd.sql ) 的特定於語言的腳本,替換拼寫被打開的。若是安裝過程當中使用這些腳本,而後替換拼寫是上。然而,您能夠指定NONE ,沒有備用的拼寫。Oracle 的文本使用替換拼寫公約有關詳細信息,請參閱替換拼寫.

new_german_spelling

指定是否使用BASIC_LEXER的查詢返回兩個傳統和改革 (新) 拼寫的德語單詞。若是將new_german_spelling設置爲是,而後建立索引傳統和新形式的單詞。若是它設置爲否,而後 word 將索引僅做爲它在查詢中的規定。默認值是號

請參見:

"新的德語拼寫"

BASIC_LEXER 示例

下面的示例設置 printjoin 字符和禁用索引與BASIC_LEXER的主題:

begin
ctx_ddl.create_preference('mylex', 'BASIC_LEXER');
ctx_ddl.set_attribute('mylex', 'printjoins', '_-');
ctx_ddl.set_attribute ( 'mylex', 'index_themes', 'NO');
ctx_ddl.set_attribute ( 'mylex', 'index_text', 'YES'); 
end;

若要建立索引,沒有主題標引與 printjoins 字符設置所述,請發出如下語句:

create index myindex on mytable ( docs ) 
  indextype is ctxsys.context 
  parameters ( 'LEXER mylex' ); 

MULTI_LEXER

使用MULTI_LEXER到索引文本列包含不一樣語言的文檔。例如,可使用此詞法分析器將英語、 德語和日語文檔存儲的文本列進行索引。

Lexer 沒有屬性。

你基地的表中,必須有語言列。以多語言表的索引,您指定的語言列建立索引時。

建立多 lexer 偏好與CTX_DDL.CREATE_PREFERENCE你向多 lexer 偏好與CTX_DDL.ADD_SUB_LEXER程序。

在索引、 MULTI_LEXER檢查每一行語言列的值和特定於語言的詞法分析器來處理文檔中的交換機。

WORLD_LEXER詞法分析器還執行多國語言的索引,但不須要單獨的語言列 (也就是說,它有自動語言檢測)。有關WORLD_LEXER的詳細信息,請參閱"WORLD_LEXER".

多語言 Stoplists

當您使用MULTI_LEXER時,您還能夠爲索引使用多語言的非索引字表。

請參見:

"多語言 Stoplists".

MULTI_LEXER 示例

建立多語言表語言列與主鍵、 文本列中,以下所示:

create table globaldoc (
   doc_id number primary key,
   lang varchar2(3),
   text clob
);

假設表保存大可能是英文資料,與偶爾的德語或日語文檔。若要處理這三種語言,您必須建立三子詞法分析器、 一個用於英語、 德語和日語:

ctx_ddl.create_preference('english_lexer','basic_lexer');
ctx_ddl.set_attribute('english_lexer','index_themes','yes');
ctx_ddl.set_attribute('english_lexer','theme_language','english');

ctx_ddl.create_preference('german_lexer','basic_lexer');
ctx_ddl.set_attribute('german_lexer','composite','german');
ctx_ddl.set_attribute('german_lexer','mixed_case','yes');
ctx_ddl.set_attribute('german_lexer','alternate_spelling','german');

ctx_ddl.create_preference('japanese_lexer','japanese_vgram_lexer');

建立多 lexer 首選項:

ctx_ddl.create_preference('global_lexer', 'multi_lexer');

因爲存儲的文件大可能是英語,使英語的詞法分析器使用 CTX_DDL 的默認設置。ADD_SUB_LEXER:

ctx_ddl.add_sub_lexer('global_lexer','default','english_lexer');

如今,他們各自的語言與 CTX_DDL 中添加德語和日語的詞法分析器。ADD_SUB_LEXER程序。此外假定語言列表示在標準的 ISO 639-2 的語言代碼,因此添加那些做爲替換值。

ctx_ddl.add_sub_lexer('global_lexer','german','german_lexer','ger');
ctx_ddl.add_sub_lexer('global_lexer','japanese','japanese_lexer','jpn');

如今,建立索引globalx,指定多 lexer 偏好和語言列參數子句中,以下所示:

create index globalx on globaldoc(text) indextype is ctxsys.context
parameters ('lexer global_lexer language column lang');

查詢多語言表

在查詢時,多詞法分析器檢查的語言設置,並使用該語言的子詞法分析器偏好來解析查詢。若是不設置語言,則使用默認的詞法分析器。

不然爲查詢是解析,像往常同樣運行。索引包含令牌從多國語言,因此這樣的查詢能夠返回文檔中幾種語言。若要限制您爲給定語言的查詢,請使用語言欄上的結構化的子句。

CHINESE_VGRAM_LEXER

CHINESE_VGRAM_LEXER類型標識用於建立文本索引的中文文本中的標記。

CHINESE_VGRAM_LEXER 屬性

CHINESE_VGRAM_LEXER具備如下屬性:

表 2-17 CHINESE_VGRAM_LEXER 屬性

屬性 屬性值
mixed_case_ASCII7 使大小寫混合 (上部和小寫字母) 搜索的 ASCII7 文本 (例如,貓和貓)。容許的值都YESNO(默認值)。

字符集

您可使用此詞法分析器若是您數據庫的字符集是如下內容之一:

  • AL32UTF8

  • ZHS16CGB231280

  • ZHS16GBK

  • ZHS32GB18030

  • ZHT32EUC

  • ZHT16BIG5

  • ZHT32TRIS

  • ZHT16MSWIN950

  • ZHT16HKSCS

  • UTF8

CHINESE_LEXER

CHINESE_LEXER類型標識繁體及簡體的中文文本,用於建立 Oracle 文本索引中的標記。

此詞法分析器提供瞭如下好處超過CHINESE_VGRAM_LEXER:

  • 生成較小的索引

  • 更好的查詢響應時間

  • 生成真正的單詞標記致使更好的查詢精度

  • 支持中止詞

CHINESE_LEXER使用不一樣的算法來生成標記,由於索引時間是長於與CHINESE_VGRAM_LEXER.

若是你的數據庫角色是由 Oracle 支持中文或 Unicode 字符集之一,您可使用此詞法分析器。

CHINESE_LEXER 屬性

CHINESE_LEXER具備如下屬性:

表 2-18 CHINESE_LEXER 屬性

屬性 屬性值
mixed_case_ASCII7 使大小寫混合 (上部和小寫字母) 搜索的 ASCII7 文本 (例如,貓和貓)。容許的值都YESNO(默認值)。

自定義漢語詞彙

你能夠修改現有詞典 (詞典) 採用中國的詞法分析器,或建立您本身的漢語詞彙,使用ctxlc命令。

JAPANESE_VGRAM_LEXER

JAPANESE_VGRAM_LEXER類型標識在日語中的令牌建立文本索引。它不具備屬性。此詞法分析器支持幹 ($) 運算符。

JAPANESE_VGRAM_LEXER 屬性

此詞法分析器具備下列屬性:

表 2-19 JAPANESE_VGRAM_LEXER 屬性

屬性 屬性值
分隔符 指定NONEALL忽略某些日本的空白字符如全角正斜槓或全寬的中間點。默認值是NONE.
mixed_case_ASCII7 使大小寫混合 (上部和小寫字母) 搜索的 ASCII7 文本 (例如,貓和貓)。容許的值都YESNO(默認值)。

JAPANESE_VGRAM_LEXER 字符集

您可使用此詞法分析器若是您數據庫的字符集是如下內容之一:

  • JA16SJIS

  • JA16EUC

  • UTF8

  • AL32UTF8

  • JA16EUCTILDE

  • JA16EUCYEN

  • JA16SJISTILDE

  • JA16SJISYEN

JAPANESE_LEXER

JAPANESE_LEXER類型標識在日語中的令牌建立文本索引。此詞法分析器支持幹 ($) 運算符。

此詞法分析器提供瞭如下好處超過JAPANESE_VGRAM_LEXER:

  • 生成較小的索引

  • 更好的查詢響應時間

  • 生成真正的單詞標記致使更好的查詢精度

由於JAPANESE_LEXER使用一種新的算法來生成令牌,索引時間是長於與JAPANESE_VGRAM_LEXER.

自定義日本詞彙

你能夠修改現有詞典 (詞典) 採用日本的詞法分析器,或建立您本身的日本詞彙,使用ctxlc命令。

JAPANESE_LEXER 屬性

此詞法分析器具備下列屬性:

表 2-20 JAPANESE_LEXER 屬性

屬性 屬性值
分隔符 指定NONEALL忽略某些日本的空白字符如全角正斜槓或全寬的中間點。默認值是NONE.
mixed_case_ASCII7 使大小寫混合 (上部和小寫字母) 搜索的 ASCII7 文本 (例如,貓和貓)。容許的值都YESNO(默認值)。

日本的 LEXER 字符集

JAPANESE_LEXER支持如下字符集:

  • JA16SJIS

  • JA16EUC

  • UTF8

  • AL32UTF8

  • JA16EUCTILDE

  • JA16EUCYEN

  • JA16SJISTILDE

  • JA16SJISYEN

日本的詞法分析器的示例

JAPANESE_LEXER指定用於建立文本索引時, JAPANESE_LEXER將其一個句子解析成單詞。

例如,如下複詞 (天然語言研究所)

Description of nihongo1.gif follows
圖 nihongo1.gif 的描述

被索引做爲三個標記:

Description of nihongo2.gif follows
圖 nihongo2.gif 的描述

爲了解決一個句子成單詞,引用的內部字典。當不能在內部字典中找到單詞時,Oracle 文本將使用JAPANESE_VGRAM_LEXER來解決它。

KOREAN_MORPH_LEXER

KOREAN_MORPH_LEXER類型標識中用於建立 Oracle 文本索引的朝鮮語文字的標記。

提供的字典

KOREAN_MORPH_LEXER使用四個字典:

表 2-21 KOREAN_MORPH_LEXER 字典

詞典 文件
系統 $ORACLE_HOME/ctx/data/kolx/drk2sdic.dat
語法 $ORACLE_HOME/ctx/data/kolx/drk2gram.dat
Stopword $ORACLE_HOME/ctx/data/kolx/drk2xdic.dat
用戶定義 $ORACLE_HOME/ctx/data/kolx/drk2udic.dat

使用的 KSC 5601 或 MSWIN949 的字符集應該編寫語法,用戶定義的和 stopword 字典。您能夠修改這些詞典使用已定義的規則。不能修改系統詞典。

能夠將未註冊的單詞添加到用戶定義的詞典文件。用於指定新單詞的規則是在文件中。

受支持的字符集

您可使用KOREAN_MORPH_LEXER ,若是您數據庫的字符集是如下內容之一:

  • KO16KSC5601

  • KO16MSWIN949

  • UTF8

  • AL32UTF8

KOREAN_MORPH_LEXER使混合大小寫的搜索。

Unicode 支持

KOREAN_MORPH_LEXER支持:

  • 在 Unicode 中定義的非 KSC5601 韓文字符的單詞

  • 補充字符

請參見:

對補充字符的信息,請參閱Oracle 數據庫全球化支持指南

韓國的一些文件可能有非 KSC5601 個字符。KOREAN_MORPH_LEXER能夠認識到全部可能的 11,172 韓國 (朝鮮) 字符,此類文件還使用 UTF8 或 AL32UTF8 字符集解釋。

使用您的數據庫的 AL32UTF8 字符集來提取代理項字符。默認狀況下, KOREAN_MORPH_LEXER提取全部系列的代理項字符在文檔中爲每一個數據系列的一個標記。

韓國 Unicode 支持的限制

朝鮮文漢字轉換爲朝鮮語 (韓語), KOREAN_MORPH_LEXER支持僅 4888 的朝鮮文漢字字符在 KSC5601 中定義。

KOREAN_MORPH_LEXER 屬性

當您使用KOREAN_MORPH_LEXER時,您能夠指定如下屬性:

表 2-22 KOREAN_MORPH_LEXER 屬性

屬性 屬性值
verb_adjective 指定TRUEFALSE指數動詞、 形容詞或副詞。默認值爲FALSE.
one_char_word 指定TRUEFALSE來索引一個音節。默認值爲FALSE.
數量 指定TRUEFALSE的索引號。默認值爲FALSE.
user_dic 指定TRUEFALSE的指標用戶詞典。默認值是TRUE.
stop_dic 指定TRUEFALSE,則用 stop 單詞的字典。默認值爲TRUE中止詞詞典屬於KOREAN_MORPH_LEXER.
複合材料 指定索引樣式的複合名詞。

指定COMPOSITE_ONLY索引只複合名詞。

指定NGRAM索引全部名詞組成複合名詞。

指定COMPONENT_WORD索引單個名詞複合名詞與複合名詞自己的組件。默認值是COMPONENT_WORD.

下面的示例描述NGRAM COMPONENT_WORD之間的區別.

語素 指定TRUEFALSE的形態學分析。若是設置爲FALSE,建立令牌由分隔符如在文檔中的空白區域劃分對那句話。默認值是TRUE.
to_upper 指定TRUEFALSE ,將英語轉換爲大寫。默認值是TRUE.
朝鮮文漢字 指定TRUE指數朝鮮文漢字字符。若是設置爲FALSE,朝鮮文漢字轉換爲朝鮮文字符。默認值爲FALSE.
long_word 指定TRUE指數在韓國有超過 16 個音節的長單詞。默認值爲FALSE.
日語 指定TRUE要編制索引的日語字符在 Unicode (僅在 2 字節區域)。默認值爲FALSE.
英語 指定TRUE指數的字母數字字符串。默認值是TRUE.

限制

句子和段落章節不支持KOREAN_MORPH_LEXER.

KOREAN_MORPH_LEXER 示例: 將複合屬性設置

你可使用複合屬性來控制如何複合名詞被編入索引。

NGRAM 示例

當您指定NGRAM複合屬性時,複合名詞索引與全部可能的組件標記。例如,如下複合名詞 (信息處理研究所)

Description of 1.jpg follows
圖 1.jpg 的描述

被索引做爲六個標記:

Description of 2.jpg follows
圖 2.jpg 的描述

Description of 3.jpg follows
圖 3.jpg 的描述

您能夠指定NGRAM索引,以下所示:

begin
ctx_ddl.create_preference('my_lexer','KOREAN_MORPH_LEXER');
ctx_ddl.set_attribute('my_lexer','COMPOSITE','NGRAM');
end


若要建立索引:

create index koreanx on korean(text) indextype is ctxsys.context
parameters ('lexer my_lexer');
COMPONENT_WORD 示例

當你爲複合屬性指定了COMPONENT_WORD時,複合名詞和其組件編制索引。例如,如下複合名詞 (信息處理研究所)

Description of 1.jpg follows
圖 1.jpg 的描述

做爲四個令牌被索引:

Description of 1.jpg follows
圖 1.jpg 的描述

Description of comp.jpg follows
圖 comp.jpg 的描述

您能夠指定COMPONENT_WORD索引,以下所示:

begin
ctx_ddl.create_preference('my_lexer','KOREAN_MORPH_LEXER');
ctx_ddl.set_attribute('my_lexer','COMPOSITE','COMPONENT_WORD');
end

若要建立索引:

create index koreanx on korean(text) indextype is ctxsys.context
parameters ('lexer my_lexer');

USER_LEXER

使用 USER_LEXER 能夠插上您本身的特定於語言的詞法分析解決方案。這使您能夠定義爲不支持 Oracle 文本的語言的詞法分析器。它還使您能夠定義新的詞法分析器的一種語言,支持,但其詞法分析器不適合您的應用程序。

您註冊與 Oracle 文本的用戶定義詞法分析器是由兩個例程,您必須提供:

表 2-23 USER_LEXER 爲用戶定義的例程

用戶定義的例程 描述
索引過程 存儲的過程 (PL/SQL) 實現的文檔和中止詞標記化。輸出必須是 XML 文檔做爲指定在這一節。
查詢過程 存儲的過程 (PL/SQL) 實現的查詢詞標記化。輸出必須是 XML 文檔做爲指定在這一節。

限制

USER_LEXER不支持如下功能:

  • CTX_DOC.GISTCTX_DOC.THEMES

  • CTX_QUERY.HFEEDBACK

  • ABOUT查詢運算符

  • CTXRULE爲索引類型

  • VGRAM索引算法

USER_LEXER 屬性

USER_LEXER 具備下列屬性:

表 2-24 USER_LEXER 屬性

屬性 屬性值
INDEX_PROCEDURE 存儲過程的名稱。提供沒有默認值。
INPUT_TYPE VARCHAR2,CLOB。默認值爲 CLOB。
QUERY_PROCEDURE 存儲過程的名稱。提供沒有默認值。

INDEX_PROCEDURE

此回調存儲過程是 Oracle 文本稱爲標記文檔或停用詞在非索引字表對象中找到所需。

要求

此過程能夠是 PL/SQL 存儲過程。

索引全部者必須對此存儲過程的 EXECUTE 權限。

此存儲的過程不能取代或降低以後建立索引。您能夠替換或刪除此存儲的過程後刪除索引。

參數

兩個不一樣的接口支持的用戶定義的詞法分析器索引過程:

限制

此過程必須不執行任何如下操做:

  • 回滾

  • 顯式或隱式提交當前事務

  • 發出任何其它事務控制語句

  • 更改會話語言或領土

子元素的 XML 文檔的標記返回必須在相同的順序標記出如今被標記的文檔或中止 word 中的根元素。

此存儲過程的行爲必須是肯定對全部參數。

INPUT_TYPE

兩個不一樣的接口支持的用戶定義的詞法分析器索引過程。一個接口使文檔或中止詞和編碼爲 XML 做爲 VARCHAR2 數據類型傳遞,而其餘接口使用 CLOB 數據類型對應的標記。此屬性指示由 INDEX_PROCEDURE 屬性所指定的存儲過程實現的接口。

VARCHAR2 接口

BASIC_WORDLIST 屬性表 2-25描述的接口,使文檔或中止從非索引字表對象要被分詞 word 將做爲 VARCHAR2 者從 Oracle 文本到該存儲過程,這些令牌做爲傳遞 VARCHAR2 以及從存儲過程追溯到 Oracle 文本傳遞。

您用戶定義的 lexer 索引程序應使用此接口,當要建立索引的列中的全部文檔都是小於或等於 32512 字節和令牌能夠由小於或等於 32512 字節。在這種狀況下也可使用 CLOB 接口給出了在表 2-26 ,雖然 VARCHAR2 接口一般會比 CLOB 接口更快地執行。

這一程序必須定義如下參數:

表 2-25 VARCHAR2 接口的 INDEX_PROCEDURES

參數位置 參數模式 參數數據類型 描述
1 VARCHAR2 文檔或中止詞從要被分詞的非索引字表對象。

若是文檔是大於 32512 字節而後 Oracle 文本會彙報分度偏差的文檔級別。

2 在出 VARCHAR2 做爲 XML 編碼的標記。

若是文檔包含沒有標記,則必須返回 NULL 或返回的 XML 文檔中的標記元素必須包含任何子元素。

數據的字節長度必須小於或等於 32512。

若要提升性能,請使用 NOCOPY 提示,聲明此參數時。這傳遞數據的引用,而不是將數據傳遞的價值。

此過程返回的 XML 文檔不該該包含多餘的空格字符 (一般用來提升可讀性)。這將減小反過來減小傳輸時間該 XML 文檔的大小。

爲了提升性能,index_procedure 不該驗證與運行時相應的 XML 架構的 XML 文檔。

請注意此參數是在出性能的目的。存儲的過程具備不須要使用的值。

3 布爾值 Oracle 文本將此參數設置爲 TRUE,當 Oracle 文本所需的字符偏移量和認定被標記的文檔中標記的字符長度。

Oracle 文本將此參數設置爲 FALSE,當文本不感興趣的字符偏移量和認定被標記的文檔中標記的字符長度。這意味着不過,關閉 XML 屬性和 len 不使用。

CLOB 接口

表 2-26描述 CLOB 界面,使文檔或中止從非索引字表對象,將標記詞做爲 CLOB 者從 Oracle 文本到該存儲過程,這些令牌做爲傳遞 CLOB,以及從存儲過程追溯到 Oracle 文本傳遞。

索引過程的用戶定義詞法分析器應使用此接口,當至少一個要被索引的列中的文檔是大於 32512 字節或由超過 32512 個字節表示對應的標記。

表 2-26 CLOB 接口爲 INDEX_PROCEDURE 的

參數位置 參數模式 參數數據類型 描述
1 CLOB 文檔或中止詞從要被分詞的非索引字表對象。
2 在出 CLOB 做爲 XML 編碼的標記。
3 布爾值 若是文檔包含沒有標記,則必須返回 NULL 或返回的 XML 文檔中的標記元素必須包含任何子元素。

若要提升性能,請使用 NOCOPY 提示,聲明此參數時。這傳遞數據的引用,而不是將數據傳遞的價值。

此過程返回的 XML 文檔不該該包含多餘的空格字符 (一般用來提升可讀性)。這將減小反過來減小傳輸時間該 XML 文檔的大小。

爲了提升性能,index_procedure 不該驗證與運行時相應的 XML 架構的 XML 文檔。

請注意此參數是在出性能的目的。存儲的過程具備不須要使用的值。值將始終爲截斷的 CLOB。

第一和第二個參數是臨時 CLOB。避免將這些 CLOB 定位器分配給其餘定位器變量。將形參 CLOB 定位器分配給另外一個定位器變量會致使臨時的 CLOB 要建立致使性能命中一個新副本。

QUERY_PROCEDURE

此回調存儲過程是 Oracle 文本稱爲標記詞s 在查詢中的所需。以空格分隔的一組字符 (不包括的查詢運算符) 在查詢中將標識 Oracle 文本做爲一個.

要求

此過程能夠是 PL/SQL 存儲過程。

索引全部者必須對此存儲過程的 EXECUTE 權限。

此存儲的過程不能替換或被丟棄後建立索引。您能夠替換或刪除此存儲的過程後刪除索引。

限制

此過程必須不執行任何如下操做:

  • 回滾

  • 顯式或隱式提交當前事務

  • 發出任何其它事務控制語句

  • 更改會話語言或領土

返回的 XML 文檔的根元素標記的子元素必須是相同的順序標記出如今查詢詞被標記中。

此存儲過程的行爲必須是肯定對全部參數。

參數

表 2-27描述了用戶定義的詞法分析器查詢程序的界面:

表 2-27 用戶定義詞法分析器查詢程序 XML 架構屬性

參數位置 參數模式 參數數據類型 描述
1 VARCHAR2 查詢詞被分詞。
2 CTX_ULEXER_WILDCARD_TAB 通配符字符 (%和 _) 查詢字中的字符偏移量。若是查詢詞經過 Oracle 文本中不包含任何通配符字符而後此索引的表將爲空。

通配符查詢詞中的必須保留在通配符查詢功能才能正常工做的順序返回的標記。

字符偏移量爲 0 (零) 的基礎。偏移的信息遵循 USC 2 代碼點語義。

3 在出 VARCHAR2 做爲 XML 編碼的標記。

若是查詢詞包含沒有標記而後必須返回 NULL 或返回的 XML 文檔中的標記元素必須包含任何子元素。

數據的長度必須小於-等於 32512 字節爲單位)。

做爲 XML 編碼的標記

由存儲過程返回的標記的順序必須表示爲 XML 1.0 文檔。XML 文檔必須是有效給出了在如下各節中的 XML 架構。

限制

爲了提高性能的此功能,XML 解析器在 Oracle 文本將不會執行驗證和將不是一個全功能的 XML 兼容解析器。這意味着將支持只有不多的 XML 功能。不支持如下 XML 功能:

  • 文檔類型聲明 (例如, <!DOCTYPE [...]>),所以實體聲明。只有下列內置實體能夠引用: lt,gt,amp 及 apos。

  • CDATA 節。

  • 評論。

  • 處理指令。

  • XML 聲明 (例如, <?xml version="1.0" ...?>).

  • 命名空間。

  • 使用的元素和屬性,而不是由相應的 XML 架構定義。

  • 字符引用 (用於示例 & #x099F;)。

  • xml: space 屬性。

  • xml: lang 屬性

沒有位置、 用戶定義的索引程序的 XML 架構

本節介紹了額外的約束條件的用戶定義的詞法分析器索引過程,當第三個參數爲 FALSE 返回的 XML 文檔。返回的 XML 文檔必須是有效下面的 XML 架構:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="tokens">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded"> 
          <xsd:element name="eos" type="EmptyTokenType"/>
          <xsd:element name="eop" type="EmptyTokenType"/>
          <xsd:element name="num" type="xsd:token"/> 
          <xsd:group ref="IndexCompositeGroup"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <!-- 
  Enforce constraint that compMem element must be preceeded by word element
  or compMem element for indexing 
  -->
  <xsd:group name="IndexCompositeGroup">
    <xsd:sequence>
      <xsd:element name="word" type="xsd:token"/>
      <xsd:element name="compMem" type="xsd:token" minOccurs="0"
maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>

  <!-- EmptyTokenType defines an empty element without attributes -->
  <xsd:complexType name="EmptyTokenType"/>

</xsd:schema>

這裏是一些此 XML 架構的限制:

  • 根元素是令牌。這是強制性的。它不具備屬性。

  • 根元素能夠有零個或更多子元素。子元素能夠是如下之一: eos、 eop、 num,單詞和 compMem。其中每個表示特定類型的令牌。

  • CompMem 元素的前面必須由 word 元素或 compMem 元素。

  • Eos 和 eop 元素沒有屬性,而且必須是空的元素。

  • Num,單詞和 compMem 的元素有沒有屬性。Oracle 文本將正常化這些元素的內容,以下所示: 空格字符轉換成空格字符、 摺疊到單個空格字符的相鄰的空格字符、 移除前導空格和尾隨空格,執行實體引用替換和截斷爲 64 個字節。

表 2-28描述前面的 XML 架構中定義的元素名稱。

表 2-28 用戶定義詞法分析器索引程序的 XML 架構元素名稱

元素 描述
此元素表示一個簡單的單詞標記。元素的內容是這個詞自己。Oracle 文本並識別此令牌被停用詞或非停用詞以及適當地處理它的工做。
全國礦工工會 此元素表示一個算法的數字標記。元素的內容是算術數字自己。Oracle 文本視爲停用詞的此令牌,若是非索引字表偏好已做爲 stopclass 添加的數字。不然此令牌被視爲單詞標記相同的方式。

支持這種令牌類型是可選的。沒有爲此令牌類型的支持,添加 NUMERBS stopclass 將有沒有影響。

eos 此元素表示句子結束標記。Oracle 文本使用此信息,以便它能夠支持內句子查詢。

支持這種令牌類型是可選的。沒有爲此令牌類型的支持,針對一句節的查詢將不按預期工做。

eop 此元素表示段落結束標記。Oracle 文本使用此信息,以便它能夠支持內段的查詢。

支持這種令牌類型是可選的。沒有爲此令牌類型的支持,對段節的查詢將不按預期工做。

compMem 相同的 word 元素,只是隱式的詞偏移量前一個單詞標記相同。

此令牌類型的支持是可選的。

示例

文檔: Vom Nordhauptbahnhof 和 aus der Innenstadt zum Messegelände。

令牌:

<tokens>
  <word> VOM </word>
  <word> NORDHAUPTBAHNHOF </word>
  <compMem>NORD</compMem>
  <compMem>HAUPT </compMem>
  <compMem>BAHNHOF </compMem>
  <compMem>HAUPTBAHNHOF </compMem>
  <word> UND </word>
  <word> AUS </word>
  <word> DER </word>
  <word> INNENSTADT </word>
  <word> ZUM </word>
  <word> MESSEGELÄNDE </word>
  <eos/>
</tokens>

示例

文檔: Oracle 數據庫 10g版 1

令牌:

<tokens>
  <word> ORACLE10G</word>
  <word> RELEASE </word>
  <num> 1 </num>
</tokens>
示例

文檔: 在哪裏工資 < 25000.00 和工做 = 'F & B 經理'

令牌:

<tokens>
  <word> WHERE </word>
  <word> salary&lt;2500.00 </word>
  <word> AND </word>
  <word> job </word>
  <word> F&amp;B </word>
  <word> Manager </word>
</tokens>

用戶定義的索引過程與位置的 XML 架構

本節介紹了額外的限制強加給由用戶定義的詞法分析器索引過程,第三個參數爲 TRUE 時返回的 XML 文檔。返回的 XML 文檔必須符合下面的 XML 架構的有效:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="tokens">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element name="eos" type="EmptyTokenType"/>
          <xsd:element name="eop" type="EmptyTokenType"/>
          <xsd:element name="num" type="DocServiceTokenType"/>
          <xsd:group ref="DocServiceCompositeGroup"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <!-- 
  Enforce constraint that compMem element must be preceeded by word element
  or compMem element for document service
  -->
  <xsd:group name="DocServiceCompositeGroup">
    <xsd:sequence>
      <xsd:element name="word" type="DocServiceTokenType"/>
      <xsd:element name="compMem" type="DocServiceTokenType" minOccurs="0"
           maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>

  <!-- EmptyTokenType defines an empty element without attributes -->
  <xsd:complexType name="EmptyTokenType"/>

  <!-- 
  DocServiceTokenType defines an element with content and mandatory attributes 
  -->
  <xsd:complexType name="DocServiceTokenType">
    <xsd:simpleContent>
      <xsd:extension base="xsd:token">
        <xsd:attribute name="off" type="OffsetType" use="required"/>
        <xsd:attribute name="len" type="xsd:unsignedShort" use="required"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>

  <xsd:simpleType name="OffsetType">
    <xsd:restriction base="xsd:unsignedInt">
      <xsd:maxInclusive value="2147483647"/>
    </xsd:restriction>
  </xsd:simpleType>

</xsd:schema>

一些此 XML 架構的限制以下:

  • 根元素是令牌。這是強制性的。它不具備屬性。

  • 根元素能夠有零個或更多子元素。子元素能夠是如下之一: eos、 eop、 num,單詞和 compMem。其中每個表示特定類型的令牌。

  • CompMem 元素的前面必須由 word 元素或 compMem 元素。

  • Eos 和 eop 元素沒有屬性,而且必須是空的元素。

  • Num,單詞和 compMem 的元素有兩個強制性屬性:off和長度。Oracle 文本將正常化這些元素的內容,以下所示: 空格字符轉換成空格字符、 摺疊到單個空格字符的相鄰的空格字符、 移除前導空格和尾隨空格,執行實體引用替換和截斷爲 64 個字節。

  • off屬性值必須是介於 0 到 2147483647 包容性之間的整數。

  • len屬性值必須是整數 0 和 65535 之間的包容性。

表 2-28描述前面的 XML 架構中定義的元素類型。

表 2-29描述前面的 XML 架構中定義的屬性。

表 2-29 用戶定義詞法分析器索引程序 XML 架構屬性

屬性 描述
關閉 此屬性表示的字符偏移量的標記出如今被標記的文檔。

偏移量是字符文檔傳遞給用戶定義的詞法分析器索引過程,不是由數據存儲區讀取的文檔。獲取數據存儲區的文件可能由篩選器對象或節組的對象,或二者以前被傳遞給用戶定義的詞法分析器索引過程, 預先處理。

正在標記文檔中的第一個字符的偏移量爲 0 (零)。偏移的信息遵循 USC 2 代碼點語義。

萊恩 此屬性表示該標記的字符長度 (SQL 函數長度相同的語義) 出如今被標記的文檔。

長度是傳遞給用戶定義的詞法分析器索引過程,不是文檔數據存儲區讀取的字符文件。在被傳遞給用戶定義的詞法分析器索引過程前可能經過篩選器對象或節組對象預先處理文檔獲取數據存儲區。

長度信息遵循 USC 2 代碼點語義。

off屬性值和len屬性值的總和必須小於或等於被標記文檔中的字符總數。這是爲了確保文件偏移量和被引用的字符在文檔邊界內。

示例

文檔: 用戶定義的詞法分析器。

令牌:

<tokens>
  <word off="0" len="4"> USE </word>
  <word off="5" len="7"> DEF </word>
  <word off="13" len="5"> LEX </word>
  <eos/>
</tokens>

用戶定義的詞法分析器查詢程序的 XML 架構

本節介紹了額外的限制強加給用戶定義的詞法分析器查詢過程所返回的 XML 文檔。返回的 XML 文檔必須是有效下面的 XML 架構:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="tokens">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element name="num" type="QueryTokenType"/>
          <xsd:group ref="QueryCompositeGroup"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

<!--
Enforce constraint that compMem element must be preceeded by word element
or compMem element for query
-->
  <xsd:group name="QueryCompositeGroup">
    <xsd:sequence>
      <xsd:element name="word" type="QueryTokenType"/>
      <xsd:element name="compMem" type="QueryTokenType" minOccurs="0"
                                              maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>

  <!-- 
  QueryTokenType defines an element with content and with an optional attribute
  -->
  <xsd:complexType name="QueryTokenType">
    <xsd:simpleContent>
      <xsd:extension base="xsd:token">
        <xsd:attribute name="wildcard" type="WildcardType" use="optional"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>

  <xsd:simpleType name="WildcardType">
    <xsd:restriction base="WildcardBaseType">
      <xsd:minLength value="1"/>
      <xsd:maxLength value="64"/>
    </xsd:restriction>     
  </xsd:simpleType>

  <xsd:simpleType name="WildcardBaseType">
    <xsd:list>
      <xsd:simpleType>
        <xsd:restriction base="xsd:unsignedShort">
          <xsd:maxInclusive value="378"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:list>
  </xsd:simpleType>

</xsd:schema>

這裏是一些此 XML 架構的限制:

  • root元素是令牌。這是強制性的。它不具備屬性。

  • root元素能夠有零個或更多子元素。子元素能夠是如下之一: numword其中每個表示特定類型的令牌。

  • compMem元素的前面必須由word元素或compMem元素。

    compMem的目的是,使USER_LEXER查詢返回多個窗體爲單個查詢。例如,若是用戶定義的詞法分析器索引詞銀行爲BANK(FINANCIAL)BANK(RIVER),查詢過程能夠返回做爲一個word和一個compMem元素做爲第二第一學期:

    <tokens>
      <word>BANK(RIVER)</word>
      <compMem>BANK(FINANCIAL)</compMem>
    </tokens>
    
    

    請參閱表 2-30,更多關於 compMem元的"用戶定義詞法分析器查詢程序 XML 架構屬性"

  • Num 和 word 元素有一個單一的可選屬性: 通配符。Oracle 文本將正常化這些元素的內容,以下所示: 空格字符轉換成空格字符、 摺疊到單個空格字符的相鄰的空格字符、 移除前導空格和尾隨空格,執行實體引用替換和截斷爲 64 個字節。

  • 通配符屬性值是白色空間分隔的整數列表。整數的最小數目是 1,整數的最大數目是 64。整數值必須介於 0 和 378 包容性。Intriguers 在列表中的能夠按任何順序。

表 2-28描述前面的 XML 架構中定義的元素類型。

表 2-30介紹了前面的 XML 架構中定義的屬性。

表 2-30 用戶定義詞法分析器查詢程序 XML 架構屬性

屬性 描述
compMem 相同的word元素,但其隱式詞偏移量是之前的word標記同樣。Oracle 文本將等同於此令牌與前面的 word標記和隨後compMem令牌使用查詢EQUIV運算符。
通配符 任何 %或 _ 的字符在查詢中,都沒有逃過由用戶被視爲通配符字符,由於它們會被其餘字符代替。這些查詢中的通配符字符必須爲通配符查詢功能才能正常工做秩序的標記化期間保留。此屬性所表示元素的內容中的通配符字符的字符偏移的量 (SQL 函數長度相同的語義)。Oracle 文本將調整這些元素的內容進行任何正常化的偏移量。偏移量所指向的字符必需要麼是 %或 _ 字符。

在元素的內容中的第一個字符的偏移量爲 0。偏移的信息遵循 USC 2 代碼點語義。

若是令牌中不包含任何通配符字符必須不指定此屬性。

示例

查詢詞: 僞變身 %

令牌:

<tokens>
  <word> PSEUDO </word>
  <word wildcard="1 7"> %MORPH% </word>
</tokens>
示例
Query word: <%>
Tokens:
<tokens>
  <word wildcard="5"> &lt;%&gt; </word>
</tokens>

WORLD_LEXER

使用WORLD_LEXER對包含不一樣語言的文檔的索引文本列。例如,可使用此詞法分析器將英語、 日語和德語文檔存儲的文本列進行索引。

WORLD_LEXER不一樣於MULTI_LEXERWORLD_LEXER將自動檢測文檔的語言。不像MULTI_LEXERWORLD_LEXER不須要您有一個語言列在基礎表中或指定的語言列,當您建立索引時。此外,它是沒必要要使用 sub-詞法分析器與MULTI_LEXER同樣。(請參見MULTI_LEXER.)

Lexer 沒有屬性。

WORLD_LEXER工程與語言的字符集的 Unicode 4.0 標準所定義。WORLD_LEXER可使用的語言的列表,請參閱"世界詞法分析器功能".

WORLD_LEXER 屬性

WORLD_VGRAM_LEXER具備如下屬性:

表 2-31 WORLD_LEXER 屬性

屬性 屬性值
mixed_case 使大小寫混合 (上部和小寫字母) 搜索的文本 (例如,貓和貓)。容許的值都YESNO(默認值)。

WORLD_LEXER 示例

下面是一個示例建立索引使用WORLD_LEXER.

exec ctx_ddl.create_preference('MYLEXER', 'world_lexer');
create index doc_idx on doc(data)
  indextype is CONTEXT
  parameters ('lexer MYLEXER
               stoplist CTXSYS.EMPTY_STOPLIST');

單詞表 類型

使用的單詞表首選項以啓用查詢選項例如詞幹分析,模糊匹配爲您的語言。您還可使用單詞表偏好來啓用子字符串和前綴索引,從而提升了通配符查詢CONTAINSCATSEARCH的性能.

若要建立單詞表首選項,必須使用BASIC_WORDLIST,這是惟一可用的類型。

BASIC_WORDLIST

使用BASIC_WORDLIST類型來啓用詞幹和模糊匹配或者建立前綴索引,與文本索引。

請參見:

有關乾和模糊算子的詳細信息,請參閱第 3 章,"Oracle 文本包含查詢運算符".

BASIC_WORDLIST具備下列屬性:

表 2-32 BASIC_WORDLIST 屬性

屬性 屬性值
詞幹分析器 指定要使用哪一個語言詞幹分析器。您能夠指定如下內容之一:

NULL (沒有詞幹)

英語 (英語屈折)

派生詞綴 (英語詞綴)

荷蘭語

法語

德語

意大利語

西班牙語

自動 (自動語言-檢測爲產生上述的語言。不自動-檢測日本。)

日語

fuzzy_match 指定哪些模糊匹配羣集中使用。您能夠指定如下內容之一:

自動 (自動語言檢測爲詞幹)

CHINESE_VGRAM

荷蘭語

英語

法語

泛型

德語

意大利語

JAPANESE_VGRAM

朝鮮語

OCR

西班牙語

fuzzy_score 指定默認下限的模糊評分。請指定一個介於 0 和 80。分數低於這個數字的文本不會返回。默認值爲 60。
fuzzy_numresults 指定模糊擴產的最大數目。使用數字 0 至 5000 人之間。默認值爲 100。
substring_index 指定 TRUE 爲 Oracle 文原本建立一個子字符串的索引。子字符串索引提升了左截斷和雙截斷通配符查詢 (如%ing ) 或%奔馳 %。默認值爲 FALSE。

TRUE,爲了使用了substring_index設置爲的單詞表建立文本索引建立索引的用戶須要CREATE TRIGGER系統特權。

prefix_index 指定對啓用前綴索引。前綴索引能夠提升性能爲右截斷的通配符搜索如 %。默認值爲 FALSE。
prefix_length_min 指定索引的前綴的最小長度。默認值爲 1。長度信息必須遵循 USC 2 代碼點語義。
prefix_length_max 指定索引的前綴的最大長度。默認值爲 64。長度信息必須遵循 USC 2 代碼點語義。
wlidcard_maxterms 在通配符擴展中指定條件的最大數目。使用 1 和 15000 之間的一個數字。默認爲 5000。
詞幹分析器

指定用於在文本查詢中的單詞詞幹的詞幹分析器。當您不指定一個值爲詞幹分析器時,默認爲ENGLISH.

指定AUTO系統來自動設置的詞幹的語言,根據會話的語言設置。沒有語言的詞幹分析器時,默認值爲NULLNULL的詞幹分析器,幹操做員在查詢中將被忽略。

您能夠建立您本身詞幹的用戶詞典。更多的信息,請參閱"阻止用戶詞典"

fuzzy_match

S指定哪些模糊匹配例程用於列。模糊匹配目前支持英語,日語,以及在較小的程度上,西方的歐洲語言。

注:

漢語和韓語的fuzzy_match屬性值是防止的英語和日語的模糊匹配例程使用在中文和朝鮮文的虛擬屬性值。

Fuzzy_match的默認值是GENERIC.

指定AUTO系統來自動設置模糊匹配的語言根據會話的語言設置。

fuzzy_score

指定默認下限的模糊評分。請指定一個介於 0 和 80。分數低於這個數字的文本不會返回。默認值爲 60。

模糊積分是衡量查詢詞擴展的詞是多麼接近。分數越高越好這場比賽。使用此參數來限制模糊擴產到最好的比賽。

fuzzy_numresults

指定模糊擴產的最大數目。使用 0 到 5000 之間的數字。默認值爲 100。

設置模糊的擴張限制擴展到指定數目的最匹配的單詞。

substring_index

指定TRUE爲 Oracle 文原本建立一個子字符串的索引。子字符串索引能夠提升性能爲左截斷或雙截斷通配符查詢 (如%ing ) 或%奔馳 %。默認值爲 false。

子字符串索引索引和磁盤資源具備下列影響:

  • 建立索引和 DML 處理是慢達 4 倍

  • 建立的子字符串索引的大小是大約 $X 指數對 word 表格的大小。

  • substring_index啓用索引建立須要更多的回滾段比與子字符串索引的索引刷新期間關閉。Oracle 建議您下列操做之一時建立的子字符串的索引:

    • 使可用雙日常的回滾或

    • 減小索引內存來減少索引刷新到磁盤

prefix_index

指定yes以啓用前綴索引。前綴索引能夠提升性能爲右截斷的通配符搜索如收件人 %。默認值爲NO.

注:

啓用前綴索引增長索引的大小。

到多個前綴,在 $I 表中存儲的前綴索引排骨了令牌。例如,單詞TOKENTOY一般是編入索引,這樣 $I 表中:

令牌 類型 信息
令牌 0 POS DOCID 1 1
玩具 0 POS DOCID 1 3

帶有前綴索引,Oracle 文本索引這些標記,以下所示的 6 新令牌類型的子字符串前綴:

令牌 類型 信息
令牌 0 POS DOCID 1 1
玩具 0 POS DOCID 1 3
T 6 DOCID 1 1 POS 收款機 3
6 DOCID 1 1 POS 收款機 3
托克 6 POS DOCID 1 1
6 POS DOCID 1 1
令牌 6 POS DOCID 1 1
玩具 6 POS DOCID 1 3

通配符搜索TO%如今都快,由於 Oracle 文本並無擴展條款和合並的結果集。若要獲取結果,Oracle 文本只須要閱讀一下 (TO,6) 行。

prefix_length_min

指定索引的前綴的最小長度。默認值爲 1。

例如,設置prefix_length_min 3 和prefix_length_max對 5 項指標爲 3 到 5 個字符長之間的全部前綴。

注:

使用慢的方法的等價性擴張和合並搜索通配符搜索其模式是最小長度下方或上方的最大長度。
prefix_length_max

指定索引的前綴的最大長度。默認值爲 64。

例如,設置prefix_length_min 3 和prefix_length_max對 5 項指標爲 3 到 5 個字符長之間的全部前綴。

注:

使用慢的方法的等價性擴張和合並搜索通配符搜索其模式是最小長度下方或上方的最大長度。
wildcard_maxterms

在通配符 (%) 擴展中指定條件的最大數目。使用此參數能夠保持在可接受的限度內的通配符查詢性能。Oracle 文本返回一個錯誤,當通配符查詢擴展超過這個數字。

BASIC_WORDLIST 示例

下面的示例演示使用BASIC_WORDLIST類型。

使模糊匹配和詞幹

如下示例啓用詞幹和模糊匹配爲英語。STEM_FUZZY_PREF的偏好將擴產的數目設置爲容許的最大。此首選項也指示系統建立的子字符串的索引,以提升雙截斷搜索的性能。

begin 
  ctx_ddl.create_preference('STEM_FUZZY_PREF', 'BASIC_WORDLIST'); 
  ctx_ddl.set_attribute('STEM_FUZZY_PREF','FUZZY_MATCH','ENGLISH');
  ctx_ddl.set_attribute('STEM_FUZZY_PREF','FUZZY_SCORE','0');
  ctx_ddl.set_attribute('STEM_FUZZY_PREF','FUZZY_NUMRESULTS','5000');
  ctx_ddl.set_attribute('STEM_FUZZY_PREF','SUBSTRING_INDEX','TRUE');
  ctx_ddl.set_attribute('STEM_FUZZY_PREF','STEMMER','ENGLISH');
end; 

若要在 SQL 中建立索引,請發出如下語句:

create index fuzzy_stem_subst_idx on mytable ( docs ) 
  indextype is ctxsys.context parameters ('Wordlist STEM_FUZZY_PREF');

使字符串的子字符串和前綴索引

下面的示例設置詞庫首選前綴和字符串的子字符串的索引。爲前綴索引,它指定標記前綴 3 到 4 個字符長之間建立 Oracle 的文本:

begin 
ctx_ddl.create_preference('mywordlist', 'BASIC_WORDLIST'); 
ctx_ddl.set_attribute('mywordlist','PREFIX_INDEX','TRUE');
ctx_ddl.set_attribute('mywordlist','PREFIX_MIN_LENGTH',3);
ctx_ddl.set_attribute('mywordlist','PREFIX_MAX_LENGTH', 4);
ctx_ddl.set_attribute('mywordlist','SUBSTRING_INDEX', 'YES');
end

設置通配符擴展限制

使用 wildcard_maxterms 屬性來設置最大容許條件中的通配符擴展。

--- create a sample table
drop table quick ;
create table quick 
  ( 
    quick_id number primary key, 
    text      varchar(80) 
  ); 

--- insert a row with 10 expansions for 'tire%'
insert into quick ( quick_id, text ) 
  values ( 1, 'tire tirea tireb tirec tired tiree tiref tireg tireh tirei tirej');
commit;

--- create an index using wildcard_maxterms=100
begin 
    Ctx_Ddl.Create_Preference('wildcard_pref', 'BASIC_WORDLIST'); 
    ctx_ddl.set_attribute('wildcard_pref', 'wildcard_maxterms', 100) ;
end; 
/
create index wildcard_idx on quick(text)
    indextype is ctxsys.context 
    parameters ('Wordlist wildcard_pref') ;

--- query on 'tire%' - should work fine
select quick_id from quick
  where contains ( text, 'tire%' ) > 0;

--- now re-create the index with wildcard_maxterms=5

drop index wildcard_idx ;

begin 
    Ctx_Ddl.Drop_Preference('wildcard_pref'); 
    Ctx_Ddl.Create_Preference('wildcard_pref', 'BASIC_WORDLIST'); 
    ctx_ddl.set_attribute('wildcard_pref', 'wildcard_maxterms', 5) ;
end; 
/

create index wildcard_idx on quick(text)
    indextype is ctxsys.context 
    parameters ('Wordlist wildcard_pref') ;

--- query on 'tire%' gives "wildcard query expansion resulted in too many terms"
select quick_id from quick
  where contains ( text, 'tire%' ) > 0;

存儲類型

使用存儲首選項來指定與文本索引關聯的表的表空間和建立參數。該系統提供了一個稱爲BASIC_STORAGE的單個存儲類型:

表 2-33 存儲類型

類型 描述
BASIC_STORAGE 用於指定數據庫表和構成文本索引的索引的表空間和建立參數的索引類型。

BASIC_STORAGE

BASIC_STORAGE類型指定數據庫表和構成文本索引的索引的表空間和建立參數。

您指定的子句添加到索引建立在內部CREATETABLECREATEINDEXi_index _clause) 的語句。您能夠指定最容許的條款,例如存儲、 LOB 存儲或分區。可是,您不能指定索引組織的表子句。

請參見:

有關如何指定CREATETABLECREATEINDEX的語句的詳細信息,請參閱Oracle 數據庫 SQL 引用。

BASIC_STORAGE具備下列屬性:

表 2-34 BASIC_STORAGE 屬性

屬性 屬性值
i_table_clause 博士 $注意$I 表建立的參數子句。指定存儲和表空間的子句,以添加到內部CREATETABLE的語句的末尾。

我表是索引數據的表。

k_table_clause 博士 $注意$K 表建立的參數子句。指定存儲和表空間的子句,以添加到內部CREATETABLE的語句的末尾。

K 表是鍵盤映射表。

r_table_clause 博士 $注意$R 表建立的參數子句。指定存儲和表空間的子句,以添加到內部CREATETABLE的語句的末尾。

R 表是 rowid 表。

違約條款是: 'LOB(DATA) STORE AS (CACHE)'.

若是您修改此屬性,始終包含此子句的良好表現。

n_table_clause 博士 $注意$N 表建立的參數子句。指定存儲和表空間的子句,以添加到內部CREATETABLE的語句的末尾。

N 表是否認清單表。

i_index_clause 博士 $注意$X 索引建立的參數子句。指定存儲和表空間的子句,以添加到內部的CREATE INDEX語句的末尾。違約條款是: 'COMPRESS 2'指示 Oracle 文本壓縮此索引表。

若是您選擇將默認值覆蓋,Oracle 建議包括COMPRESS 2在你參數子句來壓縮此表中,由於這種壓縮能夠節省磁盤空間和有助於提升查詢性能。

p_table_clause 子字符串索引,若是已經啓用了SUBSTRING_INDEXBASIC_WORDLIST的參數子句.

指定存儲和表空間的子句,以添加到內部的 CREATE INDEX語句的末尾。P 表是表的一個索引組織表,因此您指定的存儲子句必須適合於這種類型。

存儲默認行爲

默認狀況下,不設置BASIC_STORAGE屬性。在這種狀況下,在索引全部者默認表空間中建立文本索引表。請考慮如下聲明用戶IUSER,沒有BASIC_STORAGE屬性設置:

create index IOWNER.idx on TOWNER.tab(b) indextype is ctxsys.context;

在此示例中,在IOWNER's默認表空間中建立文本索引。

存儲示例

下面的示例指定索引表是在 1k 初始範圍 foo的表空間中建立:

begin
ctx_ddl.create_preference('mystore', 'BASIC_STORAGE');
ctx_ddl.set_attribute('mystore', 'I_TABLE_CLAUSE',
                        'tablespace foo storage (initial 1K)'); 
ctx_ddl.set_attribute('mystore', 'K_TABLE_CLAUSE',
                        'tablespace foo storage (initial 1K)'); 
ctx_ddl.set_attribute('mystore', 'R_TABLE_CLAUSE',
                        'tablespace users storage (initial 1K) lob
                         (data) store as (disable storage in row cache)');
ctx_ddl.set_attribute('mystore', 'N_TABLE_CLAUSE',
                        'tablespace foo storage (initial 1K)'); 
ctx_ddl.set_attribute('mystore', 'I_INDEX_CLAUSE',
                        'tablespace foo storage (initial 1K) compress 2');
ctx_ddl.set_attribute('mystore', 'P_TABLE_CLAUSE',
                        'tablespace foo storage (initial 1K)'); 
end;

節組類型

爲了發行上的文檔節的WITHIN查詢,您必須建立分區組以前你定義你的部分。您在建立索引的參數子句中指定您的節組.

若要建立分區組,能夠與 CTX_DDL 指定下面的組類型之一。CREATE_SECTION_GROUP程序:

表 2-35 節組類型

類型 描述
NULL_SECTION_GROUP 當您定義沒有節時或當您定義僅句子或段落節時,請使用此組類型。這是默認值。
BASIC_SECTION_GROUP 使用此組類型定義的開始和結束標記的形式<A></A>的部分.

注: 此組類型不支持輸入如括號、 註釋標記和屬性。HTML_SECTION_GROUP用於這種類型的輸入。

HTML_SECTION_GROUP 爲 HTML 文檔編制索引以及在 HTML 文檔中定義章節,請使用此組類型。
XML_SECTION_GROUP 使用此組類型,XML 文檔編制索引,並在 XML 文檔中定義章節。要編制索引的全部部分必須手動都定義此組。
AUTO_SECTION_GROUP 使用此組類型自動建立 XML 文檔中的每一個開始標記/結束標記對區部分。從 XML 標記派生的節名稱是區分大小寫,如 XML。

對於具備屬性的 XML 標記的屬性節以自動建立。屬性節是在窗體 tag@attribute 命名的。

中止部分、 空標籤、 處理指令和註釋未編制索引。

如下限制適用於自動節組:

  • 不能添加到自動分區組的區域、 字段或特殊路段。

  • 您能夠定義一箇中止部分,僅適用於一個特定的類型 ;那就是,若是你有兩個不一樣的 XML Dtd,這兩個國家使用名爲FOO的標記,您能夠定義(TYPE1)FOO將被中止,但(TYPE2)FOO,不會中止。

  • 索引標籤,包括前綴和命名空間,長度不能超過 64 個字節。不索引標籤比這更長的時間。

PATH_SECTION_GROUP 使用此組類型進行索引的 XML 文檔。AUTO_SECTION_GROUP.

區別在於與此分區組,你能夠作路徑搜索與INPATHHASPATH的運營商。查詢也是標記和屬性名稱區分大小寫的。中止部分都是不容許的。

NEWS_SECTION_GROUP 使用此組用於定義根據 RFC 1036 新聞組格式文件中的節。

節組的例子

本示例顯示 HTML 和 XML 文檔中的節組的使用。

在 HTML 文檔中建立分區組

下面的語句建立使用 HTML 組類型調用htmgroup的節組。

begin
ctx_ddl.create_section_group('htmgroup', 'HTML_SECTION_GROUP');
end;

您能夠選擇添加節到此組在 CTX_DDL包中,如CTX_DDL.ADD_SPECIAL_SECTION CTX_DDL.ADD_ZONE_SECTION要索引您的文檔,能夠如發出一份聲明:

create index myindex on docs(htmlfile) indextype is ctxsys.context 
parameters('filter ctxsys.null_filter section group htmgroup');

請參見:

上節組的詳細信息,請參閱第 7 章,"CTX_DDL 包"

建立的 XML 文檔中的節組

下面的語句建立稱爲xmlgroupXML_SECTION_GROUP組類型的節組。

begin
ctx_ddl.create_section_group('xmlgroup', 'XML_SECTION_GROUP');
end;

您能夠選擇添加節到此組在 CTX_DDL包中,如CTX_DDL.ADD_ATTR_SECTIONCTX_DDL.ADD_STOP_SECTION要索引您的文檔,能夠如發出一份聲明:

create index myindex on docs(htmlfile) indextype is ctxsys.context 
parameters('filter ctxsys.null_filter section group xmlgroup');

請參見:

上節組的詳細信息,請參閱第 7 章,"CTX_DDL 包"

自動切片的 XML 文檔中

下面的語句建立稱爲autoAUTO_SECTION_GROUP組類型的節組。此分區組自動建立的部分,從 XML 文檔中的標記。

begin
ctx_ddl.create_section_group('auto', 'AUTO_SECTION_GROUP');
end;

CREATE INDEX myindex on docs(htmlfile) INDEXTYPE IS ctxsys.context 
PARAMETERS('filter ctxsys.null_filter section group auto');

分類類型

本節介紹用於建立 CTX_CLS 首選的分類類型。火車和 CTXRULE 建立索引。支持如下兩個分類器類型:

RULE_CLASSIFIER

使用 RULE_CLASSIFIER 類型建立生成的過程當中,CTX_CLS 的查詢規則的首選。火車和 CTXRULE 創做。將生成帶有這種類型的規則實質上是查詢字符串和能夠容易地審查。此分類器所產生的查詢可使用與,不,或有關運算符。查詢字段路段僅支持範圍運算符。

這種類型具備下列屬性:

表 2-36 RULE_CLASSIFIER 屬性

屬性 數據類型 默認 最小值 最大值 描述
THRESHOLD 50 1 99 爲規則生成指定閾值 (以百分比計算)。及其置信度大於閾值時,只有一條規則就是輸出。
MAX_TERMS 100 20 2000 對於每一個類相關術語列表形式規則。指定條件,能夠選擇爲每一個類的最大數目。
MEMORY_SIZE 500 10 4000 以 mb 爲單位指定培訓的內存使用狀況。較大的值來提升性能。
NT_THRESHOLD F 0.001 0 0.90 指定一個門檻,術語的選擇。有兩個閾值指導兩個步驟中選擇相關的條款。此閾值控制的行爲的第一步。在此步驟中,術語被評爲候選術語供進一步審議在第二步。當發生頻次的訓練集的文檔數的比率大於此閾值,選用了詞。
TERM_THRESHOLD 10 0 100 爲術語的選擇百分比指定的閾值。此閾值控制第二步術語的選擇。每一個候選術語已計算暗示其相關性與給定類的數量。只有當在類中的全部候選術語的最大值及其量值比大於該閾值時,將爲此類選擇候選術語。
PRUNE_LEVEL 75 0 100 指定多少修剪生成的決策樹更好的覆蓋。較高的值意味着更具侵略性的修剪和所產生的規則會有大的覆蓋範圍,但少的準確性。

SVM_CLASSIFIER

使用 SVM_CLASSIFIER 類型建立規則生成的過程當中,CTX_CLS 的首選項。火車,和 CTXRULE 創做。這種分類器類型表示分類的支持向量機方法,並以二進制格式生成規則。當你須要分類精度高,可以使用此分類器類型。

這種類型具備下列屬性:

表 2-37 SVM_CLASSIFIER 屬性

屬性名稱 數據類型 默認 最小值 最大值 描述
MAX_DOCTERMS 50 10 8192 指定表示一個文檔的術語的最大數目。
MAX_FEATURES 3,000 1 100,000 指定的最大數目的特點。
THEME_ON B 空值 空值 指定對使用主題爲特徵。

分類與主題須要安裝的知識庫文章。知識庫文章可能或不可能安裝 Oracle 文本。在知識的基礎上的詳細信息,請參閱Oracle 文本應用程序開發人員指南.

TOKEN_ON B 真實 空值 空值 指定 TRUE,則使用常規令牌做爲特徵。
STEM_ON B 空值 空值 指定對莖的使用令牌做爲特徵。時爲詞法分析器拐彎處 INDEX_STEM 方面,這纔是有效的。
MEMORY_SIZE 500 10 4000 以 mb 爲單位指定近似的內存大小。
SECTION_WEIGHT 1 2 0 100 指定用於在字段部分中做爲一個正常的術語添加一個術語發生乘數。例如,默認狀況下,"< > < /A > 的貓"一詞只貓是一個字段節用語,被視爲一個正常的術語發生等於 2,但您能夠指定它被看成一個正常的期限與重量最大爲 100。索引策略指定的字段部分時, SECTION_WEIGHT纔是有意義的。

羣集類型

本節介紹用於建立CTX_CLS.CLUSTERING程序。

請參見:

有關羣集的詳細信息,請參閱"集羣"第 6 章,"CTX_CLS 一攬子計劃"以及Oracle 文本應用程序開發人員指南

KMEAN_CLUSTERING

此聚類的類型具備下列屬性:

表 2-38 KMEAN_CLUSTERING 屬性

屬性名稱 數據類型 默認 最小值 最大值 描述
MAX_DOCTERMS 50 10 8192 指定不一樣的術語,表示一個文檔的最大數目。
MAX_FEATURES 3,000 1 500,000 指定的最大數目的特點。
THEME_ON B 空值 空值 指定對使用主題爲特徵。

聚類分析的主題須要安裝的知識庫文章。知識庫文章可能或不可能安裝 Oracle 文本。在知識的基礎上的詳細信息,請參閱Oracle 文本應用程序開發人員指南.

TOKEN_ON B 真實 空值 空值 指定 TRUE,則使用常規令牌做爲特徵。
STEM_ON B 空值 空值 指定對莖的使用令牌做爲特徵。時爲詞法分析器拐彎處 INDEX_STEM 方面,這纔是有效的。
MEMORY_SIZE 500 10 4000 以 mb 爲單位指定近似的內存大小。
SECTION_WEIGHT 1 2 0 100 指定用於在字段部分中做爲一個正常的術語添加一個術語發生乘數。例如,默認狀況下,"< > < /A > 的貓"一詞只貓是一個字段節用語,被視爲一個正常的術語發生等於 2,但您能夠指定它被看成一個正常的期限與重量最大爲 100。索引策略指定的字段部分時, SECTION_WEIGHT纔是有意義的。
CLUSTER_NUM 200 2 20000 指定葉簇生成的總量。

Stoplists

Stoplists 識別的文字在你的語言,不能被索引。在英語中,您還能夠標識 stopthemes 不能被索引。默認狀況下,該系統索引使用由系統提供的非索引,該字表對應於您的數據庫語言的文本。

Oracle 文本爲最經常使用的語言,包括英語、 法語、 德語、 西班牙語、 中文、 荷蘭人和丹麥提供默認 stoplists。這些默認的 stoplists 包含只有字。

請參見:

關於提供的默認 stoplists 的詳細信息,請參閱附錄 E,"甲骨文文本提供 Stoplists".

多語言 Stoplists

您能夠建立多語言 stoplists 持有特定於語言的字。當您使用MULTI_LEXER來索引包含在不一樣的語言如英語、 德語和日語文檔的表,多語言的非索引字表頗有用。

若要建立多語言非索引字表,請使用 CTX_DLL。CREATE_STOPLIST程序和指定的MULTI_STOPLIST的非索引字表類型。您添加的語言特定字與 CTX_DDL。ADD_STOPWORD.

在索引的時間,每一個文檔的語言列進行檢查,而且只用於該語言字被淘汰。在查詢時,會話語言設置肯定積極的字,像它肯定的積極的詞法分析器時使用多的詞法分析器。

建立 Stoplists

您能夠建立您本身的 stoplists 使用 CTX_DLL。CREATE_STOPLIST程序。您可使用此過程建立BASIC_STOPLIST爲單一語言非索引字表,或者您能夠建立多語言非索引字表爲 MULTI_STOPLIST

當您建立您本身的非索引字表時,則必須指定在CREATEINDEX的參數子句中.

修改默認非索引字表

默認非索引字表老是被命名爲CTXSYS。DEFAULT_STOPLIST可使用如下過程來修改此非索引字表:

當您修改CTXSYS.DEFAULT_STOPLISTCTX_DDL軟件包,您必須從新建立索引以使更改生效。

動態添加的字

您能夠向默認值或自定義的非索引字表具備ALTER INDEX中動態地添加字。當您動態地添加 stopword 時,你須要不從新編制索引,由於這個詞當即成爲 stopword,從索引中刪除。

注:

即便您能夠動態添加索引的字,不能動態刪除字。若要刪除 stopword,您必須使用 CTX_DDL。REMOVE_STOPWORD,除去你的索引並從新建立它。

請參見:

章,"Oracle 文本 SQL 語句和運算符"變動索引.

系統定義的首選項

當您安裝 Oracle 文本時,建立一些索引的偏好。能夠在建立索引的參數子句中使用這些首選項,也能夠定義你本身。

默認索引參數映射到一些這一節中描述的系統定義首選項。

請參見:

有關默認索引參數的詳細信息,請參閱"默認索引參數" .

系統定義的首選項分爲如下類別:

數據存儲

本節討論與數據存儲首選項關聯的類型。

CTXSYS。DEFAULT_DATASTORE

此首選項將使用DIRECT_DATASTORE類型。您可使用此首選項爲文本列中的文本存儲在列中直接建立索引。

CTXSYS。FILE_DATASTORE

此首選項將使用FILE_DATASTORE類型。

CTXSYS。URL_DATASTORE

此首選項將使用URL_DATASTORE類型。

篩選器

本節討論與過濾首選項關聯的類型。

CTXSYS。NULL_FILTER

此首選項將使用NULL_FILTER類型。

CTXSYS。AUTO_FILTER

此首選項將使用AUTO_FILTER類型。

詞法分析器

本節討論與詞法分析器首選項關聯的類型。

CTXSYS。DEFAULT_LEXER

默認的 lexer 取決於在安裝時所使用的語言。如下各節描述了CTXSYS.DEFAULT_LEXER爲每種語言。

美國和英國的語言設置

若是你的語言是英語,此首選項將BASIC_LEXER使用index_themes屬性被禁用。

丹麥語言設置

若是你的語言是丹麥語,這種偏好使用BASIC_LEXER與啓用瞭如下選項:

  • 替換拼寫 (alternate_spelling 屬性設置爲DANISH)

荷蘭語言設置

若是你的語言是荷蘭,這種偏好使用BASIC_LEXER與啓用下列選項:

  • 複合索引 (composite的屬性設置爲DUTCH)

德國和德國 DIN語言設置

若是你的語言是德語,這種偏好使用BASIC_LEXER與啓用下列選項:

  • 區分大小寫的索引 (mixed_case屬性啓用)

  • 複合索引 (composite的屬性設置爲GERMAN)

  • 替換拼寫 (alternate_spelling屬性設置爲GERMAN)

芬蘭、 挪威、 瑞典的語言設置

若是你的語言是芬蘭語、 挪威語或瑞典語,這種偏好使用BASIC_LEXER與啓用瞭如下選項:

  • 替換拼寫 (alternate_spelling 屬性設置爲SWEDISH)

日語語言設置

若是你的語言是日語,此首選項將使用JAPANESE_VGRAM_LEXER.

韓國語言設置

若是你的語言是朝鮮語,這種偏好使用KOREAN_MORPH_LEXER啓用KOREAN_MORPH_LEXER的全部屬性。

中國的語言設置

若是你的語言是簡體中文或繁體中文,此首選項將使用CHINESE_VGRAM_LEXER.

其餘語言

對於未在此節中列出的全部其餘語言,這種偏好使用BASIC_LEXER沒有屬性集。

請參見:

若要了解有關這些選項的更多信息,請參見BASIC_LEXER .

CTXSYS。BASIC_LEXER

這種偏好使用BASIC_LEXER.

節組

本節討論與節組首選項關聯的類型。

CTXSYS。NULL_SECTION_GROUP

此首選項將使用NULL_SECTION_GROUP類型。

CTXSYS。HTML_SECTION_GROUP

此首選項將使用HTML_SECTION_GROUP類型。

CTXSYS。AUTO_SECTION_GROUP

此首選項將使用AUTO_SECTION_GROUP類型。

CTXSYS。PATH_SECTION_GROUP

此首選項將使用PATH_SECTION_GROUP類型。

非索引字表

本節討論與非索引字表首選項關聯的類型。

CTXSYS。DEFAULT_STOPLIST

此非索引字表首選項默認爲您的數據庫語言的非索引字表。

請參見:

停用詞中提供的 stoplists 的完整列表,請參閱附錄 E,"甲骨文文本提供 Stoplists".

CTXSYS。EMPTY_STOPLIST

此非索引字表已無話。

存儲

這一節討論了與存儲首選項關聯的類型。

CTXSYS。DEFAULT_STORAGE

此存儲首選項使用BASIC_STORAGE類型。

單詞表

本節討論與單詞表首選項關聯的類型。

CTXSYS。DEFAULT_WORDLIST

此首選項爲您的數據庫語言使用語言的詞幹分析器。若是你的語言不列在表 2-32,此首選項默認爲 NULL 的詞幹分析器和泛型的模糊匹配屬性。

系統參數

本節介紹了 Oracle 文本系統參數。他們分爲如下類別:

通常系統參數

當您安裝 Oracle 文本以外的系統定義的首選項時,如下系統參數設置:

表 2-39 通常系統參數

系統參數 描述
MAX_INDEX_MEMORY 這是能夠在INDEXCREATEALTERINDEX參數子句中指定的最大索引內存.
DEFAULT_INDEX_MEMORY 這是默認的索引CREATEINDEXALTERINDEX所用的內存.
LOG_DIRECTORY 這是CTX_OUTPUT日誌文件的目錄。
CTX_DOC_KEY_TYPE 這是默認輸入密鑰類型,或ROWIDPRIMARY_KEYCTX_DOC程序。在安裝時設置爲ROWID

請參見: CTX_DOC. SET_KEY_TYPE.

您能夠經過查詢CTX_PARAMETERS視圖查看系統默認值。您能夠更改使用的 CTX_ADM.SET_PARAMETER程序的默認值。

默認索引參數

本節描述在建立上下文和 ctxcat 的索引時,您可使用索引參數。

上下文索引參數

當您建立一個上下文索引時不指定首選項參數子句中建立索引時使用如下默認參數。每一個默認參數命名系統定義的偏好,以用於數據存儲、 過濾、 詞法分析,等等。

表 2-40 默認上下文索引參數

參數 時使用 默認值
DEFAULT_DATASTORE 沒有指定參數子句中CREATEINDEX的數據存儲首選項. CTXSYS。DEFAULT_DATASTORE
DEFAULT_FILTER_FILE 沒有指定參數子句CREATEINDEX,和知足下列條件之一的濾清器首選項是如此:
  • 您的文件存儲在外部文件中 (BFILES) 或

  • 您指定一個數據存儲首選項,使用FILE_DATASTORE

CTXSYS。AUTO_FILTER
DEFAULT_FILTER_BINARY 沒有在CREATEINDEX和 Oracle 文本參數子句中指定的篩選器偏好檢測文本列數據類型是RAWLONGRAWBLOB. CTXSYS。AUTO_FILTER
DEFAULT_FILTER_TEXT 沒有在CREATEINDEX和 Oracle 文本參數子句中指定的篩選器偏好檢測文本列數據類型是要麼LONGVARCHAR2VARCHARCHAR,或CLOB. CTXSYS。NULL_FILTER
DEFAULT_SECTION_HTML 無節組CREATEINDEX,並知足下列條件之一時的參數子句中指定 true:
  • 您的數據存儲區偏好使用URL_DATASTORE

  • 您的過濾器偏好使用AUTO_FILTER.

CTXSYS。HTML_SECTION_GROUP
DEFAULT_SECTION_TEXT 沒有CREATEINDEX,和當你作時的參數子句中指定的節組不使用URL_DATASTOREAUTO_FILTER. CTXSYS。NULL_SECTION_GROUP
DEFAULT_STORAGE 沒有指定參數子句中CREATEINDEX的存儲首選項. CTXSYS。DEFAULT_STORAGE
DEFAULT_LEXER 沒有指定參數子句中CREATEINDEX的 lexer 首選項. CTXSYS。DEFAULT_LEXER
DEFAULT_STOPLIST CREATEINDEX參數子句中指定的任何非索引字表. CTXSYS。DEFAULT_STOPLIST
DEFAULT_WORDLIST CREATEINDEX參數子句中指定沒有單詞表偏好. CTXSYS。DEFAULT_WORDLIST

CTXCAT 索引參數

與建立索引建立一個 CTXCAT 索引和參數字符串中未指定任何參數時,就會使用下面的默認參數。CTXCAT 索引支持僅索引集、 詞法分析器、 存儲、 非索引字表和單詞表參數。每一個默認參數命名系統定義的首選項。

表 2-41 默認 CTXCAT 索引參數

參數 時使用 默認值
DEFAULT_CTXCAT_INDEX_SET 設置指定的INDEXCREATE參數子句中沒有索引.  
DEFAULT_CTXCAT_STORAGE 沒有指定參數子句中CREATEINDEX的存儲首選項. CTXSYS。DEFAULT_STORAGE
DEFAULT_CTXCAT_LEXER 沒有指定參數子句中CREATEINDEX的 lexer 首選項. CTXSYS。DEFAULT_LEXER
DEFAULT_CTXCAT_STOPLIST CREATEINDEX參數子句中指定的任何非索引字表. CTXSYS。DEFAULT_STOPLIST
DEFAULT_CTXCAT_WORDLIST CREATEINDEX參數子句中指定沒有單詞表偏好.

請注意雖然您能夠指定CTXCAT索引的單詞表偏好,大多數的屬性不適用,由於 catsearch 查詢語言不支持通配符,模糊,和堵塞。惟一有用的屬性是PREFIX_INDEX日本方面的數據。

CTXSYS。DEFAULT_WORDLIST

CTXRULE 索引參數

當你建立CTXRULE索引CREATEINDEX並在參數字符串中未指定任何參數,就會使用如下的默認參數。CTXRULE索引支持的 lexer、 存儲、 非索引字表和單詞表參數。每一個默認參數命名系統定義的首選項。

表 2-42 默認 CTXRULE 索引參數

參數 時使用 默認值
DEFAULT_CTXRULE_LEXER 沒有指定參數子句中CREATEINDEX的 lexer 首選項. CTXSYS。DEFAULT_LEXER
DEFAULT_CTXRULE_STORAGE 沒有指定參數子句中CREATEINDEX的存儲首選項. CTXSYS。DEFAULT_STORAGE
DEFAULT_CTXRULE_STOPLIST CREATEINDEX參數子句中指定的任何非索引字表. CTXSYS。DEFAULT_STOPLIST
DEFAULT_CTXRULE_WORDLIST CREATEINDEX參數子句中指定沒有單詞表偏好. CTXSYS.DEFAULT_WORDLIST
DEFAULT_CLASSIFIER No classifier preference is specified in parameter clause. RULE_CLASSIFIER

Viewing Default Values

You can view system defaults by querying the CTX_PARAMETERS view. For example, to see all parameters and values, you can issue:

SQL> SELECT par_name, par_value from ctx_parameters;

Changing Default Values

You can change a default value using the CTX_ADM.SET_PARAMETER procedure to name another custom or system-defined preference to use as default.

相關文章
相關標籤/搜索