热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

全文索引--自定义chinese_lexer词典

本文介绍了如何自定义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');
 


 

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

 

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行。


 

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

 

 

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

 

 

 

 

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

 

未加关键词之前

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

 

 

 

 


推荐阅读
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 本文介绍了如何使用Power Design(PD)和SQL Server进行数据库反向工程的方法。通过创建数据源、选择要反向工程的数据表,PD可以生成物理模型,进而生成所需的概念模型。该方法适用于SQL Server数据库,对于其他数据库是否适用尚不确定。详细步骤和操作说明可参考本文内容。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
author-avatar
拍友2502914513
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有