买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】基于Redis的ElasticSearch分页查询方法和设备_北京明朝万达科技股份有限公司_201811395515.0 

申请/专利权人:北京明朝万达科技股份有限公司

申请日:2018-11-22

公开(公告)日:2020-07-24

公开(公告)号:CN109492148B

主分类号:G06F16/951(20190101)

分类号:G06F16/951(20190101);G06F16/958(20190101)

优先权:

专利状态码:有效-授权

法律状态:2020.07.24#授权;2019.04.12#实质审查的生效;2019.03.19#公开

摘要:本发明提供了一种基于Redis的ElasticSearch分页查询的方法,包括:数据请求端从外部发起数据查询请求;计算查询请求的分页参数,并与分页阈值进行比较,根据比较的结果确定向ElasticSearch发送数据请求的方式,并发送数据查询请求;ElasticSearch返回查询结果,将结果数据封装并返回给所述数据请求端。本发明能够有效解决ElasticSearch深度分页时成本高,速度慢的问题。

主权项:1.一种基于Redis的ElasticSearch分页查询的方法,其特征在于包括下述步骤:步骤1:数据请求端从外部发起数据查询请求;步骤2:计算查询请求的分页参数,并与分页阈值进行比较,根据比较的结果确定向ElasticSearch发送数据请求的方式,并发送数据查询请求;步骤3:ElasticSearch返回查询结果,将结果数据封装并返回给所述数据请求端;根据比较的结果确定向ElasticSearch发送数据请求的方式,并发送数据查询请求,包括:当分页参数小于分页阈值时,直接向ElasticSearch发送查询数据请求;当分页参数大于分页阈值时,则需要通过Redis数据库结合ElasticSearch构造向ElasticSearch查询的请求方式,然后向ElasticSearch发送查询数据请求;所述通过Redis数据库结合ElasticSearch构造向ElasticSearch查询的请求方式,包括:1、根据查询请求的统一资源定位符url和查询参数计算出一个查询请求的唯一标识,所述查询参数不包括分页参数;2、以所述查询唯一标识作为关键字在Redis数据库中查找对应数据,如果查询到相关数据,则转5;否则转3;3、启动后台线程向ElasticSearch进行Scroll查询,ElasticSearch获取满足查询条件的所有文档的唯一标识的集合并返回;4以查询请求的唯一标识作为关键字将接收到的所述文档的唯一标识的集合追加存储到Redis的链表中,并设置该Redis中所述链表的关键字的过期时间,即缓存失效时间;5根据分页参数对Redis数据库中的关键字值对应的链表进行分页查询,获取链表中存储的对应位置的文档唯一标识集合;6根据上一步获取到的文档唯一标识集合构造向ElasticSearch查询数据的请求;所述缓存失效时间按照如下方式确定:T=C×P×k,其中,T为所述缓存失效时间,其单位为秒,C是Redis数据库的内存容量,其单位为吉字节GB,P是所述内存的空余容量占全部内存空间容量的比例,k为调整系数,其为小于1的正数。

