关闭

ORACLE TEXT LEXER PREFERENCE(二)

702人阅读 评论(0) 收藏 举报

介绍完Oracle全文索引的BASIC_LEXER属性,这篇介绍Oracle中文语法属性CHINESE_LEXER和CHINESE_VGRAM_LEXER。


Oracle全文索引的BASIC属性主要是针对西方英语语系,英语语系的单词是通过空格、标点和回车来分隔的。而中文则需要索引来自动切词。

看下面这个例子:

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

表已创建。

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

已创建 1 行。

SQL> COMMIT;

提交完成。

SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT;

索引已创建。

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

未选定行

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

ID DOCS
---------- ------------------------------------------------------------
1 一个中文例子,测试BASIC_LEXER语法属性是否可以正常识别中文。

通过BASIC_LEXER来索引中文,Oracle只识别被空格、标点和回车符分隔出来的部分。需要对中文内容进行索引的话,就必须使用中文的LEXER。

Oracle提供了两种预定义的中文LEXER属性:CHINESE_VGRAM_LEXER和CHINESE_LEXER。Oracle在文档上是这样描述的:

CHINESE_LEXER相对应CHINESE_VGRAM_LEXER属性有如下的优点:

产生的索引更小;

更好的查询响应时间;

产生更接近真实的索引切词,使得查询精度更高;

支持停用词。

虽然Oracle说明了使用CHINESE_LEXER的大量好处,但是CHINESE_LEXER的实际效果却存在一定的问题:

SQL> DROP INDEX IND_T_DOCS;

索引已丢弃。

SQL> TRUNCATE TABLE T;

表已截掉。

SQL> INSERT INTO T VALUES (1, '北京大学未名湖');

已创建 1 行。

SQL> INSERT INTO T VALUES (2, '北京邮电大学');

已创建 1 行。

SQL> INSERT INTO T VALUES (3, '北京市第十四中学');

已创建 1 行。

SQL> COMMIT;

提交完成。

SQL> CONN CTXSYS/CTXSYS@YANGTK
已连接。
SQL> BEGIN
2 CTX_DDL.CREATE_PREFERENCE('TEST_CHINESE_VGRAM_LEXER', 'CHINESE_VGRAM_LEXER');
3 CTX_DDL.CREATE_PREFERENCE('TEST_CHINESE_LEXER', 'CHINESE_LEXER');
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_CHINESE_VGRAM_LEXER');

索引已创建。

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '北京') > 0;

ID DOCS
---------- ------------------------------------------------------------
3 北京市第十四中学
2 北京邮电大学
1 北京大学未名湖

SQL> DROP INDEX IND_T_DOCS;

索引已丢弃。

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

索引已创建。

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '北京') > 0;

ID DOCS
---------- ------------------------------------------------------------
2 北京邮电大学

通过对比结果可以发现:使用CHINESE_LEXER没有将第一条记录和第三条记录中的北京检索出来。也许Oracle的CHINESE_LEXER认为北京大学和北京市是一个完整的词汇,而没有对其进行进一步切分。也许这就是Oracle提到的这种切分方式更接近于真实的情况。我不知道读者会怎样看待这个问题,不过我更倾向于使用CHINESE_VGRAM_LEXER,个人感觉返回记录多一些总比漏掉一些要好。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

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

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

android Preference相关样式修改

首先,Preference相关的东西都是以list的形式展现给大家的,所以,修改的样式一般可以分为2类:1.listitem背景修改。2.listitem具体view修改。我们分别对下面四种情况进行分析。  1.activity继承自PreferenceActivity  1...
  • wsmzm
  • wsmzm
  • 2015-03-29 19:45
  • 846

Android Preference类中xml里属性的用法和介绍

/packages/apps/Settings/res/xml/accessibility_settings.xml<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 18...
  • lfx_xianxian
  • lfx_xianxian
  • 2016-04-06 20:04
  • 1035

Oracle各种类型的运用|char、varchar、text和nchar、nvarchar、ntext的区别

Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示 如果还为了这个纠结,就直接看看后面的解说,做决定吧。 一般如果用到中文或者其它特殊字符,我就会使用n开头的类型,否则的话直接使用var开头的。  sql...
  • asdsa108
  • asdsa108
  • 2016-01-07 10:13
  • 2981

atitit.词法分析原理 词法分析器 (Lexer)

atitit.词法分析原理 词法分析器 (Lexer)   1. 词法分析(英语:lexical analysis)1 2. ;实现词法分析程序的常用途径:自动生成,手工生成.[1] 2 2.1. 词法分析程序的功能2 2.2. 如何描述词素3 2...
  • attilax
  • attilax
  • 2016-04-23 01:15
  • 3579

oracle 初级学习(王二暖 视频 笔记)

对oracle学习视频的总结 方便以后查看 将不定期更新
  • xv740234390
  • xv740234390
  • 2016-03-10 10:34
  • 1399

Android进阶——Preference详解之Preference系的基本应用和管理(二)

这篇文章就给大家总结下Preference、PreferenceActivity、PreferenceGroup、RingtonePreference的普通应用和管理包含创建、移除和一些简单的原理验证
  • CrazyMo_
  • CrazyMo_
  • 2016-07-14 22:21
  • 7280

Preference偏好设置使用方法

学习了一下Preference偏好设置的方法,这里记录总结,供学习参考。代码参考了android Settings packages/app/Settings里偏好设置,以及自定义Preference的用法。 在API 11以后,推荐PreferenceFragment的addPreference...
  • sinat_34157462
  • sinat_34157462
  • 2016-03-04 16:16
  • 1662

Android自定义控件——自定义Preference

如图定义一个颜色选择的Preference 思路:继承Preference,重写onCreateView 前提:需要一个布局文件,TextView显示文本,ImageView显示颜色 <RelativeLayout xmlns:android="http://sche...
  • u013045971
  • u013045971
  • 2015-02-26 19:40
  • 3715

前端必读:浏览器内部工作原理 (重点了解浏览器Lexer,)

浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到,从你在地址栏输入google.com到你看到google主页过程中都发生了什么。   将讨论的浏览器   今天,有五种主流浏览器——IE、Firefox、Safari、Chrome及Opera。   本文将...
  • chen1152
  • chen1152
  • 2016-05-24 21:48
  • 620
    个人资料
    • 访问:2363090次
    • 积分:21701
    • 等级:
    • 排名:第394名
    • 原创:158篇
    • 转载:639篇
    • 译文:1篇
    • 评论:51条
    最新评论