oracle全文索引之datastore_2_MULTI_COLUMN_DATASTORE
如果被索引的文章是儲存在資料庫中,但是內容分佈在多個列中,那麼可以透過建立一個MULTI_COLUMN_DATASTORE來索引完整的文章:
SQL> CREATE TABLE T (ID NUMBER, DOC1 VARCHAR2(4000), DOC2 VARCHAR2(4000), DOC3 VARCHAR2(4000));
表已建立。
SQL> INSERT INTO T VALUES (1,
2 'The first paragraph of article in doc1.',
3 'The second partments is the doc2.',
4 'The last content is in the doc3.');
已建立 1 行。
SQL> INSERT INTO T VALUES (2,
2 'This example create a multi-column datastore preference',
3 'called test_multicol on three text columns',
4 'to be concatenated and indexed.');
已建立 1 行。
SQL> COMMIT;
提交完成。
下面建立索引,由於需要建立一個多列儲存的全文索引,需要將多個列的列名作為引數傳給Oracle。這個過程透過建立一個PREFERENCE,並設定屬性來完成。
注意,下面的程式碼需要由CTXSYS使用者執行,這點是文件上沒有明確說明的。
SQL> CONN CTXSYS/CTXSYS@YANGTK
已連線。
SQL> BEGIN
2 CTX_DDL.CREATE_PREFERENCE('TEST_MULTICOL', 'MULTI_COLUMN_DATASTORE');
3 CTX_DDL.SET_ATTRIBUTE('TEST_MULTICOL', 'COLUMNS', 'DOC1, DOC2, DOC3');
4 END;
5 /
PL/SQL 過程已成功完成。
下面在建立索引的時候指定DATASTORE引數為新建的TEST_MULTICOL引數:
SQL> CONN YANGTK/YANGTK@YANGTK
已連線。
SQL> CREATE INDEX IND_T_DOCS ON T (DOC1) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE CTXSYS.TEST_MULTICOL');
索引已建立。
SQL> SELECT * FROM T WHERE CONTAINS(DOC1, 'CONTENT') > 0;
ID
----------
DOC1
---------------------------------------------------------------------------
DOC2
---------------------------------------------------------------------------
DOC3
---------------------------------------------------------------------------
1
The first paragraph of article in doc1.
The second partments is the doc2.
The last content is in the doc3.
透過查詢的結果可以發現,這個多列的全文索引已經生效。
SQL> SELECT * FROM T WHERE CONTAINS(DOC2, 'CONTENT') > 0;
SELECT * FROM T WHERE CONTAINS(DOC2, 'CONTENT') > 0
*
ERROR 位於第 1 行:
ORA-20000: Oracle Text error:
DRG-10599: 列沒有編制索引
SQL> CREATE INDEX IND_T_DOCS2 ON T (DOC2) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE CTXSYS.TEST_MULTICOL');
索引已建立。
SQL> SELECT * FROM T WHERE CONTAINS(DOC2, 'CONTENT') > 0;
ID
----------
DOC1
----------------------------------------------------------------------------
DOC2
----------------------------------------------------------------------------
DOC3
----------------------------------------------------------------------------
1
The first paragraph of article in doc1.
The second partments is the doc2.
The last content is in the doc3.
透過上面的例子可以看出,對於多列的全文索引可以建立在多個列的任意一列上,但是,在查詢時指定的列必須與索引時指定的列保持一致。
最後注意一點,只有索引指定的列發生修改,Oracle才會認為被索引資料發生了變化,僅僅修改其他列而沒有修改索引列,即使同步索引也不會將修改同步到索引中。
SQL> DROP INDEX IND_T_DOCS2;
索引已丟棄。
SQL> SELECT * FROM CTX_USER_PENDING;
未選定行
SQL> UPDATE T SET COL3 = NULL WHERE ID = 1;
UPDATE T SET COL3 = NULL WHERE ID = 1
*
ERROR 位於第 1 行:
ORA-00904: "COL3": 無效的識別符號
SQL> UPDATE T SET DOC3 = NULL WHERE ID = 1;
已更新 1 行。
SQL> SELECT * FROM CTX_USER_PENDING;
未選定行
SQL> UPDATE T SET DOC1 = NULL WHERE ID = 1;
已更新 1 行。
SQL> SELECT * FROM CTX_USER_PENDING;
PND_INDEX_NAME PND_PARTITION_NAME PND_ROWID PND_TIMEST
-------------------------- ------------------ ------------------ ----------
IND_T_DOCS AAAJXiAAMAAAAAGAAA 25-7月 -06
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/271283/viewspace-1022074/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle全文索引之STORAGE PREFERENCEOracle索引
- oracle全文索引之WORDLIST PREFERENCEOracle索引
- oracle全文索引之幾個關鍵表Oracle索引
- oracle全文索引之commit與DML操作Oracle索引MIT
- oracle全文索引之如何實現查詢Oracle索引
- oracle全文索引之STOPLIST_4_MULTI_STOPLISTOracle索引
- oracle全文索引之STOPLIST_3_DEFAULT_STOPLISTOracle索引
- oracle全文索引之STOPLIST_2_EMPTY_STOPLISTOracle索引
- oracle全文索引之STOPLIST_1_BASIC_STOPLISTOracle索引
- oracle全文索引之LEXER_4_MULTI_LEXEROracle索引
- oracle全文索引之LEXER_3_DEFAULT_LEXEROracle索引
- oracle全文索引之LEXER_2_CHINESE_LEXEROracle索引
- oracle全文索引之LEXER_1_BASIC_LEXEROracle索引
- oracle全文索引之FILTER_4_PROCEDURE_FILTEROracle索引Filter
- oracle全文索引之FILTER_3_FORMAT_COLUMNOracle索引FilterORM
- oracle全文索引之FILTER_1_NULL_FILTEROracle索引FilterNull
- oracle全文索引之datastore_6_NESTED_DATASTOREOracle索引AST
- oracle全文索引之datastore_5_detail_datastoreOracle索引ASTAI
- oracle全文索引之datastore_4_URL_DATASTOREOracle索引AST
- oracle全文索引之datastore_3_FILE_DATASTOREOracle索引AST
- oracle全文索引之datastore_1_DIRECT_DATASTOREOracle索引AST
- Oracle:全文索引Oracle索引
- oracle全文索引之配置全文檢索環境Oracle索引
- oracle 之全文索引表的分割槽交換案例Oracle索引
- oracle全文索引之About_INDEX_THEMES操作Oracle索引Index
- oracle全文索引之STOPLIST_ CTXCAT 索引_INDEX SETOracle索引Index
- Oracle的全文索引Oracle索引
- ZT oracle全文索引Oracle索引
- oracle全文索引之SECTION GROUP_6_PATH_SECTION_GROUPOracle索引
- oracle全文索引之SECTION GROUP_5_AUTO_SECTION_GROUPOracle索引
- oracle全文索引之SECTION GROUP_4_XML_SECTION_GROUPOracle索引XML
- oracle全文索引之SECTION GROUP_3_HTML_SECTION_GROUPOracle索引HTML
- oracle全文索引之SECTION GROUP_2_BASIC_SECTION_GROUPOracle索引
- oracle全文索引之SECTION GROUP_1_NULL_SECTION_GROUPOracle索引Null
- oracle全文索引之FILTER_2_INSO_FILTEROracle索引Filter
- oracle 全文索引的配置Oracle索引
- MongoDB之索引(全文索引)MongoDB索引
- oracle全文索引之同步和優化索引做了什麼Oracle索引優化