关闭

ORACLE TEXT LEXER PREFERENCE(四)

标签: oraclesqlinsertparameters文档测试
796人阅读 评论(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
查看评论

ORACLE TEXT LEXER PREFERENCE(二)

介绍完Oracle全文索引的BASIC_LEXER属性,这篇介绍Oracle中文语法属性CHINESE_LEXER和CHINESE_VGRAM_LEXER。 Oracle全文索引的BASIC属性主要是针对西方英语语系,英语语系的单词是通过空格、标点和回车来分隔的。而中文则需要索引来...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 15:03
  • 716

ORACLE TEXT LEXER PREFERENCE(一)

介绍完Oracle全文索引的FILTER属性,继续介绍Oracle的LEXER属性。 Oracle全文索引的LEXER属性用于处理各种不同的语言。最基本的英文使用BASE_FILTER,而如果需要使用中文则可以使用CHINESE_VGRAM_LEXER或CHINESE_LEXER。...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 15:01
  • 788

Oracle 中文分词CHINESE_VGRAM_LEXER与CHINESE_LEXER比较

准备工作:  CREATE   TABLE issues (      ID         NUMBER,   ...
  • liqfyiyi
  • liqfyiyi
  • 2014-05-06 11:48
  • 2725

Oracle模糊查询之(5.1认识全文索引之什么是分词[lexer])oracle Text 全文检索功能对中文分词的支持情况

http://hi.baidu.com/lewutian 下面例子在XE中测试通过。 准备工作: CREATE   TABLE issues (     ID       &#...
  • haiross
  • haiross
  • 2013-10-23 17:00
  • 3158

ORACLE TEXT LEXER PREFERENCE(三)

本文继续介绍Oracle全文索引的LEXER属性,这篇文章介绍Oracle多语言全文索引MULTI_LEXER。 如果在Oracle中存储多种语言,那么在建立全文索引的时候就不能只是简单的指定一个LEXER,而是要通过LANGUAGE COLUMN设置MULTI_LEXER...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 15:04
  • 765

ORACLE TEXT FILTER PREFERENCE(四)

这篇文章继续介绍全文索引的FILTER属性,介绍全文索引的PROCEDURE_FILTER属性。 对于一些复杂的需求,Oracle自定义的FILTER可能并不合适,Oracle支持用户自己编写用于FILTER的程序。Oracle提供两种方式,一种是USER_FILT...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 14:59
  • 520

ORACLE TEXT DATASTORE PREFERENCE(四)

这篇文章继续讨论全文索引的DATASTORE属性,介绍URL_DATASTORE。 全文索引可以很方便的索引存储在INTERNET上的信息。在数据库中只需要存储需要索引的文章的URL就可以了。 由于目前讨论的是DATASTORE属性,因此这个例子只索引HTML文章,对于其他需...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 14:27
  • 587

ORACLE TEXT FILTER PREFERENCE(三)

这篇文章继续介绍全文索引的FILTER属性,介绍对不同类型的数据采用不同类型的FILTER属性的方法。 如果Oracle索引的文档包括多种类型,比如doc文件、html文件、pdf文件、纯文本文件等等。由于Oracle不建议对HTML、XML和纯文本文件使用INSO...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 14:39
  • 548

ORACLE TEXT DATASTORE PREFERENCE(六)

这篇文章继续讨论全文索引的DATASTORE属性,介绍NESTED_DATASTORE。 全文索引支持将数据存储在多个列中或存储在主子表中,全文索引还支持将数据存储在嵌套表中。嵌套表的例子和主子表比较类似: 首先创建嵌套表对象,并建立嵌套表: SQL> C...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 14:36
  • 553

ORACLE TEXT DATASTORE PREFERENCE(二)

这篇文章继续讨论全文索引的DATASTORE属性,介绍MULTI_COLUMN_DATASTORE。 如果被索引的文章是保存在数据库中,但是内容分布在多个列中,那么可以通过建立一个MULTI_COLUMN_DATASTORE来索引完整的文章: SQL> CREATE T...
  • liqfyiyi
  • liqfyiyi
  • 2012-03-31 14:25
  • 1060
    个人资料
    • 访问:2425954次
    • 积分:22140
    • 等级:
    • 排名:第393名
    • 原创:158篇
    • 转载:639篇
    • 译文:1篇
    • 评论:52条
    最新评论