• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

全文索引–自定义chinese_lexer词典

mysql 搞代码 4年前 (2022-01-09) 16次浏览 已收录 0个评论

本文来详解一下如何自定义chinese_lexer此法分析器的词典 初始化数据 create table test2 (str1 varchar2(2000),str2varchar2(2000)) ; insert into test2 values(地质图,中国和反馈砀山龙卷风流口水地质图) ;insert into test2 values(图片,图) ;commit ;

本文来详解一下如何自定义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');

看一下生成的词表,可以看到,是没有地质图这个关键字的。

ctx@STARTREK>select * from DR$TEST2_IDX$I ; TOKEN_TEXT                                                      TOKEN_TYPE TOKEN_FIRST TOKEN_LAST TOKEN_COUNT-------------------------------------------------------------------------- ----------- ---------- -----------TOKEN_INFO-----------------------------------------------------------------------------------------------------------------------------------------------------STR1                                                                      0           1          2        20090010301900102 STR2                                                                     0           1          2        20090050B01900402 地质                                                                     0           1          1       10090020C 反馈                                                                     0           1          1       1008808 和                                                                        0           1          1       1008807 口水                                                                     0           1          1       100880D 流                                                                       0           1          1       100880C 龙卷风                                                                   0           1          1       100880B 山                                                                       0           1          1      100880A 图                                                                       0           1          2       20090030C018805 图片                                                                     0           2          2       1008802 中国                                                                     0           1          1       1008806 砀山                                                                     0           1          1       1008809  已选择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.txtDRG-52107: ctxkbtc internal error 加上-n参数,顺利生成 C:\Users\fengjun>ctxlc -zht -ics zhs16gbk -n-i zhs16gbk_102.txt,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,DRG-52118: Writing index file for termsDRG-52117: Writing index file for IDsDRG-52116: Done writing all termsDRG-52115: Writing new terms in lexicon tofilesDRG-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.dat2014/09/24 14:02           391,326 droli.dat2014/09/24 14:02            89,282 drolk.dat2014/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        20090010201900102 STR2                                                                     0           1          2        20090040A01900402 地质图                                                                   0           1          1       10090020B 反馈                                                                      0           1          1       1008807 和                                                                       0           1          1       1008806 口水                                                                     0           1          1       100880C 流                                                                       0           1          1       100880B 龙卷风                                                                   0           1          1       100880A 山                                                                       0           1          1       1008809 图                                                                       0           2          2       1008805 图片                                                                     0           2          2       1008802 中国                                                                     0           1          1       1008805 砀山                                                                      0           1          1       1008808  已选择13行。

可以看到已经有地质图这个关键字了。

这样自定义词典就完成了,对于大数据量的检索,自定义词典还是非常有意义的。

下面是一个相关的简单测试

未加关键词之前

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 本文来源gaodaimacom搞#^代%!码&网*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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:全文索引–自定义chinese_lexer词典

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址