全文索引--自己定义chinese_lexer词典
本文来具体解释一下怎样自己定义chinese_lexer此法分析器的词典
初始化数据
create table test2 (str1 varchar2(2000),str2varchar2(2000)) ; insert into test2
values('地质图','中国和反馈砀山龙卷风流口水地质图') ;
insert into test2
values('图片','图') ;
commit ;
创建此法分析器而且创建全文索引(注意词典仅仅对chinese_lexer起作用)
exec ctx_ddl.create_preference('my_lexer1','CHINESE_LEXER');
EXEC ctx_ddl.create_preference('dataquery','MULTI_COLUMN_DATASTORE');
EXEC ctx_ddl.set_attribute('dataquery','columns', 'str1,str2');
CREATE INDEX test2_idx ON test2(str1) INDEXTYPEIS ctxsys.CONTEXT PARAMETERS('datastore dataquery LEXER my_lexer1');
看一下生成的词表。能够看到。是没有地质图这个keyword的。
ctx@STARTREK>select * from DR$TEST2_IDX$I ; TOKEN_TEXT TOKEN_TYPE TOKEN_FIRST TOKEN_LAST TOKEN_COUNT
-------------------------------------------------------------------------- ----------- ---------- -----------
TOKEN_INFO
-----------------------------------------------------------------------------------------------------------------------------------------------------
STR1 0 1 2 2
0090010301900102 STR2 0 1 2 2
0090050B01900402 地质 0 1 1 1
0090020C 反馈 0 1 1 1
008808 和 0 1 1 1
008807 口水 0 1 1 1
00880D 流 0 1 1 1
00880C 龙卷风 0 1 1 1
00880B 山 0 1 1 1
00880A 图 0 1 2 2
0090030C018805 图片 0 2 2 1
008802 中国 0 1 1 1
008806 砀山 0 1 1 1
008809 已选择13行。
以下開始,使用自己定义词典
C:\Users\fengjun>ctxlc -zht -ocs zhs16GBK> zhs16gbk_102.txt C:\Users\fengjun>zhs16gbk_102.txt
搜索了一下文档,里面没有找到地质图这个关键词
最末尾加上地质图
生成自己定义词典须要使用的三个以d、k、i结尾的文件
这里总是出错
C:\Users\fengjun>ctxlc -zht -ics zhs16gbk -izhs16gbk_102.txt
DRG-52107: ctxkbtc internal error 加上-n參数,顺利生成 C:\Users\fengjun>ctxlc -zht -ics zhs16gbk -n-i zhs16gbk_102.txt
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
DRG-52118: Writing index file for terms
DRG-52117: Writing index file for IDs
DRG-52116: Done writing all terms
DRG-52115: Writing new terms in lexicon tofiles
DRG-52114: Writing lexicon to files C:\Users\fengjun>dir dr*
驱动器 C 中的卷是Windows8_OS
卷的序列号是6C5D-2B1F C:\Users\fengjun 的文件夹 2014/09/24 14:02 2,250,471 drold.dat
2014/09/24 14:02 391,326 droli.dat
2014/09/24 14:02 89,282 drolk.dat
2014/09/24 13:55 298,206 drolt.dat
4 个文件 3,029,285 字节
0 个文件夹 113,255,260,160 可用字节
备份$ORACLE_HOME\ctx\data\zhlx
下的内容。而且将上面的几个文件copy到$ORACLE_HOME\ctx\data\zhlx下。而且改名
d、k、i结尾的拷贝过去就可以
一定记得将原来的文件备份一下。
ctx@STARTREK>drop index test2_idx force ;
索引已删除。
ctx@STARTREK>CREATE INDEX test2_idx ONtest2(str1) INDEXTYPE IS ctxsys.CONTEXT PARAMETERS('datastore dataquery LEXERmy_lexer1');
索引已创建。
ctx@STARTREK>select * from DR$TEST2_IDX$I ;
TOKEN_TEXT TOKEN_TYPE TOKEN_FIRST TOKEN_LAST TOKEN_COUNT
-------------------------------------------------------------------------- ----------- ---------- -----------
TOKEN_INFO
--------------------------------------------------------------------------------------------------------------------------
STR1 0 1 2 2
0090010201900102
STR2 0 1 2 2
0090040A01900402
地质图 0 1 1 1
0090020B
反馈 0 1 1 1
008807
和 0 1 1 1
008806
口水 0 1 1 1
00880C
流 0 1 1 1
00880B
龙卷风 0 1 1 1
00880A
山 0 1 1 1
008809
图 0 2 2 1
008805
图片 0 2 2 1
008802
中国 0 1 1 1
008805
砀山 0 1 1 1
008808
已选择13行。
能够看到已经有地质图这个keyword了。
这样自己定义词典就完毕了,对于大数据量的检索,自己定义词典还是很有意义的。
以下是一个相关的简单測试
未加关键词之前
SQL> select count(0) from data_query t wherecontains(MDTITILE,'xxxx万地质图')>0;
COUNT(0)
----------
7072
已用时间: 00: 00: 01.54
运行计划
----------------------------------------------------------
Plan hash value: 670767155
--------------------------------------------------------------------------------
---
| Id |Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
--------------------------------------------------------------------------------
---
| 0 |SELECT STATEMENT | | 1 | 85 | 4 (0)| 00:00:0
1 |
| 1| SORT AGGREGATE | | 1 | 85 | |
|
|* 2| DOMAIN INDEX | DATA_QUERY_IDX | 164 | 13940 | 4 (0)| 00:00:0
1 |
--------------------------------------------------------------------------------
---
Predicate Information (identified by operationid):
---------------------------------------------------
2 - access("CTXSYS"."CONTAINS"("MDTITILE",'xxxx万地质图')>0)
统计信息
----------------------------------------------------------
3528 recursive calls
0 db block gets
10214 consistent gets
1173 physical reads
2824 redo size
535 bytes sent via SQL*Net to client
524 bytes received via SQL*Netfrom client
2 SQL*Net roundtrips to/fromclient
263 sorts (memory)
0 sorts (disk)
1 rows processed
加关键词之后
SQL> select count(0) from data_query t wherecontains(MDTITILE,'xxxx万地质图')>0 ;
COUNT(0)
----------
7072
已用时间: 00: 00: 00.28
运行计划
----------------------------------------------------------
Plan hash value: 670767155
--------------------------------------------------------------------------------
---
| Id |Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
--------------------------------------------------------------------------------
---
| 0 |SELECT STATEMENT | | 1 | 85 | 4 (0)| 00:00:0
1 |
| 1| SORT AGGREGATE | | 1 | 85 | |
|
|* 2| DOMAIN INDEX | DATA_QUERY_IDX | 164 | 13940 | 4 (0)| 00:00:0
1 |
--------------------------------------------------------------------------------
---
Predicate Information (identified by operationid):
---------------------------------------------------
2 -access("CTXSYS"."CONTAINS"("MDTITILE",'xxxx万地质图')>0)
统计信息
----------------------------------------------------------
643 recursive calls
0 db block gets
2438 consistent gets
34 physical reads
0 redo size
535 bytes sent via SQL*Net toclient
524 bytes received via SQL*Netfrom client
2 SQL*Net roundtrips to/fromclient
34 sorts (memory)
0 sorts (disk)
1 rows processed
相关官方文档位置:
| Oracle® Text Reference |
http://docs.oracle.com/cd/E11882_01/text.112/e24436/cexec.htm#CCREF2202
全文索引--自己定义chinese_lexer词典的更多相关文章
- 全文索引--自定义chinese_lexer词典
全文索引它的数据字典本来就是自己加密过的数据格式,只有翻译过来了,才可以修改.这样修改后再生成它自己的数据格式文件,覆盖掉原来的,就会将新添加的关键词加入进去了!! 以下操作是在Oracle服务器安装 ...
- IK-Analyzer(5.3.1)动态配置自定义词典
参考文献:http://blog.csdn.net/fatpanda/article/details/37911079 jar包: IK-Analyzer-extra-5.3.1.jar IKAnal ...
- Forth 采用CODE定义新词
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 词典(一) 跳转表(Skip table)
词典,顾名思义,就是通过关键码来查询的结构.二叉搜索树也可以作为词典,不过各种BST,如AVL树.B-树.红黑树.伸展树,结构和操作比较复杂,而且理论上插入和删除都需要O(logn)的复杂度. 在词典 ...
- 转 Oracle全文检索http://docs.oracle.com/cd/E11882_01/text.112/e24436/toc.htm
SQL > exec ctx_ddl.create_preference ('my_test_lexer','chinese_lexer') : PL/SQL 过程成功完成 SQL > E ...
- 安装sphinx和coreseek
sphinx简介 Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎.意图为其他应用提供高速.低空间占用.高结果 相关度的全文搜索功能.Sphinx可以非常容易的与SQL数 ...
- Mysql学习笔记(八)索引
PS:把昨天的学习内容补上...发一下昨天学的东西....五月三日...继续学习数据库... 学习内容: 索引.... 索引的优点: 1.通过创建唯一索引,可以保证数据库每行数据的唯一性... 2.使 ...
- iOS 学习笔记 一 (2015.02.05)
一:Xcode6输入框设置为 keyboard type设置为Number Pad弹不出键盘的解决办法 问题:Can't find keyplane that supports type 4 fo ...
- cocos2d-x 2.0 序列帧动画 深入分析
转自:http://blog.csdn.net/honghaier/article/details/8222401 序列帧动画主要有几个类: CCSpriteFrame:精灵帧信息,序列帧动画是依靠多 ...
随机推荐
- GT使用说明
GT文档:https://gt.qq.com/docs.html GT Android版的详细使用手册: https://gt.qq.com/docs/a/GTAndroidUserGuide.pdf
- 汇编CMOS
汇编 端口 端口 前面讲过,各种存储器都和CPU的地址线.数据线.控制线相连.CPU在操控它们的时候,把它们都当作内存来对待,把它们总的看做一个由若干存储单元组成的逻辑存储器,这个逻辑器我们称其为内存 ...
- [android开发篇]activity组件篇
https://developer.android.com/guide/components/activities.html Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打 ...
- Oracle 查看 使用 UNDO 段的事务脚本
查看oracle undo segment段的信息: SELECT T1.USN, T2.NAME, T1.STATUS, T1.LATCH, T1.EXTENTS, T1.WRAPS, T1.EXT ...
- Git 撤消操作
修改最后一次提交 有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了.想要撤消刚才的提交操作,可以使用 --amend 选项重新提交: $ git commit --amend 此命令将 ...
- 【2018.10.20】noip模拟赛Day3 二阶和
今年BJ省选某题的弱化版…… 这看起来就没那么难了,有几种方法维护,这里提两种. 第一种(傻逼的我写的) 维护 一维&二维前缀和. 对于一个长度为$m$的序列$b_1,b_2,...,b_m$ ...
- C/C++ 程序中调用命令行命令并获取命令行输出结果
在 c/c++ 程序中,可以使用 system()函数运行命令行命令,但是只能得到该命令行的 int 型返回值,并不能获得显示结果.例如system(“ls”)只能得到0或非0,如果要获得ls的执行结 ...
- uva 550 有趣的乘法(dfs)
题目大意:给三个数A(进制).B(如*****7的最后一个数字7).C(*****7*4的后面的因数4)求符合条件下的第一个因数的位数最少 例子: 179487 * 4 = 717948 (10进制) ...
- [其他] 关于C语言中使用未声明函数的问题
在c语言中,碰到一个.c文件,无.h头文件,在另一.c文件调用函数时,并没有进行声明extern, 此时编译器不会报错,会默认去查找同名的函数,这样会存在一些问题,查了些资料,稍微总结了下: 总结: ...
- NOJ 1116 哈罗哈的大披萨 【淡蓝】 [状压dp+各种优化]
我只能说,珍爱生命,远离卡常数的题...感谢陈老师和蔡神,没有他们,,,我调一个星期都弄不出来,,,, 哈罗哈的大披萨 [淡蓝] 时间限制(普通/Java) : 1000 MS/ 3000 MS ...