全文数据:基于Redis的ElasticSearch分页查询方法和设备技术领域本发明涉及大数据处理领域,具体涉及一种基于Redis的ElasticSearch分页查询的方法和电子设备。背景技术当前互联网时代下,企业所产生的数据量都几乎呈爆炸式增长,大量的数据存储以及查询、聚合都显得尤为重要。ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,是目前流行的企业级搜索引擎。ElasticSearch的使用解决了大量数据的快速、高效查询、聚合。但是在大数据量的分页查询时ElasticSearch则不能无限制的满足需要。为了解决现有分页功能不能满足页面分页显示数据的问题,中国发明CN201610515965.3提出了“一种获取Elasticsearch分页数据的方法及装置”的技术方案,如图1所示,该技术方案包括:根据接收到的页面分页显示请求,获取页面分页显示请求中包含的会话标识和请求参数,将会话标识和请求参数转换为唯一字符串,确定为页面分页显示请求的唯一标识;若检索缓冲区中包含页面分页显示请求的唯一标识,则根据页面分页显示请求的唯一标识,从检索缓存区中获取与所述页面分页显示请求对应的Elasticsearch数据唯一标识;以获取的Elasticsearch数据唯一标识作为参数向Elasticsearch发送数据检索请求,将Elasticsearch返回的数据确定为页面分页显示请求对应的返回数据。但是,由于ElasticSearch默认分页查询的最大文档数目为10000,虽然修改ElasticSearch配置文件提高该数字可以解决一定范围内的分页查询,但是修改配置所导致的ElasticSearch的运行成本,如内存消耗,处理器CPU占用,索引的规模将急剧上升;此外,虽然ElasticSearch提供了Scroll查询,但是Scroll查询是单向的,只能进行下一页的查询不能进行上一页的查询。此外,ElasticSearch的深度分页要使用Elasticsearch的缓存,增加了ElasticSearch运行的负担,同时,由于还缺乏有效的缓存失效机制,使得缓存的部署成本非常高。可见,如何用较低的代价解决上述技术问题是本领域技术人员非常关注的问题。发明内容本发明针对ElasticSearch在当超过10000条数据的分页查询时所面临的上述技术问题,创造性将将高性能的内存数据库Redis与ElasticSearch的Scroll查询相结合,提供了一种高效、稳定的分页查询解决方案,能够以较低的成本实现深度分页查询和双向Scroll查询。Redis是一个关键字key-value存储系统。它支持存储的value类型相对更多,包括string字符串、list链表、set集合和zset有序集合、Hash哈希类型的映射表。这些数据类型都支持pushpop、addremove及取交集并集和差集及相对丰富的操作,而且这些操作都是原子性的。同时提供了数据的超时废弃功能,list链表、和zset有序集合还提供了近似于分页的相关功能。Redis是一个高性能的关键字key-value数据库。它提供了Java,Python,Ruby,Perl,PHP客户端,使用很方便。为实现上述目的,本发明提出了基于Redis的ElasticSearch分页查询的方法和电子设备。具体的,采用以下技术方案:第一方面,本发明提供了一种基于Redis的ElasticSearch分页查询的方法,包括:步骤1:数据请求端从外部发起数据查询请求;步骤2:计算查询请求的分页参数,并与分页阈值进行比较,根据比较的结果确定向ElasticSearch发送数据请求的方式,并发送数据查询请求;步骤3:ElasticSearch返回查询结果,将结果数据封装并返回给所述数据请求端。在上述技术方案的基础上,进一步的,所述步骤2中的根据比较的结果确定向ElasticSearch发送数据请求的方式并发送数据查询请求还包括:当分页参数小于分页阈值时,直接向ElasticSearch发送查询数据请求;当分页参数大于分页阈值时,则需要通过Redis数据库结合ElasticSearch构造向ElasticSearch查询的请求方式,然后向ElasticSearch发送查询数据请求。在上述技术方案的基础上,进一步的,所述通过Redis数据库结合ElasticSearch构造向ElasticSearch查询的请求方式还包括:1、根据查询请求的统一资源定位符url和去掉分页参数的其他参数计算出一个查询请求的唯一标识;2、以所述查询唯一标识作为关键字在Redis数据库中查找对应数据,如果查询到相关数据,则转5;否则转3;3、启动后台线程向ElasticSearch进行Scroll查询,ElasticSearch获取对应条件的所有文档的唯一标识的集合并返回;4以查询请求的唯一标识作为关键字将接收到的所述文档的唯一标识的集合追加存储到Redis的链表中,并设置该Redis中所述链表的关键字的过期时间,即缓存失效时间;5根据分页参数对Redis数据库中的关键字值对应的链表进行分页查询,获取链表中存储的对应位置的文档唯一标识集合;6根据上一步获取到的文档唯一标识集合构造向ElasticSearch查询数据的请求。在上述技术方案的基础上,进一步的,所述缓存失效时间按照如下方式确定:T=C×P×k,其中,T为所述缓存失效时间,其单位为秒,C是Redis数据库的内存容量,其单位为吉字节GB,P是所述内存的空余容量占全部空间的比例,k为调整系数,其为小于1的正数。在上述技术方案的基础上,进一步的,所述数据请求端为是能够发起数据请求的任何一种工具或者设备。在上述技术方案的基础上,进一步的,所述数据请求端为浏览器。在上述技术方案的基础上,进一步的,所述分页包括深度分页。在上述技术方案的基础上,进一步的,所述分页阈值大于等于10000。在上述技术方案的基础上,进一步的,所述k优选为0.52。另一方面,本发明还提供了一种基于Redis的ElasticSearch分页查询的电子设备,包括:处理器和存储器,所述存储器具有存储有程序代码的介质,当所述处理器读取所述介质存储的程序代码时,所述电子设备能够执行上述任意技术方案所述的方法。与现有技术方案相比,本发明实施方式的技术方案至少具有以下有益的技术效果:1在不修改ElasticSearch分页查询的最大文档数目的情况下,提供有效的深度分页功能,解决了Elasticsearch深度分页缺陷,大大降低了ElasticSearch的部署成本。2由于将数据缓存到Redis数据库,减少Elasticsearch的负担,同时通过scroll查询出的数据文档唯一标识集合在Redis中以List链表的形式进行存储,因而不影响查询缓存数据的效率。3提供了缓存失效机制,通过配置文件对缓存数据的使用失效时间进行配置,当时间过期后删除对应缓存数据以减少Redis的内存占用,对于一些对于时效性需求较弱的需求可适当的调整失效时间以减少系统开支。4通过Redis中的List链表的存储特性实现了深度分页,通过获取查询请求传入的分页参数,通过LRANGE关键字keystartstop命令对应的接口获取列表指定范围内的元素,获取分页参数对应的文档唯一标识集合,然后通过文档唯一标识集合查询对应的分页数据。附图说明图1是现有技术中提出的一种获取Elasticsearch分页数据的方法的流程示意图;图2是本发明提出的基于Redis的ElasticSearch分页查询方法的一个更佳实施方式的结构及流程示意图;图3是本发明提出的基于Redis的ElasticSearch分页查询方法的一个具体应用场景的示意图;图4是本发明提出的基于Redis的ElasticSearch分页查询的电子设备的一个更佳实施方式的结构。下面对本发明进一步详细说明。但下述的实例仅仅是本发明的简易例子,并不代表或限制本发明的权利保护范围,本发明的保护范围以权利要求书为准。具体实施方式下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。为更好地说明本发明,便于理解本发明的技术方案,本发明的典型但非限制性的实施方式如下,这里需要特别说明的是本发明说明书所列的实施方式仅是为了说明问题方便而给出的示例性实施方法,其不得理解为是本发明唯一正确的实施方式,更不得理解为是对本发明保护范围的限制性说明。本发明的一个基于Redis的ElasticSearch分页查询的方法的一个更佳实施方式参见图2,所述方法基于Redis数据库和ElasticSearch搜索服务器。当进行分页查询时,其包括如下步骤:S201:数据请求端从外部发起数据查询请求;S202:计算查询请求的分页参数,并与分页阈值进行比较,具体的,该分页阈值默认为10000,当分页参数小于分页阈值时,转到S209;当大于分页阈值,转到S203;S203:根据查询请求的统一资源定位符url和查询参数去掉分页参数计算出一个查询请求的唯一标识;S204:以所述查询唯一标识作为关键字关键字key在Redis数据库中查找对应数据List链表,如果查询到相关数据,则转S207;否则转S205;S205:启动后台线程向ElasticSearch进行Scroll查询,ElasticSearch获取满足查询条件的所有文档的唯一标识id的集合并返回;S206:以查询请求的唯一标识作为关键字key将接收到的所述文档的唯一标识id的集合追加存储到Redis的List链表中,设置该Redis中所述List链表的关键字key的过期时间,即缓存失效时间;S207:根据分页参数对Redis数据库中的关键字key值对应的List支持分页进行分页查询,获取List链表中存储的对应位置的文档唯一标识id集合;S208:根据上一步获取到的文档唯一标识集合构造向ElasticSearch查询数据的请求;S209:向EsElasticSearch发送查询数据请求;S210:ElasticSearch返回查询结果,将结果数据封装并返回给所述数据请求端。在上述实施方式的基础上,进一步的,作为一个更佳的实施方式,在步骤S206中,还包括定期清理缓存的步骤,具体包括:检查Redis数据库中List队列中每个元素的缓存失效时间,当满足失效时间,则删除所述元素和对应的Scroll标识id值。通过该步骤,能够确保Redis数据库空间处于较小的规模,提高数据库的处理效率,并且,对于Redis通过以内存缓存数据的方式来实现的数据库的高性能,较小规模的数据量对内存的容量需求也相对较低,从而在确保高性能的情况下,仍能保持较低的实现代价。为了进一步优化缓存数据空间的效率,一个更优的实施方式对缓存的失效时间采取了动态确定的方式,所述缓存失效时间基于如下方式确定:T=C×P×k,其中,T为缓存的失效时间,其单位为秒,C是Redis数据库的内存容量,其单位为吉字节GB,P是所述内存的空余容量占全部空间的比例,k为调整系数,其为小于1的正数。通过这种方式,使得失效时间与内存空间的空余容量保持一种正相关的关系,当内存空间空闲容量大时,则失效时间长,反之则短。这种与传统的保持固定值的失效时间的方式相比,具有以下优点:当保存在Redis内存中的数据量增大时,内存空间的占有率会升高,空余空间的容量会变少,随着新数据的不断加入,会使得Redis的内存空间越来越小,在传统方式下,Redis必须将内存中的部分数据转移到磁盘存储空间中,这增加了Redis的工作负荷,从而降低了Redis的整体运行性能。为减少由于内存和磁盘数据交换所导致的工作负荷增加,本实施方式提出了新的缓存数据处理策略,通过将缓存的失效时间与Redis的内存空余空间建立相关关系,采取动态改变的策略。当内存空间使用率越高时,则失效时间越短,数据的清除率则越高,从而使得内存的应用效率越高,有效减少了内存与磁盘之间的数据交换的频率,提升Redis的整体工作效能。经过大量的实践测算,所述调整系数k优选为0.52。参见图3,为本发明的一个具体应用的实施场景,用户通过浏览器负责发送外部查询请求;Web服务器负责针对查询请求中的查询参数的计算、向Elasticsearch数据发出查询、向Redis数据库中的数据缓存发送写入和读取的请求;Elasticsearch数据库负责提供数据;Redis数据库负责数据的缓存和提供。通过上述实施方式,能够根据查询的具体分页参数计算结果来决定是否进行深度分页,并实现大量Elasticsearch数据的深度分页;并通过与Redis数据库结合,由于占用少甚至不占用Elasticsearch的内存,因而实现了更高效的查询;并且,本实施方式由于设置缓存数据的过期时间,可实现缓存内容的动态更新,使得Redis数据库也能够保持较高的性能。作为本发明的第二个方面,还提供一种电子设备,参见图4,包括:处理器1120和存储器1140,所述存储器1140具有存储有程序代码的介质计算机可读存储介质,当所述处理器读取所述介质存储的程序代码时,通过输入单元1130和输出单元1150的协助,使得所述电子设备能够执行上述方法步骤。对于方法实施,本发明提出的各种实施方式可以以使用例如计算机软件、硬件或其任何组合的计算机可读介质来实施。对于硬件实施,本发明提出的各种实施方式可以通过使用特定用途集成电路ASIC、数字信号处理器DSP、数字信号处理装置DSPD、可编程逻辑装置PLD、现场可编程门阵列FPGA、处理器、处理器、微处理器、微处理器、被设计为执行这里描述的功能的电子单元中的至少一种来实施,在一些情况下,本发明提出的各种实施方式可以在图所示的处理器1120中实施。对于软件实施,本发明提出的各种实施方式可以与允许执行至少一种功能或操作的单独的软件模块来实施。软件代码可以由以任何适当的编程语言编写的软件应用程序或程序来实施,软件代码可以存储在存储器1140中并且由处理器1120执行。申请人声明,本发明通过上述实施方式来说明本发明的详细结构特征,但本发明并不局限于上述详细结构特征,即不意味着本发明必须依赖上述详细结构特征才能实施。所属技术领域的技术人员应该明了,对本发明的任何改进,对本发明所选用部件的等效替换以及辅助部件的增加、具体方式的选择等,均落在本发明的保护范围和公开范围之内。以上详细描述了本发明的优选实施方式,但是,本发明并不限于上述实施方式中的具体细节,在本发明的技术构思范围内,可以对本发明的技术方案进行多种简单变型,这些简单变型均属于本发明的保护范围。另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本发明对各种可能的组合方式不再另行说明。此外,本发明的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明的思想,其同样应当视为本发明所公开的内容。

