oracle全文索引之FILTER_2_INSO_FILTER
這篇文章繼續介紹全文索引的FILTER屬性,介紹Oracle的INSO_FILTER屬性。[@more@]
Oracle的全文索引除了可以支援文字檔案外,還可以支援多種文件格式,對於這些文件格式,在建立索引的時候需要指定INSO_FILTER引數,使用這個過濾引數,Oracle的全文索引可以識別絕大部分的常見文件,比如:word、pdf等。
下面看一個索引文件的例子:
SQL> conn myuser/myuser
Connected.
SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));
Table created.
SQL> INSERT INTO T VALUES (1, 'pdf.pdf');
1 row created.
SQL> INSERT INTO T VALUES (2, 'doc1.doc');
1 row created.
SQL> commit;
Commit complete.
SQL> begin
2 CTX_DDL.CREATE_PREFERENCE('TEST_FILE', 'FILE_DATASTORE');
3 CTX_DDL.SET_ATTRIBUTE('TEST_FILE', 'PATH', '/home/oracle');
4 END;
5 /
PL/SQL procedure successfully completed.
SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE TEST_FILE FILTER CTXSYS.INSO_FILTER');
Index created.
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'ORACLE') > 0;
ID
----------
DOCS
--------------------------------------------------------------------------------
1
pdf.pdf
2
doc1.doc
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'sina.com')>0;
ID
----------
DOCS
--------------------------------------------------------------------------------
1
pdf.pdf
下面試試如果修改文件的內容,是否還能查詢得到?
先在doc1.doc中新入一行"ericlu"字元。
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'ericlu')>0;
no rows selected
SQL> exec CTX_DDL.SYNC_INDEX('IND_T_DOCS');
PL/SQL procedure successfully completed.
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'ericlu')>0;
no rows selected
同步過索引依然找不到
SQL> drop index IND_T_DOCS;
Index dropped.
SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE TEST_FILE FILTER CTXSYS.INSO_FILTER');
Index created.
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'ericlu')>0;
ID
----------
DOCS
--------------------------------------------------------------------------------
2
doc1.doc
重建後可以找到,下面試了rebuild也可以的。
先在doc1.doc中加入"my cups"字元。
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'my cups')>0;
no rows selected
SQL> alter index IND_T_DOCS rebuild;
Index altered.
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'my cups')>0;
ID
----------
DOCS
--------------------------------------------------------------------------------
2
doc1.doc
FILTER的預設值並不是一成不變的,這個預設值會受索引欄位型別和DATASTORE的型別的影響。在上一篇文章中
的測試中,對於儲存在資料庫中的VARCHAR2、CHAR和CLOB欄位中的資料,Oracle自動選擇了NULL_FILTEL。在這
裡DATASTORE的屬性為FILE_DATASTORE,則Oracle會預設選擇 INSO_FILTER作為預設值。
SQL> DROP INDEX IND_T_DOCS;
Index dropped.
SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE TEST_FILE FILTER CTXSYS.INSO_FILTER');
Index created.
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'ORACLE') > 0;
ID
----------
DOCS
--------------------------------------------------------------------------------
1
pdf.pdf
2
doc1.doc
SQL> DROP INDEX IND_T_DOCS;
Index dropped.
SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE TEST_FILE');
Index created.
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'ORACLE') > 0;
ID
----------
DOCS
--------------------------------------------------------------------------------
1
pdf.pdf
2
doc1.doc
可以發現默當DATASTORE的屬性為FILE_DATASTORE,Oracle會選擇 INSO_FILTER作為預設值。
Oracle的全文索引除了可以支援文字檔案外,還可以支援多種文件格式,對於這些文件格式,在建立索引的時候需要指定INSO_FILTER引數,使用這個過濾引數,Oracle的全文索引可以識別絕大部分的常見文件,比如:word、pdf等。
下面看一個索引文件的例子:
SQL> conn myuser/myuser
Connected.
SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));
Table created.
SQL> INSERT INTO T VALUES (1, 'pdf.pdf');
1 row created.
SQL> INSERT INTO T VALUES (2, 'doc1.doc');
1 row created.
SQL> commit;
Commit complete.
SQL> begin
2 CTX_DDL.CREATE_PREFERENCE('TEST_FILE', 'FILE_DATASTORE');
3 CTX_DDL.SET_ATTRIBUTE('TEST_FILE', 'PATH', '/home/oracle');
4 END;
5 /
PL/SQL procedure successfully completed.
SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE TEST_FILE FILTER CTXSYS.INSO_FILTER');
Index created.
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'ORACLE') > 0;
ID
----------
DOCS
--------------------------------------------------------------------------------
1
pdf.pdf
2
doc1.doc
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'sina.com')>0;
ID
----------
DOCS
--------------------------------------------------------------------------------
1
pdf.pdf
下面試試如果修改文件的內容,是否還能查詢得到?
先在doc1.doc中新入一行"ericlu"字元。
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'ericlu')>0;
no rows selected
SQL> exec CTX_DDL.SYNC_INDEX('IND_T_DOCS');
PL/SQL procedure successfully completed.
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'ericlu')>0;
no rows selected
同步過索引依然找不到
SQL> drop index IND_T_DOCS;
Index dropped.
SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE TEST_FILE FILTER CTXSYS.INSO_FILTER');
Index created.
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'ericlu')>0;
ID
----------
DOCS
--------------------------------------------------------------------------------
2
doc1.doc
重建後可以找到,下面試了rebuild也可以的。
先在doc1.doc中加入"my cups"字元。
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'my cups')>0;
no rows selected
SQL> alter index IND_T_DOCS rebuild;
Index altered.
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'my cups')>0;
ID
----------
DOCS
--------------------------------------------------------------------------------
2
doc1.doc
FILTER的預設值並不是一成不變的,這個預設值會受索引欄位型別和DATASTORE的型別的影響。在上一篇文章中
的測試中,對於儲存在資料庫中的VARCHAR2、CHAR和CLOB欄位中的資料,Oracle自動選擇了NULL_FILTEL。在這
裡DATASTORE的屬性為FILE_DATASTORE,則Oracle會預設選擇 INSO_FILTER作為預設值。
SQL> DROP INDEX IND_T_DOCS;
Index dropped.
SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE TEST_FILE FILTER CTXSYS.INSO_FILTER');
Index created.
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'ORACLE') > 0;
ID
----------
DOCS
--------------------------------------------------------------------------------
1
pdf.pdf
2
doc1.doc
SQL> DROP INDEX IND_T_DOCS;
Index dropped.
SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE TEST_FILE');
Index created.
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'ORACLE') > 0;
ID
----------
DOCS
--------------------------------------------------------------------------------
1
pdf.pdf
2
doc1.doc
可以發現默當DATASTORE的屬性為FILE_DATASTORE,Oracle會選擇 INSO_FILTER作為預設值。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/271283/viewspace-1022211/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle全文索引之commit與DML操作Oracle索引MIT
- Oracle:全文索引Oracle索引
- oracle全文索引之幾個關鍵表Oracle索引
- oracle全文索引之如何實現查詢Oracle索引
- Oracle的全文索引Oracle索引
- oracle全文索引之配置全文檢索環境Oracle索引
- oracle全文索引之同步和優化索引做了什麼Oracle索引優化
- MySQL索引系列:全文索引MySql索引
- MySQL全文索引的使用MySql索引
- MySQL全文索引原始碼剖析之Insert語句執行過程MySql索引原始碼
- mysql中文全文索引的記錄MySql索引
- 【SqlServer】管理全文索引(FULL TEXT INDEX)SQLServer索引Index
- ORACLE基礎之oracle鎖(oracle lock mode)詳解Oracle
- Oracle之結構Oracle
- 達夢資料庫全文索引簡介資料庫索引
- 【TUNE_ORACLE】Oracle Hint之概念與用法Oracle
- oracle之 如何 dump logfileOracle
- oracle之 反向鍵索引Oracle索引
- LightDB/postgresql內建特性之訪問oracle之oracle_fdw介紹SQLOracle
- Oracle調優之看懂Oracle執行計劃Oracle
- mysql百萬級全文索引及match快速查詢MySql索引
- 揭秘ORACLE備份之----RMAN之五(CATALOG)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(五)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(四)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(三)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(二)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(一)Oracle
- Oracle之Hint使用總結Oracle
- ORACLE DG之備庫角色Oracle
- Oracle之11g DataGuardOracle
- oracle之 11.2.0.4 bbed安裝Oracle
- oracle之 AWR固定基線Oracle
- ORACLE監控之OSW部署Oracle
- SQL Server 全文搜尋功能、全文索引方式介紹SQLServer索引
- 深度解析 Lucene 輕量級全文索引實現原理索引
- 為什麼ElasticSearch比MySQL更適合全文索引ElasticsearchMySql索引
- Oracle redo解析之-1、oracle redo log結構計算Oracle Redo
- MySQL 為什麼全文索引查中文找不結果MySql索引
- Oracle 備份恢復之 FlashbackOracle