CN104317937A - 一种基于Oracle数据库的海量中文数据查询方法及*** - Google Patents
一种基于Oracle数据库的海量中文数据查询方法及*** Download PDFInfo
- Publication number
- CN104317937A CN104317937A CN201410602655.6A CN201410602655A CN104317937A CN 104317937 A CN104317937 A CN 104317937A CN 201410602655 A CN201410602655 A CN 201410602655A CN 104317937 A CN104317937 A CN 104317937A
- Authority
- CN
- China
- Prior art keywords
- index
- oracle database
- job
- chinese
- word table
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/334—Query execution
- G06F16/3344—Query execution using natural language analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于Oracle数据库的海量中文数据查询方法及***,所述方法包括:步骤1,在Oracle数据库层创建基于中文字段的文本索引;步骤2,创建两个Job,一个Job用于给Oracle数据库中的新增数据添加文本索引,另一个Job用于优化Oracle数据库中所有数据的文本索引;步骤3,在Oracle数据库层执行两个job;步骤4,根据创建的文本索引,采用SQL语句在Oracle数据库中进行中文字段查询。本发明在中文字段上建立文本索引,然后建立job定时地去给新增的数据建立索引和优化已经建立的索引,效率高,易于维护,适合大数据的查询。
Description
技术领域
本发明涉及IT行业浏览器和数据库大数据量查询交互领域,特别是涉及一种基于Oracle数据库的海量中文数据查询方法及***。
背景技术
在很多的***中,经常会遇到对中文字符的模糊查询,比如:关于***的地址管理,数据量大概是上千万的地址数据,然后我们经常会根据名称来检索这些中文数据,传统的模糊查询采用的是:like"%xxxx%"这种方式来查询,这种方式会进行全表的扫描检索,在数据量比较小的***中能够基本满足用户的需求,遇到上百万、甚至上千万的数据的时候,这种方式基本就做废了,查询速度非常地慢。因此,本发明提出了一种适合大数据查询的海量中文数据查询方法及***。
发明内容
本发明所要解决的技术问题是提供一种基于Oracle数据库的海量中文数据查询方法及***,用于解决数据量大的中文数据查询方法及***。
本发明解决上述技术问题的技术方案如下:一种基于Oracle数据库的海量中文数据查询方法,包括:
步骤1,在Oracle数据库层创建基于中文字段的文本索引;
步骤2,创建两个Job,一个Job用于给Oracle数据库中的新增数据添加文本索引,另一个Job用于优化Oracle数据库中所有数据的文本索引;
步骤3,在Oracle数据库层执行两个job;
步骤4,基于经两个Job处理后的文本索引,采用SQL语句在Oracle数据库中进行中文字段查询。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述步骤1具体包括:
步骤11,删除Oracle数据库层中原有的词法分析器,并基于中文字段新建词法分析器;
步骤12,删除Oracle数据库层中原有的非索引字表类,并基于中文字段新建非索引字表类;
步骤13,基于新建的非索引字表类创建非索引字表,该非索引字表中定义了所有不适用于进行数据查询的词语;
步骤14,在Oracle数据库中,对非索引字表中定义的词语以外的所有中文字段创建文本索引。
进一步,还包括对创建的文本索引进行校验。
进一步,所述对创建的文本索引进行校验包括:若能成功调用SQL语句中的contains命令进行查询,则表明文本索引创建成功。
进一步,所述步骤2中,采用PLSQL工具创建job。
进一步,所述步骤2还包括:在创建Job时,设置Job执行的时间间隔。
本发明的技术方案还包括一种基于Oracle数据库的海量中文数据查询***,包括:
索引创建模块,其用于在Oracle数据库层创建基于中文字段的文本索引;
Job创建模块,其用于创建两个Job,一个Job用于给Oracle数据库中的新增数据添加文本索引,另一个Job用于优化Oracle数据库中所有数据的文本索引;
Job执行模块,其用于在Oracle数据库层执行两个job;
查询模块,其用于基于经两个Job处理后的文本索引,采用SQL语句在Oracle数据库中进行中文字段查询。
进一步,所述索引创建模块包括:
词法分析器处理模块,其用于删除Oracle数据库层中原有的词法分析器,并基于中文字段新建词法分析器;
非索引字表类处理模块,其用于删除Oracle数据库层中原有的非索引字表类,并基于中文字段新建非索引字表类;
非索引字表创建模块,其用于基于新建的非索引字表类创建非索引字表,该非索引字表中定义了所有不适用于进行数据查询的词语;
文本索引建立模块,其用于在Oracle数据库中,对非索引字表中定义的词语以外的所有中文字段创建文本索引。
进一步,还包括校验模块,其用于对创建的文本索引进行校验。
进一步,所述非索引字表类处理模块采用PLSQL工具创建job。
本发明的有益效果是:本发明在中文字段上建立文本索引,然后建立job定时地去给新增的数据建立索引和优化已经建立的数据的索引,这种方式效率高,且维护起来也很容易,适合大数据的查询。通过这种技术可以改善现在***中模糊查询存在的查询慢问题,有利于提高***的整体性能。
附图说明
图1为本发明所述基于Oracle数据库的海量中文数据查询方法的流程示意图;
图2为本发明本发明所述基于Oracle数据库的海量中文数据查询***的结构示意图。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
如图1所示,本实施例给出了一种基于Oracle数据库的海量中文数据查询方法,包括:
步骤1,在Oracle数据库层创建基于中文字段的文本索引;
步骤2,创建两个Job,一个Job用于给Oracle数据库中的新增数据添加文本索引,另一个Job用于优化Oracle数据库中所有数据的文本索引;
步骤3,在Oracle数据库层执行两个job;
步骤4,基于经两个Job处理后的文本索引,采用SQL语句在Oracle数据库中进行中文字段查询。本实施例中所述步骤1具体包括:
步骤11,删除Oracle数据库层中原有的词法分析器,并基于中文字段新建词法分析器;
步骤12,删除Oracle数据库层中原有的非索引字表类,并基于中文字段新建非索引字表类;
步骤13,基于新建的非索引字表类创建非索引字表,该非索引字表中定义了所有不适用于进行数据查询的词语;
步骤14,在Oracle数据库中,对非索引字表中定义的词语以外的所有中文字段创建文本索引。
此外,还需要对创建的文本索引进行校验,具体方法为:若能调用SQL语句中的contains命令进行查询,则表明文本索引创建成功。
本实施例采用PLSQL工具创建job,且设置Job执行的时间间隔,比如可以设置用于给Oracle数据库中的新增数据添加文本索引的Job每15分钟执行一次,设置用于优化Oracle数据库中所有数据的文本索引的Job每天执行一次。
对应地,本实施例还给出了一种基于Oracle数据库的海量中文数据查询***,如图2所示,包括:
索引创建模块,其用于在Oracle数据库层创建基于中文字段的文本索引;
Job创建模块,其用于创建两个Job,一个Job用于给Oracle数据库中的新增数据添加文本索引,另一个Job用于优化Oracle数据库中所有数据的文本索引;
Job执行模块,其用于在Oracle数据库层执行两个job;
查询模块,其用于基于经两个Job处理后的文本索引,采用SQL语句在Oracle数据库中进行中文字段查询。
此外,还包括校验模块,其用于对创建的文本索引进行校验。
本实施例中,所述索引创建模块包括:
词法分析器处理模块,其用于删除Oracle数据库层中原有的词法分析器,并基于中文字段新建词法分析器;
非索引字表类处理模块,其用于删除Oracle数据库层中原有的非索引字表类,并基于中文字段新建非索引字表类;
非索引字表创建模块,其用于基于新建的非索引字表类创建非索引字表,该非索引字表中定义了所有不适用于进行数据查询的词语;
文本索引建立模块,其用于在Oracle数据库中,对非索引字表中定义的词语以外的所有中文字段创建文本索引。
采用本实施例的海量中文数据查询***及方法,进行数据查询的具体实施过程如下:
1、删除原有词法分析器,若没有词法分析器会报错,则可以忽略。实现的程序如下:
BEGIN
ctx_ddl.drop_preference('CHINA_LEXER');
END;
2、创建词法分析器,新建的词法分析器用来智能提取分段器中的纯文本,并将其拆分为不连续的标记,实际作用就是解析文本并标记,为后续的检索提供前提条件。实现程序如下。
3、删除原有非索引字表类,如果没有非索引字表类会报错,可以忽略,实现程序如下:
BEGIN
ctx_ddl.drop_preference('CC_STOPLIST');
END;
4、创建非索引字表类
5、创建非索引字表
非索引字表也称为停用词,在Oracle数据库中,全文索引允许用户建立停用词,来屏蔽那些包含信息量比较小且出现概率比较高的词语。
比如英文中的a、this、are、the等词语,几乎每篇文章中都会包含这些常用词,因此对这些词语进行索引的意义不大。本实施例列举了如下的停用词:
6、用CTXSYS/CTXSYS用户登录数据库
给dbcustadm赋权限,如果没有CTXSYS用户,可以先直接执行登录,如果登录没有执行成功,就需要SPD解决CTXSYS***用户问题。
GRANT EXECUTE ON ctx_ddl TO dbcustadm;
7、创建索引,实现的程序如下。
CREATE INDEX dbcustadm.addrmsgindex ONdbcustadm.danalogmsgadd(addr_msg)INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS('MEMORY 50M LEXER dbcustadm.CHINA_LEXERSTOPLIST dbcustadm.CC_STOPLIST');
8、验证索引是否创建成功
能够用contains查询,就说明创建成功了,举例如下:
SELECT*FROM danalogmsgadd WHERE contains(addr_msg,'31栋1单元')>0;
SELECT*FROM danalogmsgadd WHERE contains(addr_msg,'31栋1单元and 1室')>0;
9:在PLSQL工具下,创建两个job,创建job的内容如下:
--job1-每15分钟给Oracle数据库中的新增数据添加文本索引
what:ctx_ddl.sync_index('dbcustadm.addrmsgindex');
next date:sysdate
interval:SYSDATE+(1/24/4)
--job2-每天进行一次索引优化
what:CTX_DDL.OPTIMIZE_INDEX('dbcustadm.addrmsgindex','full');
next date:sysdate
interval:SYSDATE+1
10、job执行检查:
select*from all_jobs;
创建的job会在这里展示出来,资源的应该也有job;
last_date:会记录下次job的运行时间,job1应该是每15分钟执行一次,job2是每天执行一次;
total_time:会记录job的运行次数,执行后数量递加。
总地来说,本实施例在数据库层根据技术方案中所介绍的方式建立需要使用到的索引,然后再维护索引的job,最后通过应用程序中使用模糊的SQL语句中采用contains(addr_msg,'xxxx')>0进行查询。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于Oracle数据库的海量中文数据查询方法,其特征在于,包括:
步骤1,在Oracle数据库层创建基于中文字段的文本索引;
步骤2,创建两个Job,一个Job用于给Oracle数据库中的新增数据添加文本索引,另一个Job用于优化Oracle数据库中所有数据的文本索引;
步骤3,在Oracle数据库层执行两个Job;
步骤4,基于经两个Job处理后的文本索引,采用SQL语句在Oracle数据库中进行中文字段查询。
2.根据权利要求1所述的海量中文数据查询方法,其特征在于,所述步骤1具体包括:
步骤11,删除Oracle数据库层中原有的词法分析器,并基于中文字段新建词法分析器;
步骤12,删除Oracle数据库层中原有的非索引字表类,并基于中文字段新建非索引字表类;
步骤13,基于新建的非索引字表类创建非索引字表,该非索引字表中定义了所有不适用于进行数据查询的词语;
步骤14,在Oracle数据库中,对非索引字表中定义的词语以外的所有中文字段创建文本索引。
3.根据权利要求1或2所述的海量中文数据查询方法,其特征在于,还包括对创建的文本索引进行校验。
4.根据权利要求3所述的海量中文数据查询方法,其特征在于,所述对创建的文本索引进行校验包括:若能成功调用SQL语句中的contains命令进行查询,则表明文本索引创建成功。
5.根据权利要求1所述的海量中文数据查询方法,其特征在于,所述步骤2中,采用PLSQL工具创建job。
6.根据权利要求1所述的海量中文数据查询方法,其特征在于,所述步骤2还包括:在创建Job时,设置Job执行的时间间隔。
7.一种基于Oracle数据库的海量中文数据查询***,其特征在于,包括:
索引创建模块,其用于在Oracle数据库层创建基于中文字段的文本索引;
Job创建模块,其用于创建两个Job,一个Job用于给Oracle数据库中的新增数据添加文本索引,另一个Job用于优化Oracle数据库中所有数据的文本索引;
Job执行模块,其用于在Oracle数据库层执行两个job;
查询模块,其用于基于经两个Job处理后的文本索引,采用SQL语句在Oracle数据库中进行中文字段查询。
8.根据权利要求7所述的海量中文数据查询***,其特征在于,所述索引创建模块包括:
词法分析器处理模块,其用于删除Oracle数据库层中原有的词法分析器,并基于中文字段新建词法分析器;
非索引字表类处理模块,其用于删除Oracle数据库层中原有的非索引字表类,并基于中文字段新建非索引字表类;
非索引字表创建模块,其用于基于新建的非索引字表类创建非索引字表,该非索引字表中定义了所有不适用于进行数据查询的词语;
文本索引建立模块,其用于在Oracle数据库中,对非索引字表中定义的词语以外的所有中文字段创建文本索引。
9.根据权利要求7或8所述的海量中文数据查询***,其特征在于,还包括校验模块,其用于对创建的文本索引进行校验。
10.根据权利要求7所述的海量中文数据查询***,其特征在于,所述非索引字表类处理模块采用PLSQL工具创建job。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410602655.6A CN104317937A (zh) | 2014-10-31 | 2014-10-31 | 一种基于Oracle数据库的海量中文数据查询方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410602655.6A CN104317937A (zh) | 2014-10-31 | 2014-10-31 | 一种基于Oracle数据库的海量中文数据查询方法及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104317937A true CN104317937A (zh) | 2015-01-28 |
Family
ID=52373169
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410602655.6A Pending CN104317937A (zh) | 2014-10-31 | 2014-10-31 | 一种基于Oracle数据库的海量中文数据查询方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104317937A (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5303361A (en) * | 1989-01-18 | 1994-04-12 | Lotus Development Corporation | Search and retrieval system |
CN101154241A (zh) * | 2007-10-11 | 2008-04-02 | 北京金山软件有限公司 | 一种数据检索方法及一种数据检索*** |
-
2014
- 2014-10-31 CN CN201410602655.6A patent/CN104317937A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5303361A (en) * | 1989-01-18 | 1994-04-12 | Lotus Development Corporation | Search and retrieval system |
CN101154241A (zh) * | 2007-10-11 | 2008-04-02 | 北京金山软件有限公司 | 一种数据检索方法及一种数据检索*** |
Non-Patent Citations (1)
Title |
---|
聂红梅等: "Oracle数据库中Clob大字段的查询优化技术研究", 《计算机技术与发展》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3026579B1 (en) | Forced ordering of a dictionary storing row identifier values | |
US9798759B2 (en) | Delegation of database post-commit processing | |
EP3026578B1 (en) | N-bit compressed versioned column data array for in-memory columnar stores | |
US10255309B2 (en) | Versioned insert only hash table for in-memory columnar stores | |
US9009182B2 (en) | Distributed transaction management with tokens | |
US9965504B2 (en) | Transient and persistent representation of a unified table metadata graph | |
US20160147786A1 (en) | Efficient Database Undo / Redo Logging | |
US9165049B2 (en) | Translating business scenario definitions into corresponding database artifacts | |
CN107402992A (zh) | 一种分布式NewSQL数据库***和全文检索建立方法 | |
CN103186639B (zh) | 数据生成方法及*** | |
CN102567329B (zh) | 一种数据查询方法及*** | |
US9189515B1 (en) | Data retrieval from heterogeneous storage systems | |
Zhou et al. | A survey on the management of uncertain data | |
US20170177700A1 (en) | Updating a partitioning column | |
CN105389344A (zh) | 一种自助式查新方法及*** | |
TWI706260B (zh) | 基於行動端NoSQL資料庫的索引建立方法及裝置 | |
CN104503985A (zh) | 一种Hbase数据自动化创建Solr索引文件的方法 | |
CN103678634A (zh) | 一种提高J-Hi开源开发平台中数据查询速度的方法 | |
CN101639851B (zh) | 一种数据存储、查询的方法和装置 | |
CN105574027A (zh) | 基于oltp/olap混合应用下多维度性能数据存储方法、装置及*** | |
CN105005619A (zh) | 一种海量网站基础信息的快速检索方法和*** | |
US20120284224A1 (en) | Build of website knowledge tables | |
CN104317937A (zh) | 一种基于Oracle数据库的海量中文数据查询方法及*** | |
CN103309888A (zh) | 电子地图的数据的验证方法和验证装置 | |
CN102541824B (zh) | 一种用以实现文档修改的方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150128 |
|
RJ01 | Rejection of invention patent application after publication |