oracle全文索引之LEXER_1_BASIC_LEXER

jolly10發表於2009-05-18

介紹完Oracle全文索引的FILTER屬性,繼續介紹Oracle的LEXER屬性。

Oracle全文索引的LEXER屬性用於處理各種不同的語言。最基本的英文使用BASE_FILTER,而如果需要使用中文則可以使用CHINESE_VGRAM_LEXER或CHINESE_LEXER。[@more@]這篇文章簡單說明BASIC_LEXER屬性。BASIC_LEXER屬性支援多種語言,比如英語、德語、荷蘭語、挪威語、瑞典語等等。

BASIC_LEXER除了支援多種語言,還可以設定多種屬性。比如這個例子中介紹的索引的大小寫設定:

SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));

表已建立。

SQL> INSERT INTO T VALUES (1, 'This is a example for the basic lexer');

已建立 1 行。

SQL> INSERT INTO T VALUES (2, 'And we make a example for a mixed spell indexs.');

已建立 1 行。

SQL> INSERT INTO T VALUES (3, 'So the word in UPPER format must be query in UPPER');

已建立 1 行。

SQL> INSERT INTO T VALUES (4, 'And Mixed Spell Word must be Query in Mixed.');

已建立 1 行。

SQL> COMMIT;

提交完成。

SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('LEXER CTXSYS.BASIC_LEXER');

索引已建立。

SQL> SELECT ID FROM T WHERE CONTAINS(DOCS, 'MIXED') > 0;

ID
----------
4
2

SQL> DROP INDEX IND_T_DOCS;

索引已丟棄。

SQL> CONN CTXSYS/CTXSYS@YANGTK
已連線。
SQL> BEGIN
2 CTX_DDL.CREATE_PREFERENCE('TEST_BASIC_LEXER', 'BASIC_LEXER');
3 CTX_DDL.SET_ATTRIBUTE('TEST_BASIC_LEXER', 'MIXED_CASE', 'YES');
4 END;
5 /

PL/SQL 過程已成功完成。

SQL> CONN YANGTK/YANGTK@YANGTK
已連線。
SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('LEXER CTXSYS.TEST_BASIC_LEXER');

索引已建立。

SQL> SELECT ID FROM T WHERE CONTAINS(DOCS, 'MIXED') > 0;

未選定行

SQL> SELECT ID FROM T WHERE CONTAINS(DOCS, 'Mixed') > 0;

ID
----------
4

如果不進行設定,Oracle在建立索引時會將所有的字母變為大寫。如果進行了設定,可以使索引區分大小寫

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

相關文章