关闭

ORACLE TEXT LEXER PREFERENCE(四)

标签: oraclesqlinsertparameters文档测试
717人阅读 评论(0) 收藏 举报
分类:

本文继续介绍Oracle全文索引的LEXER属性,这篇文章介绍Oracle多语言全文索引DEFAULT_LEXER


其实这篇文章应该放在LEXER属性的开头部分,不过我的测试一直和Oracle文档上的描述不符,所以一直没有写这篇文章,今天找了个环境又测试了一下,基本上可以推出肯定的答案,因此,这才补上这篇。

要是DEFAULT_LEXER其实并不复杂,但是确实最常使用的,无论是明确给出DEFAULT_LEXER属性还是不指定LEXER属性,Oracle都会使用DEFAULT_LEXER作为LEXER的默认属性。

但是DEFAULT_LEXER并不是一个真正意义上的LEXEROracle9i的文档上描述的是,如果数据库在建立的时候指定的是中文则DEFAULT_LEXERCHINESE_VGRAM_LEXER,如果是英文,则DEFAULT_LEXERBASIC_LEXER

但是我在很多Oracle9i的环境下进行测试,发现无论按照时指定中文还是英文,DEFAULT_LEXER的值都是BASIC_LEXER

SQL> CONN SYSTEM/MANAGER@DEMO2已连接。
SQL> SELECT NAME, VALUE$ FROM SYS.PROPS$ WHERE NAME = 'NLS_LANGUAGE';

NAME VALUE$
---------------------------------------- --------------------
NLS_LANGUAGE SIMPLIFIED CHINESE

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

表已创建。

SQL> INSERT INTO T VALUES (1, '一个中文例子,测试默认的语法属性是否可以正常识别中文。');

已创建 1 行。

SQL> INSERT INTO T VALUES (2, '根据Oracle的文档,数据库的默认语言是中文会采用CHINA_VGRAM_LEXER');

已创建 1 行。

SQL> COMMIT;

提交完成。

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

索引已创建。

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '中文') > 0;

未选定行

SQL> SELECT PRE_NAME, PRE_OBJECT FROM CTX_PREFERENCES WHERE PRE_NAME = 'DEFAULT_LEXER';

PRE_NAME PRE_OBJECT
------------------------------ ------------------------------
DEFAULT_LEXER BASIC_LEXER

SQL> SELECT * FROM V$VERSION;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production

看来Oracle的文档在这里的描述有问题,或者Oracle的实现上和文档不一致。

但是测试发现Oracle10.2.0中,如果按照的时候选择了中文,则DEFAULT_LEXER属性的值为CHINESE_VGRAM_LEXER

SQL> CONN YANGTK/YANGTK@YTK已连接。
SQL> SELECT NAME, VALUE$ FROM SYS.PROPS$ WHERE NAME = 'NLS_LANGUAGE';

NAME VALUE$
---------------------------------------- --------------------
NLS_LANGUAGE SIMPLIFIED CHINESE

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

表已创建。

SQL> INSERT INTO T VALUES (1, '一个中文例子,测试默认的语法属性是否可以正常识别中文。');

已创建 1 行。

SQL> INSERT INTO T VALUES (2, '根据Oracle的文档,数据库的默认语言是中文会采用CHINA_VGRAM_LEXER');

已创建 1 行。

SQL> COMMIT;

提交完成。

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

索引已创建。

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '中文') > 0;

ID DOCS
---------- ------------------------------------------------------------------
一个中文例子,测试默认的语法属性是否可以正常识别中文。
根据Oracle的文档,数据库的默认语言是中文会采用CHINA_VGRAM_LEXER

SQL> SELECT PRE_NAME, PRE_OBJECT FROM CTX_PREFERENCES WHERE PRE_NAME = 'DEFAULT_LEXER';

PRE_NAME PRE_OBJECT
------------------------------ ------------------------------
DEFAULT_LEXER CHINESE_VGRAM_LEXER

SQL> SELECT * FROM V$VERSION;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2098099次
    • 积分:19357
    • 等级:
    • 排名:第437名
    • 原创:157篇
    • 转载:624篇
    • 译文:1篇
    • 评论:43条
    最新评论