介绍完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,个人感觉返回记录多一些总比漏掉一些要好。

ORACLE TEXT LEXER PREFERENCE(二)相关推荐

  1. ORACLE TEXT LEXER PREFERENCE(一)

    介绍完Oracle全文索引的FILTER属性,继续介绍Oracle的LEXER属性. Oracle全文索引的LEXER属性用于处理各种不同的语言.最基本的英文使用BASE_FILTER,而如果需要使用 ...

  2. ORACLE TEXT LEXER PREFERENCE(四)

    本文继续介绍Oracle全文索引的LEXER属性,这篇文章介绍Oracle多语言全文索引DEFAULT_LEXER. 其实这篇文章应该放在LEXER属性的开头部分,不过我的测试一直和Oracle文档上 ...

  3. ORACLE TEXT LEXER PREFERENCE(三)

    本文继续介绍Oracle全文索引的LEXER属性,这篇文章介绍Oracle多语言全文索引MULTI_LEXER. 如果在Oracle中存储多种语言,那么在建立全文索引的时候就不能只是简单的指定一个LE ...

  4. ORACLE TEXT DATASTORE PREFERENCE(二)

    这篇文章继续讨论全文索引的DATASTORE属性,介绍MULTI_COLUMN_DATASTORE. 如果被索引的文章是保存在数据库中,但是内容分布在多个列中,那么可以通过建立一个MULTI_COLU ...

  5. ORACLE TEXT FILTER PREFERENCE(一)

    介绍完Oracle全文索引的DATASTORE属性,继续介绍Oracle的FILTER属性. Oracle全文索引的FILTER属性主要是针对具有一定格式的文档,Oracle根据FILTER的设定来过 ...

  6. ORACLE TEXT DATASTORE PREFERENCE(一)

    Oracle Text功能十分强大,可是文档上给出的例子总是过于简单,而且可能是为了减少篇幅,不少例子只给出了其中关键的几步,但是对于初学者而言,阅读这样的例子很难对全文索引的创建有一个清晰的了解,而 ...

  7. ORACLE TEXT FILTER PREFERENCE(二)

    这篇文章继续介绍全文索引的FILTER属性,介绍Oracle的INSO_FILTER属性. Oracle的全文索引除了可以支持文本文件外,还可以支持多种文档格式,对于这些文档格式,在建立索引的时候需要 ...

  8. ORACLE TEXT DATASTORE PREFERENCE(五)

    这篇文章继续讨论全文索引的DATASTORE属性,介绍DETAIL_DATASTORE. 全文索引运行将被索引的数据存储在子表的多条记录中,下面看一个简单的例子: SQL> CREATE TAB ...

  9. ORACLE TEXT FILTER PREFERENCE(三)

    这篇文章继续介绍全文索引的FILTER属性,介绍对不同类型的数据采用不同类型的FILTER属性的方法. 如果Oracle索引的文档包括多种类型,比如doc文件.html文件.pdf文件.纯文本文件等等 ...

最新文章

  1. openpyxl安装_自拍教程76Python 一键批量安装第三方包
  2. 皮一皮:最头铁的汪峰...
  3. 稳扎稳打Silverlight(13) - 2.0交互之鼠标事件和键盘事件
  4. WPF 全球化和本地化(图解)
  5. 数据库的日常管理经验浅谈
  6. [蓝桥杯][算法提高VIP]种树(dfs)
  7. 全志A33-BootLoader的两个阶段:boot0和second boot
  8. mysql-普通查询(General Query)慢查询(Slow Query)相关日志配置
  9. 03Prism WPF 入门实战 - Region
  10. 上班族吐槽大集合:那些发生在公司的傻X奇遇
  11. MongoDB未授权访问漏洞记录(端口:27017,37017)
  12. [03] Android系统亮度调节
  13. perl 中部分正则表达式中匹配非空字符和正常使用字符
  14. 【图像融合】多传感器图像融合技术综述
  15. C语言错题锦集(持续更新)
  16. 使用dsoFramer开始Office应用程序
  17. cmd命令查看服务器硬盘序列号,硬盘序列号查询命令_Win7系统中怎么通过CMD查看硬盘序列号...
  18. Unity 安装个人免费版
  19. 关于购买域名的一些建议
  20. 戴尔服务器物理关机,戴尔服务器的远程开机和关机

热门文章

  1. css文字下滑,CSS3 文本下落渐变动效
  2. 取后端数据_用 Flask+Axios 实现前后端数据通信:查询动森鱼类价格
  3. 最长公共子序列和追踪解
  4. Prim和Dijkstra居然写起来一模一样
  5. [视频教程] ubuntu系统下安装最新版PHP7.3.X环境
  6. 删除所有的视图,存储过程
  7. CF682C Alyona and the Tree
  8. Thinkphp小知识点
  9. 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。...
  10. USB接口直接焊线的顺序记录