• Oracle全文检索配置与实践


        在Web项目中使用Oracle全文检索的话,首先要进行Oracle数据库相关表的全文检索配置,所做的准备工作就是要给当前使用用户赋予ctx_ddl包操作权限,有了权限才能进行所要操作表的全文检索配置,接下来看一下具体的配置方法。

    1、创建分析器。

        分析器就是用来将需要检索的记录,按照一定的方式进行词组拆分,然后存放在索引表中。检索的时候根据索引表中存放的拆分词组,对传入的关键字进行匹配,并返回匹配结果。

        oracle text中的分析器有3种:

        (1)basic_lexer:只能根据空格和标点来进行拆分。

        (2)chinese_vgram_lexer:专门的汉语分析器,按字单元进行拆分。这种方式的好处是能够将所有有可能的词组全部保存进索引表,使得数据不会遗漏。

        (3)chinese_lexer:一种新的汉语分析器,能够认识大部分常用的汉语词汇,并按常用词汇进行拆分存储。

        每一种分析器都有它最适合的应用环境,这个要根据自己数据库的编码方式和数据存储情况进行选择。

        我的表结构如下图:

    我要对info字段进行全文检索,info字段中大多存储的时中文介绍信息,选择chinese_vgram_lexer分析器最合适,创建分析器的命令:

    exec ctx_ddl.create_preference ('my_lexer','chinese_vgram_lexer');

    或者:

    beigin 

    ctx_ddl.create_preference ('my_lexer','chinese_vgram_lexer');

    end;

    接下来如果根据项目需求需要过滤词组的话再进行创建过滤词组,不需要的话就可以忽略了。

    2、创建索引

        我要对TOUR_STRATEGY表中的info字段进行检索,接下来就要对info字段建立索引,建立索引的命令:

    create index TOUR_STRATEGY_INDEX on TOUR_STRATEGY(info) indextype is CTXSYS.CONTEXT parameters('lexer my_lexer ');

    索引创建成功以后,就可以在项目中使用了。

    select * from tour_strategy where contains(info,'乘物')>0;

    3、索引与数据变化同步

    当我们需要修改tour_strategy表中的数据,比如添加、删除、更新等操作时,TOUR_STRATEGY_INDEX索引是不会同步更新数据的,需要我们在程序中手动的更新,可以写一个oracle的触发器,当添加、删除、修改操作时,进行索引更新。也可以定时进行更新。更新命令:

    exec ctx_ddl.sync_index('yu_test_index');

    或者:

    begin

    ctx_ddl.sync_index('yu_test_index');

    end;

    另外,如果前面创建全文索引的时候带上了参数“sync(on commit)”,则同步不需要手工去执行,当数据变动时,会自动进行同步操作;操作命令:

     create index TOUR_STRATEGY_INDEX on TOUR_STRATEGY(info) indextype is CTXSYS.CONTEXT parameters('lexer my_lexer sync(on commit)');

  • 相关阅读:
    hadoop生态--ElasticSearch--ES操作
    Haoop生态--ElasticSeaarch(1)--ES预备知识(全文检索的概念、Lucence、倒排索引)
    hadoop生态--Hive(2)--Hive的使用方式
    hadoop生态--Zookeeper
    gsoap使用
    set容器
    如何杀死defunct进程
    关于多态
    数组类型与函数指针基本语法知识
    syslog日志
  • 原文地址:https://www.cnblogs.com/sd-axin/p/8026517.html
Copyright © 2020-2023  润新知