全文索引--两种中文词法分析器比較(chinese_vgram_lexer chinese_lexer)

首先让我们进行一个关于中文词法分析器的比較,測试步骤例如以下:


建表

create table test (str varchar2(100)) ;

create table test1(str varchar2(100)) ;



插入数据

insert into test values (‘中华人员共和国’) ;

insert into test1values (‘中华人员共和国’) ;


创建两个关于中文的分析器

exec ctx_ddl.create_preference('my_lexer','CHINESE_VGRAM_LEXER') ;
exec ctx_ddl.create_preference('my_lexer1','CHINESE_LEXER') ;




创建全文索引

CREATE INDEX test1_idx ON test1(str) INDEXTYPE IS ctxsys.CONTEXT PARAMETERS('LEXER my_lexer1');
CREATE INDEX test_idx ON test(str) INDEXTYPE IS ctxsys.CONTEXT PARAMETERS('LEXER my_lexer');




查看全文索引生成的词表


chinese_vgram_lexer

dexter@STARTREK>select * from DR$TEST_IDX$I ;

TOKEN_TEXT TOKEN_TYPE TOKEN_FIRST TOKEN_LAST TOKEN_COUNT
---------------------------------------------------------------- ---------- ----------- ---------- -----------
TOKEN_INFO
------------------------------------------------------------------------------------------------------------------------------------------------------
共和 0 1 1 1
008805

国 0 1 1 1
008807

和国 0 1 1 1
008806

华人 0 1 1 1
008802

人员 0 1 1 1
008803

员共 0 1 1 1
008804

中华 0 1 1 1
008801





chinese_lexer


dexter@STARTREK>select * from DR$TEST1_IDX$I ;

TOKEN_TEXT TOKEN_TYPE TOKEN_FIRST TOKEN_LAST TOKEN_COUNT
---------------------------------------------------------------- ---------- ----------- ---------- -----------
TOKEN_INFO
----------------------------------------------------------------------------------------------------------------------------
共和国 0 1 1 1
008803

人员 0 1 1 1
008802

中华 0 1 1 1
008801





分词效果:

分词效果:

 

 

chinese_ lexer

chinese_vgram_lexer

共和国

共和

人员

中华

和国

 

华人

 

人员

 

员共

 

中华

 




对于chinese_vgram_lexer来说,官方文档有这种描写叙述:

The CHINESE_VGRAM_LEXER type identifies tokens in Chinese text for creating Text indexes.

通过实验证明,事实上就是依照相邻两个字来创建全文索引。对于我们正常的国内使用习惯来说明显是不适用的。




而对于chinese_ lexer来说,明显人性化了很多:

The CHINESE_LEXER type identifies tokens in traditional and simplified Chinese text for creating Oracle Text indexes.

通过实验证明,已经有了优化,没有生成过多的词表,这对于全文索引的优化来说是比較有意义的。而且chinese_lexer还同意自己定义词表,通过屏蔽词。以及自己定义词表能够进一步的加速全文索引的检索速度。


下文将解说怎样自己定义词法分析器。

相关官方文档位置:
Oracle® Text Reference
http://docs.oracle.com/cd/E11882_01/text.112/e24436/cdatadic.htm#CCREF1977

posted @ 2017-05-18 20:10  jzdwajue  阅读(425)  评论(0编辑  收藏  举报