elasticsearch搜索引擎索引构建方法及装置
技术领域
1.本发明涉及计算机技术领域,尤其涉及一种elasticsearch搜索引擎索引构建方法及装置。
背景技术:2.elasticsearch的索引,通常会基于logstash同步技术,采用定时执行sql语句的索引同步方案。此方案在跨多个业务数据源时处理复杂且同步效率低下,此外,定时执行机制在实时性方面得不到足够的保障,两次同步时间点之间的数据变更不能及时体现在索引中。
3.另一种常见的处理方式,是通过监听数据库日志变更消息(如mysql的binlog日志)方案进行同步,此方案确实可以解决实时性方面的不足,但是检索系统的单个文档,往往会横跨多个业务领域多个数据库实例和表,如典型的电商系统商品信息,不仅有商品的基本属性,还会包含其所属类别、卖家、评价、销量等信息,这些信息会分别存储在各自实体域对应的业务库中,单表的数据库变更日志,大大加大数据处理的复杂度,无法简单确定其影响的索引文档范围,比如:
4.大部分监听表中只有部分字段需纳入索引,未纳入索引范畴的字段变更同样会触发数据库变更日志,这部分变更日志的筛选识别如何处理,部分表字段的逻辑删除或者状态变更,是否会对整个文档的有效性产生影响,一对多或多对多关联的数据库变更日志,会产生多个关联表的多条数据变更记录,这些变更记录源源不断地产生,监听方无法得知某一事物的日志是否已全部获取,完整性无法保证。即便获取到的记录是完整的,映射到索引文档,不同的业务场景下,会对应不同的操作,这些操作难以统一处理。
5.因此,有必要提供一种新型的elasticsearch搜索引擎索引构建方法及装置,以克服上述缺陷。
技术实现要素:6.本发明的目的在于提供一种新型的elasticsearch搜索引擎索引构建方法,其提高数据同步效率,确保了索引批处理构建过程中及构建后的数据一致性。
7.为了达到上述目的,本发明提供一种elasticsearch搜索引擎索引构建方法,包括:
8.利用flink集群定时从数据库中导出全量索引目标数据,并创建新建索引库;
9.近实时索引服务监听业务数据变更消息通知,从数据库中读取最新数据更新到现有索引库,同时检测批量索引构建是否进行,并将批量索引数据更新到新建索引库;
10.将elasticsearch索引进行别名切换,将索引目标指向新建索引库。
11.进一步,所述利用flink集群定时从数据库中导出全量索引目标数据,并创建新建索引库包括:
12.给flink集群制定任务计划时间点,通过flink sql从数据库中导入全量索引目标
数据;
13.利用flink流处理框架处理批任务对全量索引目标数据进行关联和统计处理,再通过flink sql创建到新建索引库中。
14.进一步,所述近实时索引服务监听业务数据变更消息通知包括;
15.业务数据变更时,修改记录会写入数据,同时发送业务消息通知近实时索引服务,近实时索引服务订阅并监听此消息通知,作为后续索引更新的触发依据。
16.进一步,所述检测批量索引构建是否进行,并将批量索引数据更新到新建索引库包括:
17.当前批量索引正在构建中,批量索引数据是任务触发时的数据库快照数据,批量任务结束时的索引数据相对于当前更新的数据,近实时索引服务会将更新的数据暂存进redis;
18.在批量索引任务构建完成后,暂存在redis中的更新的数据回放到新建索引库中,批量任务过程中写入到新建索引库中的数据会被更新到最新状态;
19.当批量服务并没有在构建中,则数据直接同步到现有索引中。
20.进一步,所述将elasticsearch索引进行别名切换,将索引目标指向新建索引库包括:
21.索引别名的变更管理根据当前批量索引构建任务的状态判断是否触发索引别名切换操作;
22.当批量索引构建任务未启动或正在进行中时,索引别名指向现有索引库,现有索引维护有当前数据的所有变更状态;
23.当批量索引构建任务结束且redis暂存数据回放完成后,将索引别名指向新建索引库提供检索服务。
24.本发明另一发面还提供一种elasticsearch搜索引擎索引构建装置,该装置应用上述elasticsearch搜索引擎索引构建方法的步骤,包括近实时索引服务模块、数据库、flink集群模块以及redis模块;
25.近实时索引服务模块,用于监听elasticsearch搜索引擎业务数据变更消息通知,
26.数据库,用于elasticsearch搜索引擎业务数据的存储与管理;
27.flink集群模块,用于读取数据库中的全量索引目标数据并建立新建索引库;
28.redis模块,用于将近实时索引服务模块构建的批量索引任务进行暂存。
29.本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述所述的elasticsearch搜索引擎索引构建方法的步骤。
30.本发明还提供一种计算机终端,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述所述的elasticsearch搜索引擎索引构建方法的步骤。
31.与相关技术相比较,本发明的elasticsearch搜索引擎索引构建方法利用flink流处理框架处理批任务,借助其集群管理和协调能力,使用通用sql语句编写任务处理流程,解决了一般数据同步方案所面临的效率低下、处理过程繁杂的问题,同时,结合利用redis队列,对索引构建过程中的实时数据进行回放更新,有效解决了数据实时同步的难题,确保
了索引批处理构建过程中及构建后的数据一致性。
附图说明
32.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图,其中:
33.图1为本发明elasticsearch搜索引擎索引构建方法的流程图;
34.图2为本发明elasticsearch搜索引擎索引构建方法的索引变更示意图。
具体实施方式
35.下面将对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
36.请参阅图1,本发明提供一种elasticsearch搜索引擎索引构建方法,依赖于数据库的数据处理能力,转移到利用flink的集群处理能力,能有效的减轻数据库的负担,同时充分利用flink的集群处理和扩充能力,可以更加方便的承接更大规模的索引批量构建任务。
37.业务变更通过监听业务日志消息而不是数据库变更日志,在业务变更完成后,通过业务消息通知索引服务进行索引字段相关的数据获取,不需要进行复杂逻辑判断,整个过程完全可控。
38.本发明提供一种elasticsearch搜索引擎索引构建方法具体阐述如下:
39.业务数据变更时,修改记录会写入数据,同时发送业务消息通知近实时索引服务,近实时索引服务订阅并监听此类消息,作为后续索引更新的触发依据。
40.到达定时任务计划时间点时,flink集群通过flink sql从数据库中导入全量索引目标数据,加载到集群内进行关联和统计等各种处理,最后再通过flink sql写入到新建索引库中。
41.近实时索引服务监听到业务变更日志后,从数据库中读取当前最新数据,近实时更新到现有索引库中。
42.在上述近实时更新的过程中,同时检测批量索引服务是否正在进行,如果当前批量索引正在构建中,由于批量索引数据是任务触发时的数据库快照数据,批量任务结束时的索引数据相对于当前更新的数据,已经是旧的过时数据,因此,这个过程中,近实时索引服务会将最新的数据暂存进redis。
43.在批量索引任务构建完成后,暂存在redis中的数据会全部回放到批量任务新建索引库中,这样,在批量任务过程中写入的旧的过时数据会被更新到当前的最新状态。
44.回放处理完成后,将elasticsearch索引进行别名切换,将索引目标指向新建索引库,同时删除旧索引,至此,整个批量索引构建服务完成。
45.如果近实时索引构建过程中,批量服务并没有在运行状态,则数据直接同步到现
有索引库中,无需任何其它额外处理。
46.所有的搜索请求都通过索引别名请求elasticsearch搜索引擎,通过别名映射,屏蔽了底层索引库对前端的变更细节,搜索服务无需了解当前的索引构建状态,只需直接对接索引别名即可,降低了业务前端的请求处理复杂度。
47.请参阅图2,索引别名的变更管理根据当前批量索引构建任务的状态判断是否触发索引别名切换操作,当批量索引构建任务未启动或正在进行中尚未结束时,索引别名指向现有索引,现有索引维护有当前数据的所有变更状态。
48.当批量索引任务结束且redis暂存数据回放完成后,将索引别名指向批量索引任务新建索引库,至此,索引切换完成,批处理索引构建过程中,会存在新旧索引同时并存的状态,后续搜索服务都将通过批量索引任务新建索引库提供检索服务。
49.本发明另一发面还提供一种elasticsearch搜索引擎索引构建装置,该装置应用上述elasticsearch搜索引擎索引构建方法的步骤,包括近实时索引服务模块、数据库、flink集群模块以及redis模块;
50.近实时索引服务模块,用于监听elasticsearch搜索引擎业务数据变更消息通知,
51.数据库,用于elasticsearch搜索引擎业务数据的存储与管理;
52.flink集群模块,用于读取数据库中的全量索引目标数据并建立新建索引库;
53.redis模块,用于将近实时索引服务模块构建的批量索引任务进行暂存。
54.本发明将复杂的索引文档关联和计算处理逻辑从数据库系统中剥离,避免对数据库的照成性能负担,同时剥离后,可以充分利用flink集群的计算处理能力,提升索引构建效率,且具备充分的扩展能力以应对业务数据的不断增长所带来的压力;无需复杂编码,通过sql语句,即可串联整个索引库构造过程,提高了生产效率;通过对变更数据的订阅和回放,有效的解决了索引的准实时更新和实时生效问题。
55.本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述所述的elasticsearch搜索引擎索引构建方法的步骤。
56.本发明还提供一种计算机终端,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述所述的elasticsearch搜索引擎索引构建方法的步骤。
57.所述处理器执行所述计算机程序时实现上述各装置实施例中各模块/单元的功能。示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在终端设备中的执行过程。
58.所述计算机终端可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。可包括但不仅限于,处理器、存储器。可以包括更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备、总线等。
59.所述处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field
‑
programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
60.所述存储器可以是内部存储单元,例如硬盘或内存。所述存储器也可以是外部存储设备,例如插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。进一步地,所述存储器还可以既包括内部存储单元也包括外部存储设备。所述存储器用于存储所述计算机程序以及其他程序和数据。所述存储器还可以用于暂时地存储已经输出或者将要输出的数据。
61.所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本技术的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
62.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
63.本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
64.在本发明所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
65.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
66.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
67.所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计
算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read
‑
only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
68.以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。