权利要求:1.一种基于Redis的ElasticSearch分页查询的方法,其特征在于包括下述步骤:步骤1:数据请求端从外部发起数据查询请求;步骤2:计算查询请求的分页参数,并与分页阈值进行比较,根据比较的结果确定向ElasticSearch发送数据请求的方式,并发送数据查询请求;步骤3:ElasticSearch返回查询结果,将结果数据封装并返回给所述数据请求端。2.如权利要求1所述的方法,其特征在于所述步骤2中的根据比较的结果确定向ElasticSearch发送数据请求的方式并发送数据查询请求包括下述步骤:当分页参数小于分页阈值时,直接向ElasticSearch发送查询数据请求;当分页参数大于分页阈值时,则需要通过Redis数据库结合ElasticSearch构造向ElasticSearch查询的请求方式,然后向ElasticSearch发送查询数据请求。3.如权利要求2所述的方法,其特征在于所述通过Redis数据库结合ElasticSearch构造向ElasticSearch查询的请求方式包括下述步骤:1、根据查询请求的统一资源定位符url和查询参数计算出一个查询请求的唯一标识,所述查询参数不包括分页参数;2、以所述查询唯一标识作为关键字在Redis数据库中查找对应数据,如果查询到相关数据,则转5;否则转3;3、启动后台线程向ElasticSearch进行Scroll查询,ElasticSearch获取满足查询条件的所有文档的唯一标识的集合并返回;4以查询请求的唯一标识作为关键字将接收到的所述文档的唯一标识的集合追加存储到Redis的链表中,并设置该Redis中所述链表的关键字的过期时间,即缓存失效时间;5根据分页参数对Redis数据库中的关键字值对应的链表进行分页查询,获取链表中存储的对应位置的文档唯一标识集合;6根据上一步获取到的文档唯一标识集合构造向ElasticSearch查询数据的请求。4.如权利要求3所述的方法,其特征在于所述缓存失效时间按照如下方式确定:T=C×P×k,其中,T为所述缓存失效时间,其单位为秒,C是Redis数据库的内存容量,其单位为吉字节GB,P是所述内存的空余容量占全部内存空间容量的比例,k为调整系数,其为小于1的正数。5.如权利要求4所述的方法,其特征在于所述数据请求端为是能够发起数据请求的任何一种工具或者设备。6.如权利要求4所述的方法,其特征在于所述数据请求端为浏览器。7.如权利要求5或6所述的方法,其特征在于所述分页包括深度分页。8.如权利要求7所述的方法,其特征在于所述分页阈值为10000。9.如权利要求8所述的方法,其特征在于所述k优选为0.52。10.一种基于Redis的ElasticSearch分页查询的电子设备,其特征在于包括:处理器和存储器,所述存储器具有存储有程序代码的介质,当所述处理器读取所述介质存储的程序代码时,所述电子设备能够执行权利要求1-9任一项所述的方法。

百度查询: 北京明朝万达科技股份有限公司 基于Redis的ElasticSearch分页查询方法和设备

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。