`

oracle Text 全文检索功能对中文分词的支持情况

阅读更多
[转载]oracle Text 全文检索功能对中文分词的支持情况


下面例子在XE中测试通过。

准备工作:

CREATE   TABLE issues (
    ID         NUMBER,
    summary       VARCHAR(120),
    description   CLOB,
    author     VARCHAR(80),
    ot_version VARCHAR(10)
);


INSERT INTO issues
     VALUES (1, 'Jane', 'Text does not make tea',
             'Oracle Text is unable to make morning tea', 1);

INSERT INTO issues
     VALUES (2, 'John', 'It comes in the wrong color',
             'I want to have Text in pink', 1);

INSERT INTO issues
     VALUES (3, 'Mike', 'I come from china', '所以我讲中文', 1);
--下面两句话很难解析的
INSERT INTO issues
     VALUES (4, 'Mike', 'I come from china', '吉林省长春市的人民', 1);

INSERT INTO issues
     VALUES (5, 'Mike', 'I come from china',
             '我们要积极地主动作好计划生育工作', 1);

-- define datastore preference for issues

BEGIN
   --ctx_ddl.drop_preference ('issue_lexer');
   ctx_ddl.set_attribute ('issue_store', 'output_type', 'CLOB');
   ctx_ddl.create_preference ('issue_lexer', 'CHINESE_LEXER');
END;
/

-- index issues 没有指定任何lexer
CREATE INDEX issue_index ON issues(author) INDEXTYPE IS ctxsys.CONTEXT;

--进行查询
SELECT *
  FROM issues
WHERE contains (author, '中文', 1) > 0;



会返回no rows selected。

说明:不使用lexer参数,oracle Text无法对中文进行有效检索。

接下来我们使用oracle和网上各位仁兄推荐的CHINESE_LEXER看看,执行下列语句:
DROP   INDEX issue_index;

-- index issues
CREATE INDEX issue_index ON issues(author) INDEXTYPE IS ctxsys.CONTEXT
  PARAMETERS ('lexer issue_lexer');

SELECT *
  FROM issues
WHERE contains (author, '中文', 1) > 0;

会返回一条记录。

再执行下列查询语句:
SELECT *
  FROM issues
WHERE contains (author, '作好', 1) > 0;

SELECT *
  FROM issues
WHERE contains (author, '吉林', 1) > 0;


都没有任何返回结果。

执行下列语句:

SELECT *
  FROM issues
WHERE contains (author, '中文', 1) > 0;




有一个返回结果。

说明:CHINESE_LEXER对中文分词进行了优化,能够识别大部分中文单词,但是毕竟有很多单词难以区分。比如说,‘我们要积极地主动作好计划生育工作’被oracle 解释为:“我们要 积极 地主 动作 好  计划生育 工作”;'吉林省长春市的人民'解释为:“吉林省 长春市 的 人民”。不过效率方面自然很高。

再看看CHINESE_VGRAM_LEXER:
执行下列语句


BEGIN
   ctx_ddl.drop_preference ('issue_lexer');
   ctx_ddl.set_attribute ('issue_store', 'output_type', 'CLOB');
   ctx_ddl.create_preference ('issue_lexer', 'CHINESE_VGRAM_LEXER');
END;
/

-- index issues 没有指定任何lexer
CREATE INDEX issue_index ON issues(author) INDEXTYPE IS ctxsys.CONTEXT
  PARAMETERS ('lexer issue_lexer');

--进行查询
SELECT *
  FROM issues
WHERE contains (author, '中文', 1) > 0;

SELECT *
  FROM issues
WHERE contains (author, '作好', 1) > 0;

SELECT *
  FROM issues
WHERE contains (author, '吉林', 1) > 0;

SELECT *
  FROM issues
WHERE contains (author, '计划生育', 1) > 0;

SELECT *
  FROM issues
WHERE contains (author, '地主', 1) > 0;



都有返回结果。

说明:CHINESE_VGRAM_LEXER使用的保守分词方法,不求有功但求无过。对所有的词都可以查询到。不过效率方面就有不足了。

所有的分词结果都可以在表DR$ISSUE_INDEX$I中看到。
例子中CHINESE_VGRAM_LEXER会创建39行数据,而CHINESE_LEXER只创建23行数据。

结论:oracle Text进行中文搜索必须指定lexer 参数。如果追求效率那么使用CHINESE_LEXER,如果追求准确度那么使用CHINESE_VGRAM_LEXER。

1.2设置

首先检查数据库中是否有CTXSYS用户和CTXAPP脚色。如果没有这个用户和角色,意味着你的数据库创建时未安装intermedia功能。你必须修改数据库以安装这项功能。

还可以检查服务器是否有对PLSExtProc服务的监听。



参考文章:
http://www.oracle.com/technology/global/cn/pub/articles/asplund-textsearch.html
http://www.vckbase.com/document/viewdoc/?id=1173
http://epub.itpub.net/4/1.htm


分享到:
评论

相关推荐

    oracle全文检索的实现

    Oracle数据库,作为业界领先的关系型数据库管理系统之一,自Oracle9i Release 2起便引入了强大的全文检索功能——Oracle Text。这一功能不仅提升了文本数据的检索效率,还拓展了文本管理的能力,使其成为企业级...

    oracle全文检索

    Oracle全文检索技术是数据库管理系统Oracle中用于高效查找和分析文本数据的一种功能。它在不同的Oracle版本中有着不同的名称,如Oracle8.0.x中的ConText,Oracle8i中的interMedia Text,以及从Oracle9i开始的Oracle ...

    基于Oracle的全文检索技术.pdf

    Oracle全文检索技术是Oracle数据库系统内置的一种高效、全面的文本搜索功能,旨在帮助用户快速定位和检索海量文本数据中的相关信息。Oracle Text技术结合了数据库的强大处理能力,提供了全文索引、智能查询、语言...

    基于Oracle Text电子政务全文检索技术的应用.pdf

    Oracle Text是Oracle数据库的一个重要组成部分,它提供了强大的全文检索功能,使得用户能够在海量文本数据中快速、准确地找到所需信息。Oracle Text不仅支持标准的文本搜索,还具备智能化的文本管理和分析能力,能够...

    Oracle全文检索技术详解

    总之,Oracle全文检索技术提供了强大而灵活的搜索功能,尤其在处理中文文本时,通过定制化的分析器和索引策略,能够实现高效的中文检索。深入理解并掌握这些技术,对于提升数据库系统的搜索性能和用户体验具有重要...

    oracle 全文检索文档

    ### Oracle全文检索文档知识点 #### 一、Oracle Text 概述与概念 Oracle Text 是 Oracle 数据库的一个组件,用于提供全文检索...对于希望利用 Oracle Text 实现高效全文检索功能的开发者来说,掌握这些知识至关重要。

    全文检索初步学习笔记

    Oracle数据库提供了强大的全文检索功能,它使用了Oracle Text组件,该组件支持多种语言,可以对各种数据类型(包括文本、图像和视频)进行内容搜索。Oracle Text的工作流程包括创建索引、插入文档、查询和更新索引等...

    Oracle10g实现全文检索

    其中,全文检索是Oracle10g提供的一项非常实用的功能,允许用户基于自然语言查询数据库中的文本内容。 #### 二、全文检索的基本概念 全文检索(Full Text Search)是指在大量文档中查找包含特定单词或短语的所有...

    基于Oracle组件的数据采集与全文检索系统设计与优化.pdf

    Oracle Transparent Gateway提供了一种透明的数据访问方式,使得不同类型的数据库之间可以无缝连接,而Oracle Text则是Oracle数据库中专门用于全文检索的组件,它支持对非结构化文本数据的高效检索。 在设计这个...

    ORacle 全文索引

    Oracle全文索引是Oracle数据库系统中的一个重要特性,它允许用户对数据库中的文本数据进行高效的全文搜索。全文索引使得在海量文本数据中查找特定词汇或短语变得快速且简便,对于那些需要处理大量文本信息的应用程序...

    全文检索技术(自己总结)

    - **数据库全文检索**:如Oracle Text,利用数据库内置的全文搜索功能。 - **集成搜索引擎**:如Compass、Hibernate Search,结合数据库和搜索引擎。 - **XML接口全文检索**:如XQEngine,基于XQuery处理XML文档...

    JAVA日记

    ORACLE Intermedia是ORACLE官方推出的一款用于管理多媒体数据的模块,其不仅支持视频、音频、图片等多媒体文件的统一存储与调用,还内含Oracle Intermedia Text功能,特别适用于多种格式文档的分词索引和跨文本查询...

    Mysql数据库文件.zip

    4. **Full-text Search**:全文搜索引擎得到了增强,支持分词和短语搜索,使得文本检索更为精准。 5. **复制功能**:MySQL 5.5增强了复制功能,支持半同步复制,确保主从复制的事务一致性,同时增加了GTID(Global ...

    mysql-5.5.33-win32.rar

    2. **Full-text Search增强**:MySQL 5.5引入了全文本搜索的改进,支持分词和更复杂的查询,提高了搜索效率和精确度,这对于内容丰富的网站和信息检索应用来说是非常关键的。 3. **分区功能**:MySQL 5.5加强了表的...

    solr5.3.1 导入mysql数据

    5. **分析器(Analyzers)**: 分析器负责对输入的文本进行分词、去除停用词等预处理。我们可以自定义分析器以满足特定的语言或需求。 有了合适的 Schema.xml 配置后,接下来是数据导入的步骤: 1. **创建 ...

    solr入门指南

    - Solr 支持对查询结果中的匹配文本进行高亮显示,便于用户快速定位查询结果中的关键信息。 #### 八、分面搜索(Faceted Search) - 分面搜索允许用户根据不同的维度(如时间、类别等)对查询结果进行筛选,提高了...

    JAVA上百实例源码以及开源项目源代码

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics