热门标签 | 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

 

 

 

 


推荐阅读
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 精选30本C# ASP.NET SQL中文PDF电子书合集
    欢迎订阅我们的技术博客,获取更多关于C#、ASP.NET和SQL的最新资讯和资源。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文介绍如何在 FireDAC 环境下实现 FDMEMTable 字段的自动获取,为开发人员提供便捷的数据处理方式。 ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • openGauss每日一练:第6天 - 模式的创建、修改与删除
    本篇笔记记录了openGauss数据库中关于模式(Schema)的创建、修改和删除操作。通过这些操作,用户可以更好地管理和控制数据库对象。实验环境为openGauss 2.0.0,并使用由墨天轮提供的线上环境。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 深入解析三大范式与JDBC集成
    本文详细探讨了数据库设计中的三大范式,并结合Java数据库连接(JDBC)技术,讲解如何在实际开发中应用这些概念。通过实例和图表,帮助读者更好地理解范式理论及其在数据操作中的重要性。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 本文探讨了在Oracle数据库中,动态SQL语句的执行及其对事务管理的影响,特别是关于回滚操作的有效性。重点讨论了一个具体场景:将预警短信从当前表迁移到历史表时遇到的字段长度不匹配问题及相应的异常处理。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
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社区 版权所有