ORACLE TEXT LEXER PREFERENCE(二)
介绍完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(二)相关推荐
- ORACLE TEXT LEXER PREFERENCE(一)
介绍完Oracle全文索引的FILTER属性,继续介绍Oracle的LEXER属性. Oracle全文索引的LEXER属性用于处理各种不同的语言.最基本的英文使用BASE_FILTER,而如果需要使用 ...
- ORACLE TEXT LEXER PREFERENCE(四)
本文继续介绍Oracle全文索引的LEXER属性,这篇文章介绍Oracle多语言全文索引DEFAULT_LEXER. 其实这篇文章应该放在LEXER属性的开头部分,不过我的测试一直和Oracle文档上 ...
- ORACLE TEXT LEXER PREFERENCE(三)
本文继续介绍Oracle全文索引的LEXER属性,这篇文章介绍Oracle多语言全文索引MULTI_LEXER. 如果在Oracle中存储多种语言,那么在建立全文索引的时候就不能只是简单的指定一个LE ...
- ORACLE TEXT DATASTORE PREFERENCE(二)
这篇文章继续讨论全文索引的DATASTORE属性,介绍MULTI_COLUMN_DATASTORE. 如果被索引的文章是保存在数据库中,但是内容分布在多个列中,那么可以通过建立一个MULTI_COLU ...
- ORACLE TEXT FILTER PREFERENCE(一)
介绍完Oracle全文索引的DATASTORE属性,继续介绍Oracle的FILTER属性. Oracle全文索引的FILTER属性主要是针对具有一定格式的文档,Oracle根据FILTER的设定来过 ...
- ORACLE TEXT DATASTORE PREFERENCE(一)
Oracle Text功能十分强大,可是文档上给出的例子总是过于简单,而且可能是为了减少篇幅,不少例子只给出了其中关键的几步,但是对于初学者而言,阅读这样的例子很难对全文索引的创建有一个清晰的了解,而 ...
- ORACLE TEXT FILTER PREFERENCE(二)
这篇文章继续介绍全文索引的FILTER属性,介绍Oracle的INSO_FILTER属性. Oracle的全文索引除了可以支持文本文件外,还可以支持多种文档格式,对于这些文档格式,在建立索引的时候需要 ...
- ORACLE TEXT DATASTORE PREFERENCE(五)
这篇文章继续讨论全文索引的DATASTORE属性,介绍DETAIL_DATASTORE. 全文索引运行将被索引的数据存储在子表的多条记录中,下面看一个简单的例子: SQL> CREATE TAB ...
- ORACLE TEXT FILTER PREFERENCE(三)
这篇文章继续介绍全文索引的FILTER属性,介绍对不同类型的数据采用不同类型的FILTER属性的方法. 如果Oracle索引的文档包括多种类型,比如doc文件.html文件.pdf文件.纯文本文件等等 ...
最新文章
- openpyxl安装_自拍教程76Python 一键批量安装第三方包
- 皮一皮:最头铁的汪峰...
- 稳扎稳打Silverlight(13) - 2.0交互之鼠标事件和键盘事件
- WPF 全球化和本地化(图解)
- 数据库的日常管理经验浅谈
- [蓝桥杯][算法提高VIP]种树(dfs)
- 全志A33-BootLoader的两个阶段:boot0和second boot
- mysql-普通查询(General Query)慢查询(Slow Query)相关日志配置
- 03Prism WPF 入门实战 - Region
- 上班族吐槽大集合:那些发生在公司的傻X奇遇
- MongoDB未授权访问漏洞记录(端口:27017,37017)
- [03] Android系统亮度调节
- perl 中部分正则表达式中匹配非空字符和正常使用字符
- 【图像融合】多传感器图像融合技术综述
- C语言错题锦集(持续更新)
- 使用dsoFramer开始Office应用程序
- cmd命令查看服务器硬盘序列号,硬盘序列号查询命令_Win7系统中怎么通过CMD查看硬盘序列号...
- Unity 安装个人免费版
- 关于购买域名的一些建议
- 戴尔服务器物理关机,戴尔服务器的远程开机和关机
热门文章
- css文字下滑,CSS3 文本下落渐变动效
- 取后端数据_用 Flask+Axios 实现前后端数据通信:查询动森鱼类价格
- 最长公共子序列和追踪解
- Prim和Dijkstra居然写起来一模一样
- [视频教程] ubuntu系统下安装最新版PHP7.3.X环境
- 删除所有的视图,存储过程
- CF682C Alyona and the Tree
- Thinkphp小知识点
- 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。...
- USB接口直接焊线的顺序记录