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
參考資料:
http://docs.oracle.com/cd/B19306_01/text.102/b14218/cdatadic.htm
html
使用數據存儲類型來指定如何存儲您的文本。若要建立數據存儲首選項,必須使用下面的數據存儲類型之一:linux
數據存儲類型 | 什麼時候使用 |
---|---|
DIRECT_DATASTORE | 數據存儲在文本列的內部。每一行做爲一個單獨的文檔編制索引。 |
MULTI_COLUMN_DATASTORE | 在多個列中的文本表中存儲數據。列鏈接起來以建立一個虛擬的文檔,另外一個用於每一個行。 |
DETAIL_DATASTORE | 數據存儲在文本列的內部。文檔包含存儲在細節表中的文本列中含有標題信息存儲在主表中的一個或多個行。 |
FILE_DATASTORE | 數據從外部存儲在操做系統的文件。文件名存儲在文本列中,另外一個用於每一個行中。 |
NESTED_DATASTORE | 嵌套表中存儲數據。 |
URL_DATASTORE | 數據從外部存儲在位於 intranet 或 Internet 上的文件中。統一資源定位器 (Url) 存儲在文本欄中。 |
USER_DATASTORE | 在索引時合成了文件,由用戶定義的存儲過程。 |
這一章描述了您可使用來建立您的 Oracle 文本索引的各類元素。sql
當您使用建立索引建立索引或修改索引管理指數時,能夠選擇在參數字符串中指定索引的偏好、 stoplists、 和節組。指定一個首選項、 非索引字表或節組答案有關 Oracle 文本索引的文本方式的如下問題之一:
首選項類 | 回答了這個問題 |
---|---|
數據存儲區 | 您的文檔的存儲方式? |
篩選器 | 轉換爲純文本,這些文件的如何? |
詞法分析器 | 什麼語言正在被編制索引? |
單詞表 | 如何幹和模糊查詢是如何擴大呢? |
存儲 | 應如何存儲索引表? |
阻止列表 | 哪些詞或主題是不會索引嗎? |
節組 | 查詢部分啓用,和如何在文檔內定義節嗎? |
本章介紹如何設置每一個首選項。能夠經過在這一章中所描述的類型之一建立首選項啓用選項。
例如,若要指定您的文檔存儲在外部文件中,能夠建立稱爲mydatastore
使用FILE_DATASTORE類型的數據存儲區偏好。您做爲數據存儲首選項在CREATE
INDEX
的參數子句中指定mydatastore
.
若要建立數據存儲區,詞法分析器、 篩選、 分類、 單詞表或存儲首選項,您可使用 CTX_DDL。CREATE_PREFERENCE程序,並指定在這一章中所描述的類型之一。對於某些類型,您還能夠設置 CTX_DDL 屬性。SET_ATTRIBUTE程序。
索引類型名稱您可使用建立索引偏好的索引對象的類。一種類型,所以,是一個抽象的 ID,而偏好是一個對應於一種類型的實體。許多系統定義的首選項具備相同的名稱做爲類型 (例如, BASIC_LEXER
),但不是能保證準確對應 (例如, DEFAULT_DATASTORE
偏好使用DIRECT_DATASTORE
類型,和沒有對應的CHARSET_FILTER
類型的系統偏好)。要當心在假設的存在或性質的索引類型或系統首選項。
您指定索引首選項與CREATE INDEX
和ALTER INDEX
;索引首選項決定如何建立您的索引。例如,詞法分析器首選項指示要編入索引的文本的語言。您能夠建立並指定您本身 (用戶定義) 的偏好或您可使用系統定義的首選項。
若要建立非索引字表,請使用 CTX_DDL。CREATE_STOPLIST。您能夠添加非索引字表與CTX_DDL.ADD_STOPWORD
.
若要建立分區組,請使用 CTX_DDL。CREATE_SECTION_GROUP ,並指定一個節組類型。你能夠添加與CTX_DDL. ADD_ZONE_SECTION
或CTX_DDL.ADD_FIELD_SECTION
.
使用數據存儲類型來指定如何存儲您的文本。若要建立數據存儲首選項,必須使用下面的數據存儲類型之一:
數據存儲類型 | 什麼時候使用 |
---|---|
DIRECT_DATASTORE | 數據存儲在文本列的內部。每一行做爲一個單獨的文檔編制索引。 |
MULTI_COLUMN_DATASTORE | 在多個列中的文本表中存儲數據。列鏈接起來以建立一個虛擬的文檔,另外一個用於每一個行。 |
DETAIL_DATASTORE | 數據存儲在文本列的內部。文檔包含存儲在細節表中的文本列中含有標題信息存儲在主表中的一個或多個行。 |
FILE_DATASTORE | 數據從外部存儲在操做系統的文件。文件名存儲在文本列中,另外一個用於每一個行中。 |
NESTED_DATASTORE | 嵌套表中存儲數據。 |
URL_DATASTORE | 數據從外部存儲在位於 intranet 或 Internet 上的文件中。統一資源定位器 (Url) 存儲在文本欄中。 |
USER_DATASTORE | 在索引時合成了文件,由用戶定義的存儲過程。 |
DIRECT_DATASTORE
型用於直接在文本列中,爲每一個行的一份文件中存儲的文本。DIRECT_DATASTORE
不具備屬性。
支持如下的列類型:CHAR
、 VARCHAR
、 VARCHAR2
、 BLOB
、 CLOB
, BFILE
或XMLType
.
注:
若是你的專欄,BFILE
索引全部者必須有讀取權限上使用的BFILEs
的全部目錄.
下面的示例建立一個表,用來存儲文本數據的 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');
在你的文本存儲在多個列中時,請使用此數據存儲區。索引,期間系統鏈接列的文本,添加標籤的文本列和索引做爲單個文檔的文本。相似 XML 的標記是可選的。您還能夠設置系統篩選並串聯的二進制列。
MULTI_COLUMN_DATASTORE
具備下列屬性:
表 2-2 MULTI_COLUMN_DATASTORE 屬性
要索引,必須建立要在CREATE
INDEX
語句中指定的虛擬列。除非在列屬性指定它的名稱,此列內容不是虛擬文檔的一部分。
該指數被同步僅當更新虛擬列。您能夠建立觸發器傳播更改,若是須要的話。
下面的示例建立稱爲 my_multi
與三個文本列多列數據存儲首選項:
begin
ctx_ddl.create_preference('my_multi', 'MULTI_COLUMN_DATASTORE'); ctx_ddl.set_attribute('my_multi', 'columns', 'column1, column2, column3');
end;
下面的示例建立多列數據存儲首選項,並表示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
具備下列屬性:
此示例闡釋了主頁和詳細的表如何彼此相關。
主表中的主/詳細信息關係定義的文檔。您分配的每一個文檔的識別號碼。下表是示例的主表,稱爲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;
到索引這個主/詳細信息關係中定義的文檔CREATE
INDEX
的主表中指定的列。您指定的列必須容許的類型之一。
此示例使用body
列,其功能是可以建立主/詳細信息索引,並提升代碼的可讀性。my_detail_pref
首選項被設置爲DETAIL_DATASTORE
,具備所需屬性:
CREATE INDEX myindex on my_master(body) indextype is ctxsys.context parameters('datastore my_detail_pref');
在此示例中,您還能夠指定要建立索引的title
或author
的列。然而,若是您這樣作,這些列的更改將觸發從新索引的操做。
FILE_DATASTORE
型用於存儲在經過本地文件系統訪問的文件中的文本。
注:
與某些類型的遠程掛載的文件系統,FILE_DATASTORE
可能沒法工做。
FILE_DATASTORE
具備如下屬性:
指定外部存儲在文件系統中的文件的完整目錄路徑名稱。當您指定完整的目錄路徑,這樣時,您只須要在文本列中包括文件的名稱。
您能夠指定多個路徑,路徑與在 UNIX 和 Windows 上的 semicolon(;) 由一個冒號 (:) 分隔每一個路徑。文件的名稱存儲在文字的表格中的文本列中。
若是您不使用此屬性指定外部文件的路徑,Oracle 文本須要在文本列中存儲的文件名稱中包含的路徑。
路徑屬性具備下列侷限性:
若是您指定一個路徑屬性,您只能在索引列中使用一個簡單的文件名。你不能將路徑屬性結合路徑做爲文件名的一部分。若是在多個文件夾或目錄中存在這些文件,你必須離開路徑屬性的設置,並在索引列中包含文件的完整名稱,路徑。
在 Windows 系統上,文件必須位於本地驅動器上。他們不能在遠程驅動器上,是否遠程驅動器映射爲本地驅動器盤符。
本示例建立稱爲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
型用於存儲文本:
萬維網 (經過 HTTP 或 FTP 訪問) 上的文件中
在本地文件系統 (經過文件協議訪問) 中的文件
你在單個文本字段中存儲的每一個 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
具備下列屬性:
屬性 | 屬性值 |
---|---|
超時 | 以秒爲單位指定超時值。有效的範圍是 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的有效範圍是 1 到 1024年,默認值爲 8。
指定最大長度以字節爲單位,URL 數據存儲區支持的 Url 存儲在數據庫中。若是 URL 超過最大長度,則返回錯誤。Urlsize的有效範圍是 32 到 65535,默認值爲 256。
注:
指定爲 maxurls 和urlsize的產品值不能超過 5,000,000。換句話說,內存緩衝區的最大大小 (maxurls * urlsize) 爲該 URL 是大約 5 兆字節。
指定內部的緩衝區可保存爲 HTML 文檔 (行) 從文本表中檢索到的行的最大數目。Maxurls的有效範圍是 32 到 65535,默認值爲 256。
注:
指定爲maxurls和urlsize的產品值不能超過 5,000,000。換句話說,內存緩衝區的最大大小 (maxurls * urlsize) 爲該 URL 是大約 5 兆字節。
指定用做安裝了 Oracle 文本的計算機的 HTTP 代理 (網關) 的主機的徹底限定的名稱。您能夠選擇指定端口號,用冒號的形式hostname:port.
若是這臺機器是在須要經過代理服務器訪問位於防火牆外部的 Web 文件的身份驗證的 intranet,則必須設置此屬性。
指定用做安裝了 Oracle 文本的計算機的 FTP 代理 (網關) 的主機的徹底限定名稱。您能夠選擇指定一個端口號,用冒號的形式hostname:port.
若是這臺機器是在須要經過代理服務器訪問位於防火牆外部的 Web 文件的身份驗證的 intranet,必須設置此屬性。
在 intranet 中指定的域 (達十六,單獨用逗號) 存在於大多數,若是不是所有,機器的字符串。當其中一個域中的主機名稱遇到時,沒有請求發送到ftp_proxy和從不爲指定的計算機。相反,直接由主機標識在 URL 中,處理了該請求。
例如,若是爲no_proxy輸入字符串us.oracle.com, uk.oracle.com ,則包含這些域中的主機名的機器的任何 URL 請求不會處理由您的代理服務器。
本示例建立稱爲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
具備下列屬性:
屬性 | 屬性值 |
---|---|
程序 | 指定合成要編制索引的文檔的過程。 此過程能夠由任何用戶擁有,而且必須是可由索引全部者執行。 |
先前 | 指定程序的第二個參數的數據類型。有效值爲CLOB , BLOB , CLOB_LOC , BLOB_LOC 或VARCHAR2 。默認值爲 CLOB。 當您指定 |
指定合成要編制索引的文檔的程序的名稱。本規格書必須在窗體中,PROCEDURENAME 或軟件包名稱。PROCEDURENAME。您還能夠指定架構全部者名稱。
您指定的程序必須具備兩個參數定義以下:
procedure (r IN ROWID, c IN OUT NOCOPY <output_type>)
第一個參數r必須是類型ROWID
。第二個參數c必須是類型output_type。NOCOPY
是指示 Oracle 文本,若是有可能經過引用傳遞參數 c 的編譯器提示。
注::
過程的名稱和它的參數能夠被命名爲任何名稱。爲簡單起見此示例中使用的參數 r 和 c。存儲的過程是索引的每一行調用一次。鑑於當前行的 rowid,程序必須編寫文檔的文本變成第二個參數,您先前使用指定的類型.
若是您更改或編輯存儲的過程,在此基礎上的索引不會向外通知,您必須手動從新建立此類的索引。所以,若是該存儲過程使用的其它列,這些列的值更改,不會從新生成索引的行。僅當索引的列更改時從新編制索引行。
做者、 標題和文本字段分開,如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;
當appowner
在articles(text)
使用這種偏好上建立索引時,索引操做看到做者和標題文檔文本中。
下面的過程可能會用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;
使用嵌套數據存儲類型存儲爲嵌套表中的行的索引文檔。
當使用嵌套的表數據存儲區時,你必須虛擬欄編制索引,由於可擴展索引框架不容許索引嵌套的表的列。請參閱示例。
嵌套表的 DML 不會自動傳播到用於索引的虛擬列。DML 嵌套表上,將其傳播到虛擬列,爲您的應用程序代碼或觸發器必須顯式更新虛擬列。
篩選器索引的默認值基於nested_text
列的類型。
在驗證期間,該類型存在的甲骨文文字檢查和屬性您指定爲 nested_lineno 和 nested_text 中的嵌套的表類型存在。Oracle 文本不檢查命名的嵌套的表的列索引表中存在。
本節演示使用索引的文檔存儲爲嵌套表中的行的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;
使用篩選器類型來建立肯定文本索引的篩選方式的首選項。篩選器容許字處理和格式化的文檔,以及純文本、 HTML 和 XML 文檔進行索引。
對於已格式化的文檔,Oracle 文本以本機格式存儲文檔和使用篩選器來創建臨時的純文本或 HTML 版本的文檔。Oracle 文本索引詞來自純文本或 HTML 格式的文檔版本。
若要建立篩選器首選項,必須使用如下類型之一:
篩選器 | 當使用 |
---|---|
CHARSET_FILTER | 字符集轉換篩選器 |
AUTO_FILTER | 汽車濾清器過濾格式化的文件, |
NULL_FILTER | 無過濾所需。用於索引的純文本、 HTML 或 XML 文檔 |
MAIL_FILTER | 使用MAIL_FILTER 來轉換 RFC 822,RFC 2045 消息中對可轉位刀片的文本。 |
USER_FILTER | 用戶定義的外部濾波器用於自定義篩選 |
PROCEDURE_FILTER | 用戶定義的存儲過程篩選器,用於自定義篩選。 |
使用CHARSET_FILTER
從字符集到字符集數據庫所用的非數據庫字符集轉換文件。
CHARSET_FILTER
具備如下屬性:
屬性 | 屬性值 |
---|---|
字符集 | 指定源字符集的全球化支持名稱。 若是您指定 UTF16AUTO,此篩選器自動檢測若是字符集是 UTF16 大-或小端字節序。 爲日語字符設置自動檢測指定 JAAUTO。此篩選器自動檢測中 JA16EUC 或 JA16SJIS 的自定義字符規格,並將轉換爲數據庫字符集。此篩選器是有用在日語中,在您的數據文件具備混合字符集。 |
請參見:
有關受支持的全球化支持字符集的詳細信息oracle 數據庫全球化支持指南設置。若是你的字符集是 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
是一個通用的過濾器,過濾器大多數文件格式,包括 PDF 和 Microsoft Word ™ 文件。將它用於單格式和混合格式的列進行索引。此篩選器自動繞過純文本、 HTML、 XHTML、 SGML 和 XML 文件。
請參見:
AUTO_FILTER
和學會更多關於如何設置您的環境使用此篩選器支持的格式的列表,請參閱附錄 B,"Oracle 文本支持文檔格式".
注:
AUTO_FILTER
替換INSO_FILTER
,其中已棄用。雖然已盡一切努力確保最大的向後兼容性之間兩個篩選器,以便使用INSO_FILTER
應用程序將繼續工做而無需修改,可能會出現一些差別。用戶所以應該在他們新的程序中使用AUTO_FILTER
和在可能的狀況下,替換實例的INSO_FILTER
,和任何優惠制度或常數,使在舊的應用程序中使用它。
AUTO_FILTER
偏好具備下列屬性:
屬性 | 屬性值 |
---|---|
超時 | 以秒爲單位指定AUTO_FILTER 超時。使用 0 到 42,949,672 之間的數字。默認值是 120。設置此值 0 禁用的功能。 這等待期如何使用的方法取決於您如何設置 timeout_type。 此功能被禁用,相應的字符集和格式列致使 使用此功能來防止甲骨文文本索引從懸掛無限期地等待操做篩選器操做。 |
timeout_type | 指定的啓發式算法或固定。默認值爲啓發式算法。 指定 Oracle 文本,以檢查每一個超時秒是否從外面在 HTML 導出輸出增長了啓發式算法。若是輸出並無增長,操做將終止該文檔。在 指定固定終止外面在 HTML 出口加工後不管是西耶是否只掛過濾的超時秒數。當索引吞吐量比抽出時間來成功地篩選大型文檔更重要時,此值是有用的。 |
output_formatting | 將此屬性設置有對篩選器的性能或濾波器的輸出沒有影響。它被維護向後兼容性。 |
若要包含格式化的文件,例如 Microsoft Word 文本欄編制索引,請使用AUTO_FILTER
。此篩選器將自動檢測文檔格式。您可使用 CTXSYS
。AUTO_FILTER
的系統定義的偏好在參數子句中,以下所示:
create index hdocsx on hdocs(text) indextype is ctxsys.context parameters ('datastore ctxsys.file_datastore filter ctxsys.auto_filter');
混合格式列是包含多個文檔的格式,如一列包含 Microsoft Word、 PDF、 純文本和 HTML 文檔的文本列。
AUTO_FILTER
能夠索引列混合格式,自動繞過純文本、 HTML 和 XML 文檔。然而,若是您不想依賴於內置旁路機制,您能夠顯式您行標記爲文本並致使AUTO_FILTER
來忽略行而且不處理任何方式中的文檔。
基表中的格式列使您可以指定的文本列中所包含的文檔的類型。您能夠指定如下文件類型:TEXT
、BINARY
和IGNORE
。在索引,期間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;
若要建立索引,使用CREATE
INDEX
並在參數字符串中指定的格式列名稱:
create index hdocsx on hdocs(text) indextype is ctxsys.context parameters ('datastore ctxsys.file_datastore filter ctxsys.auto_filter format column fmt');
若是您不指定TEXT
或BINARY
格式列,則使用BINARY
。
注:
您無需指定格式列CREATE
INDEX
時使用AUTO_FILTER
.
AUTO_FILTER
將文檔轉換爲數據庫字符集時文件格式列設置爲TEXT
。在這種狀況下, AUTO_FILTER
看字符集列來肯定文檔字符集。
若是字符集列的值不是甲骨文文字字符集名稱,該文檔被經過沒有任何字符集轉換。
注:
在使用AUTO_FILTER
時,您無需指定字符集列.
若是你作指定的字符集列,不指定格式列AUTO_FILTER
做品喜歡CHARSET_FILTER,只是在這種狀況下有沒有日本字符集自動檢測。
請參見:
"CHARSET_FILTER".使用純文本或 HTML 時要編制索引的NULL_FILTER
類型和沒有篩選的須要來進行。NULL_FILTER
不具備屬性。
若是您的文檔集徹底是 HTML,Oracle 建議您在您的篩選器首選項中使用 NULL_FILTER
。
例如,要索引 HTML 文檔集,能夠以下指定爲NULL_FILTER
和HTML_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
來轉換 RFC 822,RFC 2045 消息中對可轉位刀片的文本。如下限制持有爲輸入:
文檔必須是 US-ASCII
行不能超過 1024 個字節
文檔必須是在 RFC 822 語法無效。
若是輸入無效的行爲是未定義的。由無錯誤過濾器,可能強勁處理存在必定的誤差。其餘人可能會致使讀取時間或過濾時間的錯誤。
MAIL_FILTER
具備下列屬性:
屬性 | 屬性值 |
---|---|
INDEX_FIELDS | 指定以冒號分隔的要保留在輸出中的字段列表。這些字段轉換爲標記的標記。例如,若是將INDEX_FIELDS 設置爲"FROM":
成爲:
只有頂級字段將轉換以這種方式。 |
AUTO_FILTER_TIMEOUT | 指定 AUTO_FILTER 篩選經過郵件過濾器調用的超時值。默認值爲 60。(替換INSO_TIMEOUT 屬性和INSO_TIMEOUT 的向後兼容.) |
AUTO_FILTER_OUTPUT_FORMATTING | 指定或TRUE 或FALSE 。默認值是TRUE . 此屬性將替換之前的 |
PART_FIELD_STYLE | 指定應如何轉換髮生在較低級別的部件和INDEX_FIELDS 特性所標識的字段。頂級的消息部分由INDEX_FIELDS 標識的字段老是轉換爲標記標記 (見INDEX_FIELDS 前面的說明) ;PART_FIELD_STYLE 控制後續部分 ; 轉的型例如,附加的電子郵件。 可能的值包括 |
此篩選器執行如下操做爲每一個文檔:
讀取和刪除頁眉字段
解碼的消息正文,若是須要,根據內容傳輸編碼字段
採起行動取決於內容類型字段值和郵件篩選器配置文件中指定的用戶指定的行爲。(請參閱"關於郵件篩選器的配置文件")。可能採起的行動是:
生產輸出文本 (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
的規格,以重寫默認行爲。行爲能夠INCLUDE
, AUTO_FILTER
或IGNORE
(請參閱"篩選器的行爲"的定義)。舉個例子:
application/zip IGNORE application/msword AUTO_FILTER model IGNORE
您不能指定爲"多部分"或"郵件"類型的行爲。若是你這樣作,這種行被忽略。一種類型的重複規範替換較早的規範。
評論能夠列入的郵件配置文件的起始行以 # 符號。
字符集映射小節的開頭
[charsets]
線包括 IANA 的名字,而後空格,而後一個 Oracle 全球化支持字符集的名稱,好比:
US-ASCII US7ASCI ISO-8859-1 WE8ISO8859P1
此文件是郵件過濾器獲取映射的惟一途徑。沒有默認值。
當您更改配置文件時,更改將影響僅索引後,點過的文檔。您必須在更改該文件後刷新共享的池。
假設咱們有一個具備如下形式,其餘帶有不一樣主題行的電子郵件與咱們的電子郵件相連的電子郵件:
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_STYLE
到IGNORE
.
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
具備如下屬性:
指定單一的可執行文件外部篩選器,用於篩選的列中存儲的全部文本。若是不止一個文檔格式存儲在列中,爲命令指定的外部篩選器必須認識和處理全部這種格式。
在 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
類型來篩選您的文檔的存儲過程。每次一個文檔須要進行篩選的時被調用存儲的過程。
這種類型具備下列屬性:
屬性 | 目的 | 容許的值 |
---|---|---|
程序 | 篩選器名稱的存儲過程。 | 任何程序。該過程能夠是 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_parameter
、 format_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 | 爲存儲過程的輸入參數的類型。 |
先前 | 輸出參數的存儲過程的類型。 |
rowid_parameter | 包括 rowid 參數嗎? |
Input_type 屬性不是強制性的。若是未指定,BLOB 是默認值。
指定的篩選過程的輸出參數的類型。您能夠指定下列類型之一:
類型 | 描述 |
---|---|
CLOB |
輸出參數是 NOCOPY CLOB 中出來。你的程序必須寫入 CLOB 中經過過濾後的內容。 |
VARCHAR2 |
輸出參數是在出 NOCOPY VARCHAR2。你的程序必須寫 VARCHAR2 變量的篩選的內容傳遞。 |
FILE |
輸出參數必須IN VARCHAR2 。在進入篩選過程,輸出參數是一個臨時文件的名稱。篩選過程必須寫入此命名的文件的已篩選的內容。 只有當該過程是一個安全的標註,能夠向文件中寫入時,使用文件輸出類型頗有用。 |
先前屬性不是強制性的。若是未指定, CLOB
是默認的。
當指定 TRUE 時,做爲第一個參數以前的輸入和輸出參數, 傳遞的 rowid 中要被篩選的文檔。
例如,隨着INPUT_TYPE
BLOB
,OUTPUT_TYPE
CLOB
,和ROWID_PARAMETER
TRUE
,篩選過程必須具備簽名,以下所示:
procedure(in rowid, in blob, in out nocopy clob)
此屬性是有用的當您的程序須要從其餘列或表的數據。此屬性不是強制性的。默認值爲FALSE
.
若是指定TRUE
,被篩選的文檔的格式列的值傳遞給篩選過程輸入和輸出參數,但後 rowid 參數,若是啓用了。
您指定的格式列的名稱在參數字符串中的索引時使用的關鍵字'format column <columnname>'
。該參數的類型必須是IN
VARCHAR2
.
格式列的值能夠讀取根據 rowid 參數,但此屬性使得單個篩選器的工做對多個表的結構,由於格式屬性抽象,並不須要的知識的表格或格式的列的名稱。
FORMAT_PARAMETER
不是強制性的。默認值爲FALSE
.
當你指定TRUE
時,文檔被過濾的字符集列的值傳遞給篩選過程輸入和輸出參數,但後的 rowid 和格式的參數,若是啓用了。
您指定的字符集列的名稱在參數字符串中的索引時使用關鍵字'charset column <columnname>'
。該參數的類型必須是IN
VARCHAR2
.
CHARSET_PARAMETER
屬性不是強制性的。默認值爲 FALSE。
ROWID_PARAMETER
、 FORMAT_PARAMETER
、 CHARSET_PARAMETER
是徹底獨立的。該命令是 rowid,格式,而後字符集,但篩選過程傳遞只有所需的最小參數。
例如,假定INPUT_TYPE
是BLOB
, OUTPUT_TYPE
是CLOB
。若是您篩選過程須要全部的參數,必須爲程序簽名:
(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)
篩選過程能夠提升經過正常的 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;
使用詞法分析器首選項來指定要索引的文本的語言。若要建立詞法分析器首選項,必須使用如下詞法分析器類型之一:
類型 | 描述 |
---|---|
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
具備下列屬性:
屬性 | 屬性值 |
---|---|
延續 | 字符 |
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指定字符,指示詞下一行上繼續並應做爲單個標記創建索引。最多見的符是連字符 '-' 和反斜槓 \。
S指定單個字符指示,當它出如今字符串中的數字,這些數字爲分組在一個大的單一單元內。
例如,逗號 ',' 可能定義爲一個numgroup字符,由於它常常指示數以千計分組,當它出如今數字的字符串。
S指定的字符,當他們出如今字符串的位數,致使 Oracle 文本索引的數字字符串做爲一個單一的單位或單詞。
舉個例子,期 '.' 能夠定義爲 numjoin 個字符,由於它經常充當小數點,當它出如今數字的字符串。
注:
Numjoin和numgroup的默認值是由爲數據庫指定的全球化支持初始化參數決定的。通常狀況下,一個值,不須要指定爲numjoin或numgroup ,建立BASIC_LEXER
的 lexer 首選時.
S指定的當它們出如今一個詞 (開頭、 中間或結束),任何地方都處理爲字母數字和文本索引中的令牌中包含非字母數字字符。這包括printjoins ,連續發生。
例如,若是連字符-和下劃線 '_' 字符被定義爲printjoins、 _file_等僞知識分子的術語都存放在文本索引做爲僞知識分子和_file_.
注:
若是printjoins字符也被定義爲一個標點字符,該字符只處理做爲一個字母數字字符若是緊跟着它的字符是一個標準的字母數字字符或已被定義爲printjoins或skipjoins的字符。指定的非字母數字的字符,當它們出如今一個單詞的結尾處顯示一個句子的結束。默認值是期間 '。 ',問號 '嗎? ',和感嘆號'!'。
在文本編制索引以前,從令牌中刪除被定義爲標點的字符。然而,若是一個標點字符也被定義爲一個printjoins字符,只有當它是在令牌中的最後一個字符時移除字符。
例如,若是句點 (.) 被定義爲printjoins和標點字符,下列轉換在進行索引和查詢,以及過程當中會發生:
令牌 | 索引的標記 |
---|---|
.doc | .doc |
dog.doc | dog.doc |
狗。doc | 狗。doc |
那隻狗。 | 狗 |
狗...... | 狗。 |
此外, BASIC_LEXER
使用標點字符結合換行符和空格的字符,來肯定句子的段落搜索的句子和段落分隔符。
Specify 非字母數字字符,當它們出如今一個單詞內標識 word 做爲單個標記 ;然而,字符不會存儲與文本索引中的令牌中。
例如,若是連字符 '-' 定義爲skipjoins,詞僞知識分子存儲在pseudointellectual做爲文本索引.
注:
printjoins和skipjoins是互斥的。不能爲這兩個屬性指定相同的字符。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
使用換行符連同標點符號和空格字符識別做爲句子和段落搜索段落分隔符的字符串。
換行符的惟一有效值爲 NEWLINE
和CARRIAGE_RETURN
(回車)。默認值是NEWLINE
.
指定存儲在文本索引中以前是否有音符 (元音變音、 變、 急性口音,等等) 的字符轉換爲其基窗體。默認值爲沒有 (基地字母轉換禁用)。基地字母轉換和base_letter_type
的詳細信息,請參閱基礎字母轉換.
指定泛型或特定。
泛型的值是默認值,並信變換爲基礎的手段使用一個適用於全部語言的轉換表。基地字母轉換和base_letter_type
的詳細信息,請參閱基礎字母轉換.
alternate_spelling
同時啓用了base_letter
,則時,有時須要重寫base_letter
,以防止意外的結果,從串行轉換。請參見重寫基信轉換與替換拼寫。默認值爲 FALSE
.
S指定詞法分析器葉標記顯示在文本中的徹底相同的呢,仍是將標記轉換爲所有大寫。缺省設置爲 NO (標記轉換爲所有大寫)。
注:
Oracle 文本能夠確保這個詞與查詢匹配的被查詢的索引是否區分大小寫。所以,若是您對您的文本索引啓用區分大小寫,針對索引的查詢都區分大小寫。指定是否複合詞標引是禁用或啓用或 GERMAN
或DUTCH
的文本。默認值是DEFAULT
(複合字索引禁用)。
一般是在德國的字典中的一個條目的單詞不將拆分爲複合的莖,而不是字典條目的單詞被拆分爲複合莖。
要檢索的索引的複合莖,必須發出一個幹查詢,例如$bahnhof。單詞表詞幹分析器語言必須匹配的複合的莖的語言。
Oracle 文本附帶產生用於ENGLISH
和DERIVATIONAL
所產生的字典 ($ORACLE_HOME/ctx/data/enlx/dren.dct
) 的系統。您能夠建立您本身的語言,以自定義如何分解單詞的用戶詞典。這些字典是表 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
是指定索引主題信息用英文或法文。這使得 ABOUT
查詢更精確。Index_themes和index_text的屬性不可能都是號
若是您使用BASIC_LEXER
,並指定index_themes沒有值,此屬性默認爲NO
.
能夠將此參數設置爲 TRUE,任何爲包括 CTXCAT 的索引類型。若要與 CATSEARCH 發出關於查詢,請將查詢模板使用上下文語法。
注:
index_themes
須要安裝的知識庫文章。知識庫文章可能或不可能安裝 Oracle 文本。在知識的基礎上的詳細信息,請參閱Oracle 文本應用程序開發人員指南.
指定YES
以證實主題。主題證實試圖在文檔中查找相關的主題。當發現有沒有相關的主題時,父主題被消除從文檔。
雖然主題證實是能夠接受的大型文檔,幾句簡短的文字說明不多證實父主題,從而致使貧窮召回性能與ABOUT
查詢。
證實結果在較高的精度和減小 (減小返回的行) 召回ABOUT
查詢的主題。爲較高的查全率ABOUT
查詢中可能不是那麼精確,您能夠禁用主題證實。YES
.
prove_themes
屬性支持CONTEXT
和CTXRULE
的索引。
指定的知識庫用於主題代當index_themes設置爲YES
。當index_themes是NO
的時將此參數設置有沒有任何的影響。
您能夠指定任何全球化支持的語言或AUTO
。您必須爲您指定的語言的知識庫文章。此版本提供一個知識庫中只有英文和法文。在其餘語言中,您能夠建立您本身的知識庫。
默認值是AUTO
,它指示系統從新設置此參數的語言環境。
指定的詞幹分析器用於幹索引。你能夠選擇之一
沒有一個
英語
派生詞綴
荷蘭語
法語
德語
意大利語
西班牙語
令牌被阻擋在索引時除了正常形式單一基窗體。索引莖容許更好的查詢性能,對於幹 ($) 的查詢,如$computed.
對索引詞信息指定YES
。Index_themes和index_text的屬性都不能NO
.
缺省設置爲NO
.
GERMAN
、DANISH
,或指定SWEDISH
,使不一樣的拼寫這些語言之一。啓用備用拼寫使您可以查詢中任何其餘形式的單詞。
替換拼寫默認是關閉的 ;然而,在 Oracle 提供admin/defaults
(德語, drdefdk.sql
爲丹麥語和瑞典語drdefs.sql
drdefd.sql
) 的特定於語言的腳本,替換拼寫被打開的。若是安裝過程當中使用這些腳本,而後替換拼寫是上。然而,您能夠指定NONE
,沒有備用的拼寫。Oracle 的文本使用替換拼寫公約有關詳細信息,請參閱替換拼寫.
指定是否使用BASIC_LEXER
的查詢返回兩個傳統和改革 (新) 拼寫的德語單詞。若是將new_german_spelling
設置爲是,而後建立索引傳統和新形式的單詞。若是它設置爲否,而後 word 將索引僅做爲它在查詢中的規定。默認值是號
請參見:
"新的德語拼寫"下面的示例設置 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
到索引文本列包含不一樣語言的文檔。例如,可使用此詞法分析器將英語、 德語和日語文檔存儲的文本列進行索引。
Lexer 沒有屬性。
你基地的表中,必須有語言列。以多語言表的索引,您指定的語言列建立索引時。
建立多 lexer 偏好與CTX_DDL.CREATE_PREFERENCE
。你向多 lexer 偏好與CTX_DDL.ADD_SUB_LEXER
程序。
在索引、 MULTI_LEXER
檢查每一行語言列的值和特定於語言的詞法分析器來處理文檔中的交換機。
WORLD_LEXER
詞法分析器還執行多國語言的索引,但不須要單獨的語言列 (也就是說,它有自動語言檢測)。有關WORLD_LEXER
的詳細信息,請參閱"WORLD_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_LEXER
類型標識繁體及簡體的中文文本,用於建立 Oracle 文本索引中的標記。
此詞法分析器提供瞭如下好處超過CHINESE_VGRAM_LEXER
:
生成較小的索引
更好的查詢響應時間
生成真正的單詞標記致使更好的查詢精度
支持中止詞
CHINESE_LEXER
使用不一樣的算法來生成標記,由於索引時間是長於與CHINESE_VGRAM_LEXER
.
若是你的數據庫角色是由 Oracle 支持中文或 Unicode 字符集之一,您可使用此詞法分析器。
JAPANESE_VGRAM_LEXER
類型標識在日語中的令牌建立文本索引。它不具備屬性。此詞法分析器支持幹 ($) 運算符。
JAPANESE_LEXER
類型標識在日語中的令牌建立文本索引。此詞法分析器支持幹 ($) 運算符。
此詞法分析器提供瞭如下好處超過JAPANESE_VGRAM_LEXER
:
生成較小的索引
更好的查詢響應時間
生成真正的單詞標記致使更好的查詢精度
由於JAPANESE_LEXER
使用一種新的算法來生成令牌,索引時間是長於與JAPANESE_VGRAM_LEXER
.
JAPANESE_LEXER
指定用於建立文本索引時, JAPANESE_LEXER
將其一個句子解析成單詞。
例如,如下複詞 (天然語言研究所)
被索引做爲三個標記:
爲了解決一個句子成單詞,引用的內部字典。當不能在內部字典中找到單詞時,Oracle 文本將使用JAPANESE_VGRAM_LEXER
來解決它。
KOREAN_MORPH_LEXER
類型標識中用於建立 Oracle 文本索引的朝鮮語文字的標記。
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
支持:
在 Unicode 中定義的非 KSC5601 韓文字符的單詞
補充字符
請參見:
對補充字符的信息,請參閱Oracle 數據庫全球化支持指南韓國的一些文件可能有非 KSC5601 個字符。KOREAN_MORPH_LEXER
能夠認識到全部可能的 11,172 韓國 (朝鮮) 字符,此類文件還使用 UTF8 或 AL32UTF8 字符集解釋。
使用您的數據庫的 AL32UTF8 字符集來提取代理項字符。默認狀況下, KOREAN_MORPH_LEXER
提取全部系列的代理項字符在文檔中爲每一個數據系列的一個標記。
當您使用KOREAN_MORPH_LEXER
時,您能夠指定如下屬性:
你可使用複合屬性來控制如何複合名詞被編入索引。
當您指定NGRAM
複合屬性時,複合名詞索引與全部可能的組件標記。例如,如下複合名詞 (信息處理研究所)
被索引做爲六個標記:
您能夠指定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
索引,以下所示:
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 能夠插上您本身的特定於語言的詞法分析解決方案。這使您能夠定義爲不支持 Oracle 文本的語言的詞法分析器。它還使您能夠定義新的詞法分析器的一種語言,支持,但其詞法分析器不適合您的應用程序。
您註冊與 Oracle 文本的用戶定義詞法分析器是由兩個例程,您必須提供:
用戶定義的例程 | 描述 |
---|---|
索引過程 | 存儲的過程 (PL/SQL) 實現的文檔和中止詞標記化。輸出必須是 XML 文檔做爲指定在這一節。 |
查詢過程 | 存儲的過程 (PL/SQL) 實現的查詢詞標記化。輸出必須是 XML 文檔做爲指定在這一節。 |
兩個不一樣的接口支持的用戶定義的詞法分析器索引過程。一個接口使文檔或中止詞和編碼爲 XML 做爲 VARCHAR2 數據類型傳遞,而其餘接口使用 CLOB 數據類型對應的標記。此屬性指示由 INDEX_PROCEDURE 屬性所指定的存儲過程實現的接口。
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 不使用。 |
表 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 要建立致使性能命中一個新副本。
此回調存儲過程是 Oracle 文本稱爲標記詞s 在查詢中的所需。以空格分隔的一組字符 (不包括的查詢運算符) 在查詢中將標識 Oracle 文本做爲一個詞.
此過程必須不執行任何如下操做:
回滾
顯式或隱式提交當前事務
發出任何其它事務控制語句
更改會話語言或領土
返回的 XML 文檔的根元素標記的子元素必須是相同的順序標記出如今查詢詞被標記中。
此存儲過程的行爲必須是肯定對全部參數。
表 2-27描述了用戶定義的詞法分析器查詢程序的界面:
參數位置 | 參數模式 | 參數數據類型 | 描述 |
---|---|---|---|
1 | 在 | VARCHAR2 | 查詢詞被分詞。 |
2 | 在 | CTX_ULEXER_WILDCARD_TAB | 通配符字符 (%和 _) 查詢字中的字符偏移量。若是查詢詞經過 Oracle 文本中不包含任何通配符字符而後此索引的表將爲空。 通配符查詢詞中的必須保留在通配符查詢功能才能正常工做的順序返回的標記。 字符偏移量爲 0 (零) 的基礎。偏移的信息遵循 USC 2 代碼點語義。 |
3 | 在出 | VARCHAR2 | 做爲 XML 編碼的標記。 若是查詢詞包含沒有標記而後必須返回 NULL 或返回的 XML 文檔中的標記元素必須包含任何子元素。 數據的長度必須小於-等於 32512 字節爲單位)。 |
由存儲過程返回的標記的順序必須表示爲 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 屬性
本節介紹了額外的約束條件的用戶定義的詞法分析器索引過程,當第三個參數爲 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>
本節介紹了額外的限制強加給由用戶定義的詞法分析器索引過程,第三個參數爲 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 架構中定義的屬性。
屬性 | 描述 |
---|---|
關閉 | 此屬性表示的字符偏移量的標記出如今被標記的文檔。 偏移量是字符文檔傳遞給用戶定義的詞法分析器索引過程,不是由數據存儲區讀取的文檔。獲取數據存儲區的文件可能由篩選器對象或節組的對象,或二者以前被傳遞給用戶定義的詞法分析器索引過程, 預先處理。 正在標記文檔中的第一個字符的偏移量爲 0 (零)。偏移的信息遵循 USC 2 代碼點語義。 |
萊恩 | 此屬性表示該標記的字符長度 (SQL 函數長度相同的語義) 出如今被標記的文檔。 長度是傳遞給用戶定義的詞法分析器索引過程,不是文檔數據存儲區讀取的字符文件。在被傳遞給用戶定義的詞法分析器索引過程前可能經過篩選器對象或節組對象預先處理文檔獲取數據存儲區。 長度信息遵循 USC 2 代碼點語義。 |
off
屬性值和len
屬性值的總和必須小於或等於被標記文檔中的字符總數。這是爲了確保文件偏移量和被引用的字符在文檔邊界內。
本節介紹了額外的限制強加給用戶定義的詞法分析器查詢過程所返回的 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
元素能夠有零個或更多子元素。子元素能夠是如下之一: num
和word
。其中每個表示特定類型的令牌。
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 架構中定義的屬性。
屬性 | 描述 |
---|---|
compMem | 相同的word 元素,但其隱式詞偏移量是之前的word 標記同樣。Oracle 文本將等同於此令牌與前面的 word 標記和隨後compMem 令牌使用查詢EQUIV 運算符。 |
通配符 | 任何 %或 _ 的字符在查詢中,都沒有逃過由用戶被視爲通配符字符,由於它們會被其餘字符代替。這些查詢中的通配符字符必須爲通配符查詢功能才能正常工做秩序的標記化期間保留。此屬性所表示元素的內容中的通配符字符的字符偏移的量 (SQL 函數長度相同的語義)。Oracle 文本將調整這些元素的內容進行任何正常化的偏移量。偏移量所指向的字符必需要麼是 %或 _ 字符。 在元素的內容中的第一個字符的偏移量爲 0。偏移的信息遵循 USC 2 代碼點語義。 若是令牌中不包含任何通配符字符必須不指定此屬性。 |
使用WORLD_LEXER
對包含不一樣語言的文檔的索引文本列。例如,可使用此詞法分析器將英語、 日語和德語文檔存儲的文本列進行索引。
WORLD_LEXER
不一樣於MULTI_LEXER
, WORLD_LEXER
將自動檢測文檔的語言。不像MULTI_LEXER
, WORLD_LEXER
不須要您有一個語言列在基礎表中或指定的語言列,當您建立索引時。此外,它是沒必要要使用 sub-詞法分析器與MULTI_LEXER
同樣。(請參見MULTI_LEXER.)
Lexer 沒有屬性。
WORLD_LEXER
工程與語言的字符集的 Unicode 4.0 標準所定義。WORLD_LEXER
可使用的語言的列表,請參閱"世界詞法分析器功能".
使用的單詞表首選項以啓用查詢選項例如詞幹分析,模糊匹配爲您的語言。您還可使用單詞表偏好來啓用子字符串和前綴索引,從而提升了通配符查詢CONTAINS
與CATSEARCH
的性能.
若要建立單詞表首選項,必須使用BASIC_WORDLIST
,這是惟一可用的類型。
使用BASIC_WORDLIST
類型來啓用詞幹和模糊匹配或者建立前綴索引,與文本索引。
請參見:
有關乾和模糊算子的詳細信息,請參閱第 3 章,"Oracle 文本包含查詢運算符".BASIC_WORDLIST
具備下列屬性:
指定用於在文本查詢中的單詞詞幹的詞幹分析器。當您不指定一個值爲詞幹分析器時,默認爲ENGLISH
.
指定AUTO
系統來自動設置的詞幹的語言,根據會話的語言設置。沒有語言的詞幹分析器時,默認值爲NULL
。與NULL
的詞幹分析器,幹操做員在查詢中將被忽略。
您能夠建立您本身詞幹的用戶詞典。更多的信息,請參閱"阻止用戶詞典" 。
S指定哪些模糊匹配例程用於列。模糊匹配目前支持英語,日語,以及在較小的程度上,西方的歐洲語言。
注:
漢語和韓語的fuzzy_match屬性值是防止的英語和日語的模糊匹配例程使用在中文和朝鮮文的虛擬屬性值。Fuzzy_match的默認值是GENERIC
.
指定AUTO
系統來自動設置模糊匹配的語言根據會話的語言設置。
指定默認下限的模糊評分。請指定一個介於 0 和 80。分數低於這個數字的文本不會返回。默認值爲 60。
模糊積分是衡量查詢詞擴展的詞是多麼接近。分數越高越好這場比賽。使用此參數來限制模糊擴產到最好的比賽。
指定模糊擴產的最大數目。使用 0 到 5000 之間的數字。默認值爲 100。
設置模糊的擴張限制擴展到指定數目的最匹配的單詞。
指定TRUE
爲 Oracle 文原本建立一個子字符串的索引。子字符串索引能夠提升性能爲左截斷或雙截斷通配符查詢 (如%ing ) 或%奔馳 %。默認值爲 false。
子字符串索引索引和磁盤資源具備下列影響:
建立索引和 DML 處理是慢達 4 倍
建立的子字符串索引的大小是大約 $X 指數對 word 表格的大小。
與substring_index
啓用索引建立須要更多的回滾段比與子字符串索引的索引刷新期間關閉。Oracle 建議您下列操做之一時建立的子字符串的索引:
使可用雙日常的回滾或
減小索引內存來減少索引刷新到磁盤
指定yes
以啓用前綴索引。前綴索引能夠提升性能爲右截斷的通配符搜索如收件人 %。默認值爲NO
.
注:
啓用前綴索引增長索引的大小。到多個前綴,在 $I 表中存儲的前綴索引排骨了令牌。例如,單詞TOKEN
和TOY
一般是編入索引,這樣 $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) 行。
指定索引的前綴的最小長度。默認值爲 1。
例如,設置prefix_length_min
3 和prefix_length_max
對 5 項指標爲 3 到 5 個字符長之間的全部前綴。
注:
使用慢的方法的等價性擴張和合並搜索通配符搜索其模式是最小長度下方或上方的最大長度。指定索引的前綴的最大長度。默認值爲 64。
例如,設置prefix_length_min
3 和prefix_length_max
對 5 項指標爲 3 到 5 個字符長之間的全部前綴。
注:
使用慢的方法的等價性擴張和合並搜索通配符搜索其模式是最小長度下方或上方的最大長度。在通配符 (%) 擴展中指定條件的最大數目。使用此參數能夠保持在可接受的限度內的通配符查詢性能。Oracle 文本返回一個錯誤,當通配符查詢擴展超過這個數字。
下面的示例演示使用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
的單個存儲類型:
BASIC_STORAGE
類型指定數據庫表和構成文本索引的索引的表空間和建立參數。
您指定的子句添加到索引建立在內部CREATE
TABLE
(CREATE
INDEX
爲i_index _clause) 的語句。您能夠指定最容許的條款,例如存儲、 LOB 存儲或分區。可是,您不能指定索引組織的表子句。
請參見:
有關如何指定CREATE
TABLE
和CREATE
INDEX
的語句的詳細信息,請參閱Oracle 數據庫 SQL 引用。
BASIC_STORAGE
具備下列屬性:
默認狀況下,不設置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程序:
本示例顯示 HTML 和 XML 文檔中的節組的使用。
下面的語句建立使用 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 包"下面的語句建立稱爲xmlgroup
與XML_SECTION_GROUP
組類型的節組。
begin ctx_ddl.create_section_group('xmlgroup', 'XML_SECTION_GROUP'); end;
您能夠選擇添加節到此組在 CTX_DDL
包中,如CTX_DDL.ADD_ATTR_SECTION
或CTX_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 包"本節介紹用於建立 CTX_CLS 首選的分類類型。火車和 CTXRULE 建立索引。支持如下兩個分類器類型:
使用 RULE_CLASSIFIER 類型建立生成的過程當中,CTX_CLS 的查詢規則的首選。火車和 CTXRULE 創做。將生成帶有這種類型的規則實質上是查詢字符串和能夠容易地審查。此分類器所產生的查詢可使用與,不,或有關運算符。查詢字段路段僅支持範圍運算符。
這種類型具備下列屬性:
屬性 | 數據類型 | 默認 | 最小值 | 最大值 | 描述 |
---|---|---|---|---|---|
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 類型建立規則生成的過程當中,CTX_CLS 的首選項。火車,和 CTXRULE 創做。這種分類器類型表示分類的支持向量機方法,並以二進制格式生成規則。當你須要分類精度高,可以使用此分類器類型。
這種類型具備下列屬性:
屬性名稱 | 數據類型 | 默認 | 最小值 | 最大值 | 描述 |
---|---|---|---|---|---|
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 文本應用程序開發人員指南此聚類的類型具備下列屬性:
屬性名稱 | 數據類型 | 默認 | 最小值 | 最大值 | 描述 |
---|---|---|---|---|---|
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 識別的文字在你的語言,不能被索引。在英語中,您還能夠標識 stopthemes 不能被索引。默認狀況下,該系統索引使用由系統提供的非索引,該字表對應於您的數據庫語言的文本。
Oracle 文本爲最經常使用的語言,包括英語、 法語、 德語、 西班牙語、 中文、 荷蘭人和丹麥提供默認 stoplists。這些默認的 stoplists 包含只有字。
請參見:
關於提供的默認 stoplists 的詳細信息,請參閱附錄 E,"甲骨文文本提供 Stoplists".您能夠建立多語言 stoplists 持有特定於語言的字。當您使用MULTI_LEXER
來索引包含在不一樣的語言如英語、 德語和日語文檔的表,多語言的非索引字表頗有用。
若要建立多語言非索引字表,請使用 CTX_DLL。CREATE_STOPLIST程序和指定的MULTI_STOPLIST
的非索引字表類型。您添加的語言特定字與 CTX_DDL。ADD_STOPWORD.
在索引的時間,每一個文檔的語言列進行檢查,而且只用於該語言字被淘汰。在查詢時,會話語言設置肯定積極的字,像它肯定的積極的詞法分析器時使用多的詞法分析器。
您能夠建立您本身的 stoplists 使用 CTX_DLL。CREATE_STOPLIST程序。您可使用此過程建立BASIC_STOPLIST
爲單一語言非索引字表,或者您能夠建立多語言非索引字表爲 MULTI_STOPLIST
。
當您建立您本身的非索引字表時,則必須指定在CREATE
INDEX
的參數子句中.
默認非索引字表老是被命名爲CTXSYS。DEFAULT_STOPLIST。可使用如下過程來修改此非索引字表:
CTX_DDL。ADD_STOPWORD
CTX_DDL。REMOVE_STOPWORD
CTX_DDL。ADD_STOPTHEME
CTX_DDL。ADD_STOPCLASS
當您修改CTXSYS.DEFAULT_STOPLIST
與CTX_DDL
軟件包,您必須從新建立索引以使更改生效。
您能夠向默認值或自定義的非索引字表具備ALTER INDEX中動態地添加字。當您動態地添加 stopword 時,你須要不從新編制索引,由於這個詞當即成爲 stopword,從索引中刪除。
注:
即便您能夠動態添加索引的字,不能動態刪除字。若要刪除 stopword,您必須使用 CTX_DDL。REMOVE_STOPWORD,除去你的索引並從新建立它。當您安裝 Oracle 文本時,建立一些索引的偏好。能夠在建立索引的參數子句中使用這些首選項,也能夠定義你本身。
默認索引參數映射到一些這一節中描述的系統定義首選項。
請參見:
有關默認索引參數的詳細信息,請參閱"默認索引參數" .系統定義的首選項分爲如下類別:
本節討論與詞法分析器首選項關聯的類型。
默認的 lexer 取決於在安裝時所使用的語言。如下各節描述了CTXSYS.DEFAULT_LEXER
爲每種語言。
若是你的語言是德語,這種偏好使用BASIC_LEXER與啓用下列選項:
區分大小寫的索引 (mixed_case
屬性啓用)
複合索引 (composite
的屬性設置爲GERMAN
)
替換拼寫 (alternate_spelling
屬性設置爲GERMAN
)
若是你的語言是芬蘭語、 挪威語或瑞典語,這種偏好使用BASIC_LEXER與啓用瞭如下選項:
替換拼寫 (alternate_spelling 屬性設置爲SWEDISH
)
本節討論與非索引字表首選項關聯的類型。
此非索引字表首選項默認爲您的數據庫語言的非索引字表。
請參見:
停用詞中提供的 stoplists 的完整列表,請參閱附錄 E,"甲骨文文本提供 Stoplists".本節介紹了 Oracle 文本系統參數。他們分爲如下類別:
當您安裝 Oracle 文本以外的系統定義的首選項時,如下系統參數設置:
系統參數 | 描述 |
---|---|
MAX_INDEX_MEMORY |
這是能夠在INDEX 的CREATE 和ALTER INDEX 參數子句中指定的最大索引內存. |
DEFAULT_INDEX_MEMORY |
這是默認的索引CREATE INDEX 和ALTER INDEX 所用的內存. |
LOG_DIRECTORY |
這是CTX_OUTPUT 日誌文件的目錄。 |
CTX_DOC_KEY_TYPE |
這是默認輸入密鑰類型,或ROWID 或PRIMARY_KEY , CTX_DOC 程序。在安裝時設置爲ROWID 。 請參見: CTX_DOC. SET_KEY_TYPE. |
您能夠經過查詢CTX_PARAMETERS視圖查看系統默認值。您能夠更改使用的 CTX_ADM.SET_PARAMETER程序的默認值。
本節描述在建立上下文和 ctxcat 的索引時,您可使用索引參數。
當您建立一個上下文索引時不指定首選項參數子句中建立索引時使用如下默認參數。每一個默認參數命名系統定義的偏好,以用於數據存儲、 過濾、 詞法分析,等等。
參數 | 時使用 | 默認值 |
---|---|---|
DEFAULT_DATASTORE |
沒有指定參數子句中CREATE INDEX 的數據存儲首選項. |
CTXSYS。DEFAULT_DATASTORE |
DEFAULT_FILTER_FILE |
沒有指定參數子句CREATE INDEX ,和知足下列條件之一的濾清器首選項是如此:
|
CTXSYS。AUTO_FILTER |
DEFAULT_FILTER_BINARY |
沒有在CREATE INDEX 和 Oracle 文本參數子句中指定的篩選器偏好檢測文本列數據類型是RAW ,LONG RAW 或BLOB . |
CTXSYS。AUTO_FILTER |
DEFAULT_FILTER_TEXT |
沒有在CREATE INDEX 和 Oracle 文本參數子句中指定的篩選器偏好檢測文本列數據類型是要麼LONG 、 VARCHAR2 、 VARCHAR ,CHAR ,或CLOB . |
CTXSYS。NULL_FILTER |
DEFAULT_SECTION_HTML |
無節組CREATE INDEX ,並知足下列條件之一時的參數子句中指定 true:
|
CTXSYS。HTML_SECTION_GROUP |
DEFAULT_SECTION_TEXT |
沒有CREATE INDEX ,和當你作時的參數子句中指定的節組不使用URL_DATASTORE 或AUTO_FILTER . |
CTXSYS。NULL_SECTION_GROUP |
DEFAULT_STORAGE |
沒有指定參數子句中CREATE INDEX 的存儲首選項. |
CTXSYS。DEFAULT_STORAGE |
DEFAULT_LEXER |
沒有指定參數子句中CREATE INDEX 的 lexer 首選項. |
CTXSYS。DEFAULT_LEXER |
DEFAULT_STOPLIST |
在CREATE INDEX 參數子句中指定的任何非索引字表. |
CTXSYS。DEFAULT_STOPLIST |
DEFAULT_WORDLIST |
在CREATE INDEX 參數子句中指定沒有單詞表偏好. |
CTXSYS。DEFAULT_WORDLIST |
與建立索引建立一個 CTXCAT 索引和參數字符串中未指定任何參數時,就會使用下面的默認參數。CTXCAT 索引支持僅索引集、 詞法分析器、 存儲、 非索引字表和單詞表參數。每一個默認參數命名系統定義的首選項。
參數 | 時使用 | 默認值 |
---|---|---|
DEFAULT_CTXCAT_INDEX_SET |
設置指定的INDEX 的CREATE 參數子句中沒有索引. |
|
DEFAULT_CTXCAT_STORAGE |
沒有指定參數子句中CREATE INDEX 的存儲首選項. |
CTXSYS。DEFAULT_STORAGE |
DEFAULT_CTXCAT_LEXER |
沒有指定參數子句中CREATE INDEX 的 lexer 首選項. |
CTXSYS。DEFAULT_LEXER |
DEFAULT_CTXCAT_STOPLIST |
在CREATE INDEX 參數子句中指定的任何非索引字表. |
CTXSYS。DEFAULT_STOPLIST |
DEFAULT_CTXCAT_WORDLIST |
在CREATE INDEX 參數子句中指定沒有單詞表偏好. 請注意雖然您能夠指定 |
CTXSYS。DEFAULT_WORDLIST |
當你建立CTXRULE
索引CREATE
INDEX
並在參數字符串中未指定任何參數,就會使用如下的默認參數。CTXRULE
索引支持的 lexer、 存儲、 非索引字表和單詞表參數。每一個默認參數命名系統定義的首選項。
參數 | 時使用 | 默認值 |
---|---|---|
DEFAULT_CTXRULE_LEXER | 沒有指定參數子句中CREATE INDEX 的 lexer 首選項. |
CTXSYS。DEFAULT_LEXER |
DEFAULT_CTXRULE_STORAGE | 沒有指定參數子句中CREATE INDEX 的存儲首選項. |
CTXSYS。DEFAULT_STORAGE |
DEFAULT_CTXRULE_STOPLIST | 在CREATE INDEX 參數子句中指定的任何非索引字表. |
CTXSYS。DEFAULT_STOPLIST |
DEFAULT_CTXRULE_WORDLIST | 在CREATE INDEX 參數子句中指定沒有單詞表偏好. |
CTXSYS.DEFAULT_WORDLIST |
DEFAULT_CLASSIFIER | No classifier preference is specified in parameter clause. | RULE_CLASSIFIER |
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;
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.