《一种基于ORACLE数据库的海量中文数据查询方法及系统.pdf》由会员分享,可在线阅读,更多相关《一种基于ORACLE数据库的海量中文数据查询方法及系统.pdf(10页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 104317937 A (43)申请公布日 2015.01.28 CN 104317937 A (21)申请号 201410602655.6 (22)申请日 2014.10.31 G06F 17/30(2006.01) (71)申请人 北京思特奇信息技术股份有限公司 地址 100086 北京市海淀区中关村南大街 6 号中电信息大厦 16 层 (72)发明人 姜连海 (74)专利代理机构 北京轻创知识产权代理有限 公司 11212 代理人 杨立 (54) 发明名称 一种基于 Oracle 数据库的海量中文数据查 询方法及系统 (57) 摘要 本发明涉及一种基于 Orac。
2、le 数据库的海 量中文数据查询方法及系统, 所述方法包括 : 步 骤 1, 在 Oracle 数据库层创建基于中文字段的文 本索引 ; 步骤 2, 创建两个 Job, 一个 Job 用于给 Oracle 数据库中的新增数据添加文本索引, 另一 个Job用于优化Oracle数据库中所有数据的文本 索引 ; 步骤 3, 在 Oracle 数据库层执行两个 job ; 步骤 4, 根据创建的文本索引, 采用 SQL 语句在 Oracle 数据库中进行中文字段查询。本发明在中 文字段上建立文本索引, 然后建立 job 定时地去 给新增的数据建立索引和优化已经建立的索引, 效率高, 易于维护, 适合大。
3、数据的查询。 (51)Int.Cl. 权利要求书 2 页 说明书 6 页 附图 1 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书2页 说明书6页 附图1页 (10)申请公布号 CN 104317937 A CN 104317937 A 1/2 页 2 1. 一种基于 Oracle 数据库的海量中文数据查询方法, 其特征在于, 包括 : 步骤 1, 在 Oracle 数据库层创建基于中文字段的文本索引 ; 步骤 2, 创建两个 Job, 一个 Job 用于给 Oracle 数据库中的新增数据添加文本索引, 另 一个 Job 用于优化 Oracle 数据库中所有数据的。
4、文本索引 ; 步骤 3, 在 Oracle 数据库层执行两个 Job ; 步骤4, 基于经两个Job处理后的文本索引, 采用SQL语句在Oracle数据库中进行中文 字段查询。 2. 根据权利要求 1 所述的海量中文数据查询方法, 其特征在于, 所述步骤 1 具体包括 : 步骤 11, 删除 Oracle 数据库层中原有的词法分析器, 并基于中文字段新建词法分析 器 ; 步骤 12, 删除 Oracle 数据库层中原有的非索引字表类, 并基于中文字段新建非索引字 表类 ; 步骤 13, 基于新建的非索引字表类创建非索引字表, 该非索引字表中定义了所有不适 用于进行数据查询的词语 ; 步骤 14。
5、, 在 Oracle 数据库中, 对非索引字表中定义的词语以外的所有中文字段创建文 本索引。 3.根据权利要求1或2所述的海量中文数据查询方法, 其特征在于, 还包括对创建的文 本索引进行校验。 4. 根据权利要求 3 所述的海量中文数据查询方法, 其特征在于, 所述对创建的文本索 引进行校验包括 : 若能成功调用 SQL 语句中的 contains 命令进行查询, 则表明文本索引创 建成功。 5. 根据权利要求 1 所述的海量中文数据查询方法, 其特征在于, 所述步骤 2 中, 采用 PLSQL 工具创建 job。 6. 根据权利要求 1 所述的海量中文数据查询方法, 其特征在于, 所述步骤。
6、 2 还包括 : 在 创建 Job 时, 设置 Job 执行的时间间隔。 7. 一种基于 Oracle 数据库的海量中文数据查询系统, 其特征在于, 包括 : 索引创建模块, 其用于在 Oracle 数据库层创建基于中文字段的文本索引 ; Job 创建模块, 其用于创建两个 Job, 一个 Job 用于给 Oracle 数据库中的新增数据添加 文本索引, 另一个 Job 用于优化 Oracle 数据库中所有数据的文本索引 ; Job 执行模块, 其用于在 Oracle 数据库层执行两个 job ; 查询模块, 其用于基于经两个 Job 处理后的文本索引, 采用 SQL 语句在 Oracle 数。
7、据库 中进行中文字段查询。 8. 根据权利要求 7 所述的海量中文数据查询系统, 其特征在于, 所述索引创建模块包 括 : 词法分析器处理模块, 其用于删除 Oracle 数据库层中原有的词法分析器, 并基于中文 字段新建词法分析器 ; 非索引字表类处理模块, 其用于删除 Oracle 数据库层中原有的非索引字表类, 并基于 中文字段新建非索引字表类 ; 非索引字表创建模块, 其用于基于新建的非索引字表类创建非索引字表, 该非索引字 权 利 要 求 书 CN 104317937 A 2 2/2 页 3 表中定义了所有不适用于进行数据查询的词语 ; 文本索引建立模块, 其用于在 Oracle 数。
8、据库中, 对非索引字表中定义的词语以外的所 有中文字段创建文本索引。 9. 根据权利要求 7 或 8 所述的海量中文数据查询系统, 其特征在于, 还包括校验模块, 其用于对创建的文本索引进行校验。 10. 根据权利要求 7 所述的海量中文数据查询系统, 其特征在于, 所述非索引字表类处 理模块采用 PLSQL 工具创建 job。 权 利 要 求 书 CN 104317937 A 3 1/6 页 4 一种基于 Oracle 数据库的海量中文数据查询方法及系统 技术领域 0001 本发明涉及 IT 行业浏览器和数据库大数据量查询交互领域, 特别是涉及一种基 于 Oracle 数据库的海量中文数据查。
9、询方法及系统。 背景技术 0002 在很多的系统中, 经常会遇到对中文字符的模糊查询, 比如 : 关于系统的地址管 理, 数据量大概是上千万的地址数据, 然后我们经常会根据名称来检索这些中文数据, 传统 的模糊查询采用的是 :like“ xxxx “ 这种方式来查询, 这种方式会进行全表的扫描检 索, 在数据量比较小的系统中能够基本满足用户的需求, 遇到上百万、 甚至上千万的数据的 时候, 这种方式基本就做废了, 查询速度非常地慢。因此, 本发明提出了一种适合大数据查 询的海量中文数据查询方法及系统。 发明内容 0003 本发明所要解决的技术问题是提供一种基于 Oracle 数据库的海量中文数。
10、据查询 方法及系统, 用于解决数据量大的中文数据查询方法及系统。 0004 本发明解决上述技术问题的技术方案如下 : 一种基于 Oracle 数据库的海量中文 数据查询方法, 包括 : 0005 步骤 1, 在 Oracle 数据库层创建基于中文字段的文本索引 ; 0006 步骤 2, 创建两个 Job, 一个 Job 用于给 Oracle 数据库中的新增数据添加文本索 引, 另一个 Job 用于优化 Oracle 数据库中所有数据的文本索引 ; 0007 步骤 3, 在 Oracle 数据库层执行两个 job ; 0008 步骤4, 基于经两个Job处理后的文本索引, 采用SQL语句在Ora。
11、cle数据库中进行 中文字段查询。 0009 在上述技术方案的基础上, 本发明还可以做如下改进。 0010 进一步, 所述步骤 1 具体包括 : 0011 步骤 11, 删除 Oracle 数据库层中原有的词法分析器, 并基于中文字段新建词法分 析器 ; 0012 步骤 12, 删除 Oracle 数据库层中原有的非索引字表类, 并基于中文字段新建非索 引字表类 ; 0013 步骤 13, 基于新建的非索引字表类创建非索引字表, 该非索引字表中定义了所有 不适用于进行数据查询的词语 ; 0014 步骤 14, 在 Oracle 数据库中, 对非索引字表中定义的词语以外的所有中文字段创 建文本索。
12、引。 0015 进一步, 还包括对创建的文本索引进行校验。 0016 进一步, 所述对创建的文本索引进行校验包括 : 若能成功调用 SQL 语句中的 contains 命令进行查询, 则表明文本索引创建成功。 说 明 书 CN 104317937 A 4 2/6 页 5 0017 进一步, 所述步骤 2 中, 采用 PLSQL 工具创建 job。 0018 进一步, 所述步骤 2 还包括 : 在创建 Job 时, 设置 Job 执行的时间间隔。 0019 本发明的技术方案还包括一种基于 Oracle 数据库的海量中文数据查询系统, 包 括 : 0020 索引创建模块, 其用于在 Oracle 。
13、数据库层创建基于中文字段的文本索引 ; 0021 Job 创建模块, 其用于创建两个 Job, 一个 Job 用于给 Oracle 数据库中的新增数据 添加文本索引, 另一个 Job 用于优化 Oracle 数据库中所有数据的文本索引 ; 0022 Job 执行模块, 其用于在 Oracle 数据库层执行两个 job ; 0023 查询模块, 其用于基于经两个 Job 处理后的文本索引, 采用 SQL 语句在 Oracle 数 据库中进行中文字段查询。 0024 进一步, 所述索引创建模块包括 : 0025 词法分析器处理模块, 其用于删除 Oracle 数据库层中原有的词法分析器, 并基于 。
14、中文字段新建词法分析器 ; 0026 非索引字表类处理模块, 其用于删除 Oracle 数据库层中原有的非索引字表类, 并 基于中文字段新建非索引字表类 ; 0027 非索引字表创建模块, 其用于基于新建的非索引字表类创建非索引字表, 该非索 引字表中定义了所有不适用于进行数据查询的词语 ; 0028 文本索引建立模块, 其用于在 Oracle 数据库中, 对非索引字表中定义的词语以外 的所有中文字段创建文本索引。 0029 进一步, 还包括校验模块, 其用于对创建的文本索引进行校验。 0030 进一步, 所述非索引字表类处理模块采用 PLSQL 工具创建 job。 0031 本发明的有益效果。
15、是 : 本发明在中文字段上建立文本索引, 然后建立 job 定时地 去给新增的数据建立索引和优化已经建立的数据的索引, 这种方式效率高, 且维护起来也 很容易, 适合大数据的查询。通过这种技术可以改善现在系统中模糊查询存在的查询慢问 题, 有利于提高系统的整体性能。 附图说明 0032 图 1 为本发明所述基于 Oracle 数据库的海量中文数据查询方法的流程示意图 ; 0033 图 2 为本发明本发明所述基于 Oracle 数据库的海量中文数据查询系统的结构示 意图。 具体实施方式 0034 以下结合附图对本发明的原理和特征进行描述, 所举实例只用于解释本发明, 并 非用于限定本发明的范围。。
16、 0035 如图 1 所示, 本实施例给出了一种基于 Oracle 数据库的海量中文数据查询方法, 包括 : 0036 步骤 1, 在 Oracle 数据库层创建基于中文字段的文本索引 ; 0037 步骤 2, 创建两个 Job, 一个 Job 用于给 Oracle 数据库中的新增数据添加文本索 引, 另一个 Job 用于优化 Oracle 数据库中所有数据的文本索引 ; 说 明 书 CN 104317937 A 5 3/6 页 6 0038 步骤 3, 在 Oracle 数据库层执行两个 job ; 0039 步骤4, 基于经两个Job处理后的文本索引, 采用SQL语句在Oracle数据库中。
17、进行 中文字段查询。本实施例中所述步骤 1 具体包括 : 0040 步骤 11, 删除 Oracle 数据库层中原有的词法分析器, 并基于中文字段新建词法分 析器 ; 0041 步骤 12, 删除 Oracle 数据库层中原有的非索引字表类, 并基于中文字段新建非索 引字表类 ; 0042 步骤 13, 基于新建的非索引字表类创建非索引字表, 该非索引字表中定义了所有 不适用于进行数据查询的词语 ; 0043 步骤 14, 在 Oracle 数据库中, 对非索引字表中定义的词语以外的所有中文字段创 建文本索引。 0044 此外, 还需要对创建的文本索引进行校验, 具体方法为 : 若能调用 SQ。
18、L 语句中的 contains 命令进行查询, 则表明文本索引创建成功。 0045 本实施例采用 PLSQL 工具创建 job, 且设置 Job 执行的时间间隔, 比如可以设置用 于给 Oracle 数据库中的新增数据添加文本索引的 Job 每 15 分钟执行一次, 设置用于优化 Oracle 数据库中所有数据的文本索引的 Job 每天执行一次。 0046 对应地, 本实施例还给出了一种基于 Oracle 数据库的海量中文数据查询系统, 如 图 2 所示, 包括 : 0047 索引创建模块, 其用于在 Oracle 数据库层创建基于中文字段的文本索引 ; 0048 Job 创建模块, 其用于创。
19、建两个 Job, 一个 Job 用于给 Oracle 数据库中的新增数据 添加文本索引, 另一个 Job 用于优化 Oracle 数据库中所有数据的文本索引 ; 0049 Job 执行模块, 其用于在 Oracle 数据库层执行两个 job ; 0050 查询模块, 其用于基于经两个 Job 处理后的文本索引, 采用 SQL 语句在 Oracle 数 据库中进行中文字段查询。 0051 此外, 还包括校验模块, 其用于对创建的文本索引进行校验。 0052 本实施例中, 所述索引创建模块包括 : 0053 词法分析器处理模块, 其用于删除 Oracle 数据库层中原有的词法分析器, 并基于 中文。
20、字段新建词法分析器 ; 0054 非索引字表类处理模块, 其用于删除 Oracle 数据库层中原有的非索引字表类, 并 基于中文字段新建非索引字表类 ; 0055 非索引字表创建模块, 其用于基于新建的非索引字表类创建非索引字表, 该非索 引字表中定义了所有不适用于进行数据查询的词语 ; 0056 文本索引建立模块, 其用于在 Oracle 数据库中, 对非索引字表中定义的词语以外 的所有中文字段创建文本索引。 0057 采用本实施例的海量中文数据查询系统及方法, 进行数据查询的具体实施过程如 下 : 0058 1、 删除原有词法分析器, 若没有词法分析器会报错, 则可以忽略。实现的程序如 下。
21、 : 0059 BEGIN 说 明 书 CN 104317937 A 6 4/6 页 7 0060 ctx_ddl.drop_preference(CHINA_LEXER) ; 0061 END ; 0062 2、 创建词法分析器, 新建的词法分析器用来智能提取分段器中的纯文本, 并将其 拆分为不连续的标记, 实际作用就是解析文本并标记, 为后续的检索提供前提条件。 实现程 序如下。 0063 0064 3、 删除原有非索引字表类, 如果没有非索引字表类会报错, 可以忽略, 实现程序如 下 : 0065 BEGIN 0066 ctx_ddl.drop_preference(CC_STOPLIS。
22、T) ; 0067 END ; 0068 4、 创建非索引字表类 0069 0070 5、 创建非索引字表 0071 非索引字表也称为停用词, 在 Oracle 数据库中, 全文索引允许用户建立停用词, 来屏蔽那些包含信息量比较小且出现概率比较高的词语。 0072 比如英文中的 a、 this、 are、 the 等词语, 几乎每篇文章中都会包含这些常用词, 因 此对这些词语进行索引的意义不大。本实施例列举了如下的停用词 : 0073 说 明 书 CN 104317937 A 7 5/6 页 8 0074 6、 用 CTXSYS/CTXSYS 用户登录数据库 0075 给 dbcustadm 。
23、赋权限 , 如果没有 CTXSYS 用户 , 可以先直接执行登录, 如果登录没 说 明 书 CN 104317937 A 8 6/6 页 9 有执行成功, 就需要 SPD 解决 CTXSYS 系统用户问题。 0076 GRANT EXECUTE ON ctx_ddl TO dbcustadm ; 0077 7、 创建索引, 实现的程序如下。 0078 CREATE INDEX dbcustadm.addrmsgindex ON dbcustadm.danalogmsgadd(addr_ msg)INDEXTYPE IS CTXSYS.CONTEXT 0079 PARAMETERS(MEMORY。
24、 50M LEXER dbcustadm.CHINA_LEXER STOPLIST dbcustadm. CC_STOPLIST) ; 0080 8、 验证索引是否创建成功 0081 能够用 contains 查询 , 就说明创建成功了, 举例如下 : 0082 SELECT*FROM danalogmsgadd WHERE contains(addr_msg,31 栋 1 单元 )0 ; 0083 SELECT*FROM danalogmsgadd WHERE contains(addr_msg,31 栋 1 单 元 and 1 室 )0 ; 0084 9: 在 PLSQL 工具下, 创建两。
25、个 job, 创建 job 的内容如下 : 0085 -job1- 每 15 分钟给 Oracle 数据库中的新增数据添加文本索引 0086 what:ctx_ddl.sync_index(dbcustadm.addrmsgindex) ; 0087 next date:sysdate 0088 interval:SYSDATE+(1/24/4) 0089 -job2- 每天进行一次索引优化 0090 what:CTX_DDL.OPTIMIZE_INDEX(dbcustadm.addrmsgindex,full) ; 0091 next date:sysdate 0092 interval:S。
26、YSDATE+1 0093 10、 job 执行检查 : 0094 select*from all_jobs ; 0095 创建的 job 会在这里展示出来 , 资源的应该也有 job ; 0096 last_date : 会记录下次 job 的运行时间 ,job1 应该是每 15 分钟执行一次 ,job2 是每天执行一次 ; 0097 total_time: 会记录 job 的运行次数 , 执行后数量递加。 0098 总地来说, 本实施例在数据库层根据技术方案中所介绍的方式建立需要使用 到的索引, 然后再维护索引的 job, 最后通过应用程序中使用模糊的 SQL 语句中采用 contains(addr_msg,xxxx)0 进行查询。 0099 以上所述仅为本发明的较佳实施例, 并不用以限制本发明, 凡在本发明的精神和 原则之内, 所作的任何修改、 等同替换、 改进等, 均应包含在本发明的保护范围之内。 说 明 书 CN 104317937 A 9 1/1 页 10 图 1 图 2 说 明 书 附 图 CN 104317937 A 10 。