ORACLE TEXT LEXER PREFERENCE(四)
来源:互联网 发布:武汉学编程多久 编辑:程序博客网 时间:2024/05/20 13:15
本文继续介绍Oracle全文索引的LEXER属性,这篇文章介绍Oracle多语言全文索引DEFAULT_LEXER。
其实这篇文章应该放在LEXER属性的开头部分,不过我的测试一直和Oracle文档上的描述不符,所以一直没有写这篇文章,今天找了个环境又测试了一下,基本上可以推出肯定的答案,因此,这才补上这篇。
要是DEFAULT_LEXER其实并不复杂,但是确实最常使用的,无论是明确给出DEFAULT_LEXER属性还是不指定LEXER属性,Oracle都会使用DEFAULT_LEXER作为LEXER的默认属性。
但是DEFAULT_LEXER并不是一个真正意义上的LEXER,Oracle9i的文档上描述的是,如果数据库在建立的时候指定的是中文则DEFAULT_LEXER为CHINESE_VGRAM_LEXER,如果是英文,则DEFAULT_LEXER为BASIC_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
---------- ------------------------------------------------------------------
1 一个中文例子,测试默认的语法属性是否可以正常识别中文。
2 根据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
- ORACLE TEXT LEXER PREFERENCE(四)
- ORACLE TEXT LEXER PREFERENCE(一)
- ORACLE TEXT LEXER PREFERENCE(二)
- ORACLE TEXT LEXER PREFERENCE(三)
- ORACLE TEXT DATASTORE PREFERENCE(四)
- ORACLE TEXT FILTER PREFERENCE(四)
- ORACLE TEXT DATASTORE PREFERENCE(一)
- ORACLE TEXT DATASTORE PREFERENCE(二)
- ORACLE TEXT DATASTORE PREFERENCE(三)
- ORACLE TEXT DATASTORE PREFERENCE(五)
- ORACLE TEXT DATASTORE PREFERENCE(六)
- ORACLE TEXT DATASTORE PREFERENCE(七)
- ORACLE TEXT FILTER PREFERENCE(一)
- ORACLE TEXT FILTER PREFERENCE(二)
- ORACLE TEXT FILTER PREFERENCE(三)
- Oracle模糊查询之(5.1认识全文索引之什么是分词[lexer])oracle Text 全文检索功能对中文分词的支持情况
- oracle全文索引之LEXER
- 深入研究Clang(五) Clang Lexer代码阅读笔记之Lexer
- 8.python中字符串的编码和解码问题——decode/encode
- String常量池详解
- 自定义导航栏背景图片和颜色
- mybatis简单应用(基于配置文件)
- C# 数据为空,不能对空值调用此方法或属性的解决办法
- ORACLE TEXT LEXER PREFERENCE(四)
- android - JNI - 一维数组、二维数组的访问与使用
- java程序设计
- 最佳的75个安全测试工具
- CUDA——SDK4.1+VS2008+VA_X
- 如何在linux live system中创建loop设备并挂载镜像文件
- 用struts2给android客户端发送xml数据
- 设计模式学习心得1---什么是设计模式(design pattern)
- Android全屏、横屏