`
85600367
  • 浏览: 37643 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

全文检索初步学习笔记

阅读更多
本文主要是学习oracle text 对服务器本地文件进行检索的学习笔记,主要参考oracle全文检索这个电子书和网上的一些例子。

首先将DBA权限赋予你的登录账号

begin
   ctx_ddl.create_preference ('my_datastore_prefs', 'FILE_DATASTORE');
   ctx_ddl.set_attribute ('my_datastore_prefs', 'path', 'd:\file');
end;
--将服务器(windows)D盘文件夹file设置成oracle读取文件的根目录

begin
ctx_ddl.create_preference('URL_PREF','URL_DATASTORE');
ctx_ddl.set_attribute('URL_PREF','Timeout','300');
end;
--设置URL存储类型(顺便记录下)

begin
ctx_ddl.create_preference('cs_filter', 'CHARSET_FILTER');
ctx_ddl.set_attribute('cs_filter', 'charset', 'UTF8');
end;
--设置字符集为UTF-8,oracle默认为utf-8,txt文件要改存储类型为utf-8

begin
  ctx_ddl.create_preference ('my_lexer', 'chinese_lexer');
end;
--中文分析器,据说比CHINESE_VGRAM_LEXER 性能好,但是它是按词组查询 单字不一定能匹--配出来

begin
  ctx_ddl.create_preference ('my_chinese_lexer', 'CHINESE_VGRAM_LEXER');
end;
--同样是中文分析器,单字可以查询


CREATE TABLE mydocs( id NUMBER PRIMARY KEY, title VARCHAR2(255), thefile
VARCHAR2(255) );
--建立测试表

INSERT INTO mydocs( id, title, thefile ) VALUES( 1, 'Document1', 'test1.txt');
INSERT INTO mydocs( id, title, thefile ) VALUES( 2, 'Document2', 'test2.txt');
--插入测试数据,文件不用带路径名,放在D:/file目录下
INSERT INTO mydocs( id, title, thefile ) VALUES( 5, '163', 'http://www.163.com');
INSERT INTO mydocs( id, title, thefile ) VALUES( 6, 'qq', 'http://www.qq.com');
--URL的测试数据
COMMIT;



CREATE INDEX mydocs_text_index ON mydocs(thefile) INDEXTYPE IS ctxsys.context
    PARAMETERS('datastore my_datastore_prefs filter cs_filter Lexer my_lexer');
--对存储文件路径的字段建立索引
--这时数据库自动建立索引表 其中$I为读取文件内容分析词组后建立的索引



--强制删除索引(有时删不掉)
drop index mydocs_text_index force


SELECT id,title,m.thefile
  FROM mydocs m
WHERE contains( thefile, '查询条件' ) > 0;
--查询条件为 txt文件中出现的字符





--模拟真实环境测试时,对大数据量的考虑将测试表建立成分区表,每个表空间对应一个物--理硬盘
--建立Oracle Text索引需要消耗CTXSYS用户默认的临时表空间空间。如果空间不够的话将导--致 ORA-01652 错误。你可以扩展CTXSYS的临时表空间,而不是发出命令的用户默认的临时--表空间。


--更改全文索引建立的表空间
Begin
  Ctx_ddl.create_preference('mystore', 'basic_storage'); --建立storage 
  Ctx_ddl.set_attribute('mystore',     --设置参数
                        'i_table_clause',
                        'tablespace test_space03 storage (initial 1k)');
  Ctx_ddl.set_attribute('mystore',
                        'k_table_clause',
                        'tablespace test_space03 storage (initial 1k)');
  Ctx_ddl.set_attribute('mystore',
                        'r_table_clause',
                        'tablespace users storage (initial 1k) lob
                         (data) store as (disable storage in row cache)');
  Ctx_ddl.set_attribute('mystore',
                        'n_table_clause',
                        'tablespace test_space03 storage (initial 1k)');
  Ctx_ddl.set_attribute('mystore',
                        'i_index_clause',
                        'tablespace test_space03 storage (initial 1k) compress 2');
  Ctx_ddl.set_attribute('mystore',
                        'p_table_clause',
                        'tablespace test_space03 storage (initial 1k)');
end;


--查询 更改系统默认语言
SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER = 'NLS_LANGUAGE'; 
ALTER SESSION SET NLS_LANGUAGE = 'AMERICAN';

--对多语言的支持
begin
CTX_DDL.CREATE_PREFERENCE('TEST_FILE_ENGLISH', 'BASIC_LEXER');

CTX_DDL.SET_ATTRIBUTE('TEST_FILE_ENGLISH', 'MIXED_CASE', 'YES');

ctx_ddl.create_preference ('TEST_FILE_CHINESE', 'CHINESE_VGRAM_LEXER');

CTX_DDL.CREATE_PREFERENCE('TEST_FILE_MULTI_LEXER', 'MULTI_LEXER');

CTX_DDL.ADD_SUB_LEXER('TEST_FILE_MULTI_LEXER', 'DEFAULT', 'TEST_ENGLISH');

CTX_DDL.ADD_SUB_LEXER('TEST_FILE_MULTI_LEXER', 'SIMPLIFIED CHINESE', 'TEST_FILE_CHINESE', 'CHINESE');
end;

--最终建立在分区表支持多语言的文件存储类型的全文索引
CREATE INDEX test_text_index ON test(thefile) INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS ('datastore my_datastore_prefs filter cs_filter LEXER TEST2_FILE_MULTI_LEXER LANGUAGE COLUMN thefile');


--更新索引,当文件改变时,需要执行该命令更新索引
begin
ctx_ddl.sync_index('mydocs_text_index ', '2M');
end;

--建立job 自动更新索引(job这里没有测试)
VARIABLE job1 number;
BEGIN
DBMS_JOB.SUBMIT(:job1,'CTX_DDL.SYNC_INDEX(''mydocs_text_index'', ''2M'');', SYSDATE, 'SYSDATE + (1/24/4)');
commit;
END;

--查看系统索引状态
Select  *  from   ctxsys.ctx_indexes --(idx_status 索引状态)


-----以下是其他常用索引方式-------
CREATE INDEX mydocs_text_index ON mydocs(title) INDEXTYPE IS ctxsys.context
    PARAMETERS('filter cs_filter Lexer my_lexer');
--对title字段内容建立索引

CREATE INDEX mydocs_text_index ON mydocs(thefile) INDEXTYPE IS ctxsys.context parameters
( 'Datastore URL_PREF' );
--URL索引的建立方式

oracle text 学起来确实挺麻烦,网上例子不多,所以记录下来。
最终由于我们的系统数据量太大,避免加重数据库负担,改用Lucene了。
头一次写笔记 写的比较乱,只是把以前测试时的SQL代码粘上去简单的说明
oracle全文检索.pdf 有兴趣的可以看下
分享到:
评论

相关推荐

    基于 STM32F103RCT6 的学习笔记,适用于 STM32 的初步学习

    本库是基于 STM32F103RCT6 的学习笔记,适用于 STM32 的初步学习 使用此库的前置条件 学会使用Github,CSDN,知乎,B站等常用论坛,具备良好的检索能力; 学会独立解决硬件开发问题,具有一定的调试能力; 学会安装...

    SqlServer初学者学习笔记

    以上知识点构成了Sql Server初学者的基础学习框架,通过迪锐软件公司的培训学员数据库笔记,你可以逐步深入理解和掌握这些内容,为成为一名合格的数据库管理员或开发人员打下坚实的基础。记得实践是检验真理的唯一...

    SOLR学习笔记

    ### SOLR学习笔记 #### 一、Solr简介与特点 **Solr** 是一种开源的企业级搜索平台,它是基于 **Lucene Java** 构建的。Solr 的设计目标是为了提供高性能、高可用性的搜索服务,适用于各种规模的企业级应用。 **...

    MYSQL基础知识-学习笔记

    这份"MYSQL基础知识-学习笔记"涵盖了对MySQL的初步介绍以及基础概念,是初学者入门的理想资源。 首先,我们从MySQL的简介开始。MySQL是由瑞典的MySQL AB公司开发的,后被甲骨文公司收购。它是一款开源、免费的...

    系统集成项目管理工程师学习笔记

    系统集成项目管理工程师的学习笔记主要涵盖了项目管理的五个核心知识领域:整合管理、范围管理、进度管理、成本管理和质量管理。以下是这些领域的详细解释: 1. **整合管理**:整合管理是确保所有项目元素相互协调...

    oracle学习笔记

    Oracle学习笔记是对数据库管理系统Oracle的初步探索,适合初学者了解和掌握Oracle的基础知识。这篇笔记主要围绕Oracle数据库、SQL语言展开,由薛海璐老师主讲,内容涵盖100%。 一、数据库介绍 在数据库领域,表是...

    检索表的介绍及应用笔记整理 (1).pdf

    尽管如此,进行生物鉴定时,检索表仅作为初步工具,还需要结合专业文献和专著进行深入研究。 推荐学习资源包括《植物分类学实验》、《普通昆虫学》和《动物分类学的方法和原理》等书籍,这些都能提供更全面的分类...

    android学习笔记

    标题“android学习笔记”表明,本文档是一份关于安卓操作系统学习的笔记。Android操作系统是谷歌公司开发的一个基于Linux内核的开源操作系统,广泛应用于智能手机和平板电脑等移动设备。 描述中提到的“android的...

    文献检索之创新新思维.zip

    4. 检索结果筛选:根据出版时间、引用次数、作者信誉等因素,对检索结果进行初步筛选。 5. 深度阅读与分析:对筛选后的文献进行详细阅读,理解其研究方法、数据处理、结论,并对比分析。 三、创新思维的培养 1. ...

    Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用

    Memcached是一种广泛使用的分布式内存缓存系统,它能够...通过这篇学习笔记,你应该对gwhalin Memcached Java客户端有了初步了解,接下来可以结合实际项目,深入学习和实践,充分发挥Memcached在高并发场景下的优势。

    第四章网络资源检索与知识管理.pptx

    二次检索是在初步检索结果基础上进行的进一步筛选,可以帮助我们剔除无关的检索结果,提高检索效率。命令检索则允许用户输入特定的检索指令,更加精准地定位所需信息。 个人知识管理同样至关重要。它涉及到平时对...

    essbase 学习笔记 (1): 建立BSO方案

    手动创建过程可能比较耗时,但对于小规模数据集或初步学习者而言,这是一种很好的实践方式。 #### 四、总结 建立BSO方案是Essbase数据分析的重要基础,它涉及到Application与Database的创建,以及关键的Outline...

    专业数据库检索与利用实践要求.doc

    【专业数据库检索与利用实践要求】是针对科研和学习中的一项关键技能,旨在提升学生对专业数据库的检索和利用能力。这项实践作业要求学生选择一个自己感兴趣的综述选题,研究国内外近五年来相关领域的研究进展。通过...

    学术文章检索网站

    - **应用场景**:适用于学术研究初期文献综述阶段以及日常学习过程中查阅专业资料。 #### 虫部落(http://scholar.chongbuluo.com/) - **平台介绍**:虫部落学术搜索引擎通过聚合多个学术资源站点,帮助用户实现...

    文献检索练习册.doc

    4. 零次文献和三次文献:零次文献如手稿、私人笔记,未经正式出版或公开;三次文献如百科全书、手册,是对前两级文献的综合和总结。 5. 出版时间顺序:按照出版时间,文献依次为一次文献、二次文献和三次文献。 6....

    严蔚敏主讲数据结构听课笔记

    1. **基本概念**:首先,笔记会介绍数据结构的基本概念,包括数据、数据元素、数据对象、数据结构、逻辑结构和物理结构等,帮助初学者建立起对数据结构的初步理解。 2. **线性结构**:线性结构如数组和链表是最基础...

    我的学习资料打包,包括ES,MongoDB,Oracle,TS,NodeJS相关的学习过程

    它不仅适用于全文检索,还能处理结构化和半结构化数据。学习Elasticsearch,你需要理解它的索引机制、RESTful API、集群配置以及如何进行性能调优。 2. **MongoDB**:MongoDB是一款流行的NoSQL数据库系统,它以JSON...

    hibenate笔记

    《Hibernate笔记》 ...以上只是Hibernate笔记的一部分,完整的学习过程还包括对事务管理、缓存机制、性能优化等内容的深入研究。通过不断实践和探索,你将能够熟练掌握Hibernate,从而在Java开发中更加得心应手。

Global site tag (gtag.js) - Google Analytics