本发明涉及计算机技术领域,特别是一种基于solr的电商索引文件的混合式更新方法。
背景技术:
在电商网站系统里,当商品库里的商品信息发生变动时,变动需要更新到搜索引擎系统的索引文件里。商品属性如价格、实时库存等敏感信息要求实时更新到索引文件中,而像商品名称或描述信息则允许存在一定延迟后再更新到索引文件中。目前,基于solr的搜索引擎的索引文件更新方法大致有如下几种方法:
一、全量更新
全量更新虽然可以采取分段读取数据,可以按自增主键分段或者按记录更新的时间截分段取。但由于数据源是可增删改查,这种更新会导致按自增id的数据在有些地方比较稀疏;而按记录的更新时间截,也有可能在某个时间段里更新大量数据,所以也会有不同时间段数据过稀或者过密的情况,这种情况导致分段取数据调控不方便。而且如果数据源的数据量大的话,完成一次全量更新得耗费较长的时间,而且可能真正需要更新到索引文件的记录只有某几条,所以对于数据源的数据量比较多的情况,全量更新明显不适合。
二、增量更新
增量更新是每隔一定的时间,把数据源有被修改的记录更新到索引文件中,所以存在数据源和索引文件之间数据同步的延迟。对于敏感数据如商品价格、实时库存等如果没能实时同步到索引文件的话,那么用户通过搜索引擎检索出来的商品的价格、实时库存则和实际的商品价格、实时库存不符。
3)实时更新
每次商品信息变动都向solr发送一个更新索引文件的请求。实时更新的方法会频繁对索引文件进行写入操作,影响索引文件的读取效率。而且客户端是以同步的方式向solr发送一个更新索引文件的请求,并不能保证该请求肯定会执行成功,如果中间出现网络故障,则会造成数据源和索引文件不一致。
技术实现要素:
本发明要解决的技术问题,在于提供一种基于solr的电商索引文件的混合式更新方法,将商品的敏感信息变动实时更新到索引文件中,而其它非敏感信息的变动采用定时增量更新的方式更新到索引文件中,这样既保证了搜索引擎的敏感信息的实时更新,又兼顾了搜索引擎的性能,尽可能减少对索引文件的频繁更新操作。
本发明是这样实现的:一种基于solr的电商索引文件的混合式更新方法,事先将商品信息分为敏感信息和非敏感信息,并且基于solrj开发一个web服务命名为solrj服务,所述solrj服务用于实现实时更新索引文件和定时增量更新索引文件,然后进行如下步骤:
步骤s1、商品管理系统修改商品信息并将商品修改的信息保存到数据库,同时将商品记录的iscommit字段值改为“f”,且lastupdateddatetime字段值记录修改时间;
步骤s2、判断本次修改商品信息的操作是否为删除操作,如果是删除操作,则更改商品记录的expired字段的值为“t”,等待所述solrj服务进行所述定时增量更新索引文件;如果不是删除操作,则继续执行步骤s3;
步骤s3、判断被修改的商品信息是否包含有敏感信息,如果是,则所述solrj服务进行所述实时更新索引文件;如果不是,则等待所述solrj服务进行所述定时增量更新索引文件。
进一步地,所述实时更新索引文件包括以下步骤:
步骤s11、所述商品管理系统异步调用所述solrj服务提供的实时更新索引接口;
步骤s12、所述solrj服务接收到调用请求后,向solr搜索服务器发送实时更新索引文件的请求;
步骤s13、所述solr搜索服务器更新完索引文件后,反馈更新成功通知消息给所述solrj服务;
步骤s14、所述solrj服务向所述商品管理系统发送异步通知消息,通知所述商品管理系统当前实时更新索引请求已成功执行;
步骤s15、所述商品管理系统收到异步通知消息后,更新iscommit字段的值为“t”,后给所述solrj服务返回一条修改成功的通知消息;
步骤s16、如果所述solrj服务收到所述商品管理系统返回的修改成功的通知消息后,则本次实时更新索引结束;如果没有收到所述商品管理系统返回的修改成功的通知消息,则会每隔一周期重复步骤s14和s15,如果都没有收到返回的修改成功的通知消息,则表示这条商品记录的iscommit的字段值没有成功改为“t”,那么结束本次实时更新索引文件,同时将本次修改的商品信息等待所述solrj服务进行所述定时增量更新索引文件,重新被更新一次。
进一步地,所述步骤s16中,最多重复3次步骤s14和s15,所述周期为1min。
进一步地,所述定时增量更新索引文件包括以下步骤:
步骤s21、首先查询config.properties配置文件中的最后一次定时增量更新索引文件的时间last_index_time;
步骤s22、搜索数据库商品记录的lastupdateddatetime大于last_index_time,并且iscommit字段为“f”的记录集;遍历所述记录集,如果记录的expired字段为“t”,则从索引文件中删除该条记录,如果不是,则更新索引文件,并保存当前更新索引文件的时间到config.properties配置文件中的last_index_time。
本发明具有如下优点:本发明提供一种基于solr的电商索引文件的混合式更新方法,事先将商品的信息分为敏感信息和非敏感信息,在敏感信息变动时采用实时更新索引文件的方式更新,而其它非敏感信息的变动采用定时增量更新索引文件的方式更新,这样既保证了搜索引擎的敏感信息的实时更新,又兼顾了搜索引擎的性能,尽可能减少对索引文件的频繁更新操作。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明一种基于solr的电商索引文件的混合式更新方法的执行流程图。
图2为本发明所述的实时更新索引文件的时序图。
图3为本发明所述的定时增量更新索引文件的时序图。
图4为本发明的搜索引擎系统的结构图。
具体实施方式
请参阅图1-4所示,本发明一种基于solr的电商索引文件的混合式更新方法,事先将商品信息分为敏感信息和非敏感信息,并且基于solrj开发一个web服务命名为solrj服务,所述solrj服务用于实现实时更新索引文件和定时增量更新索引文件,然后进行如下步骤:
步骤s1、商品管理系统修改商品信息并将商品修改的信息保存到数据库,同时将商品记录的iscommit字段值改为“f”,且lastupdateddatetime字段值记录修改时间;
步骤s2、判断本次修改商品信息的操作是否为删除操作,如果是删除操作,则更改商品记录的expired字段的值为“t”,等待所述solrj服务进行所述定时增量更新索引文件;如果不是删除操作,则继续执行步骤s3;
步骤s3、判断被修改的商品信息是否包含有敏感信息,如果是,则所述solrj服务进行所述实时更新索引文件;如果不是,则等待所述solrj服务进行所述定时增量更新索引文件。
将敏感信息变动时采用实时更新索引文件的方式更新,而其它非敏感信息的变动采用定时增量更新索引文件的方式更新,这样既保证了搜索引擎的敏感信息的实时更新,又兼顾了搜索引擎的性能,尽可能减少对索引文件的频繁更新操作。
优选地,所述实时更新索引文件包括以下步骤:
步骤s11、所述商品管理系统异步调用所述solrj服务提供的实时更新索引接口;
步骤s12、所述solrj服务接收到调用请求后,向solr搜索服务器发送实时更新索引文件的请求;
步骤s13、所述solr搜索服务器更新完索引文件后,反馈更新成功通知消息给所述solrj服务;
步骤s14、所述solrj服务向所述商品管理系统发送异步通知消息,通知所述商品管理系统当前实时更新索引请求已成功执行;
步骤s15、所述商品管理系统收到异步通知消息后,更新iscommit字段的值为“t”,后给所述solrj服务返回一条修改成功的通知消息;
步骤s16、如果所述solrj服务收到所述商品管理系统返回的修改成功的通知消息后,则本次实时更新索引结束;如果没有收到所述商品管理系统返回的修改成功的通知消息,则会每隔一周期重复步骤s14和s15,如果都没有收到返回的修改成功的通知消息,则表示这条商品记录的iscommit的字段值没有成功改为“t”,那么结束本次实时更新索引文件,同时将本次修改的商品信息等待所述solrj服务进行所述定时增量更新索引文件,重新被更新一次,保证了数据库和索引文件的一致。。
优选地,所述步骤s16中,最多重复3次步骤s14和s15,所述周期为1min。
优选地,所述定时增量更新索引文件包括以下步骤:
步骤s21、首先查询config.properties配置文件中的最后一次定时增量更新索引文件的时间last_index_time;
步骤s22、搜索数据库商品记录的lastupdateddatetime大于last_index_time,并且iscommit字段为“f”的记录集;遍历所述记录集,如果记录的expired字段为“t”,则从索引文件中删除该条记录,如果不是,则更新索引文件,并保存当前更新索引文件的时间到config.properties配置文件中的last_index_time。
实施例一:
事先将商品的价格、实时库存归类为敏感信息并作为一个可以维护的字典,其它的商品信息作为非敏感信息;当商品的价格或实时库存修改后,则所述solrj服务进行所述实时更新索引文件;当其它的商品信息修改后,则所述solrj服务进行定时增量更新。用户可以根据实际情况灵活的自定义,将商品信息分为敏感信息和非敏感信息。
本发明的优点:事先将商品的信息分为敏感信息和非敏感信息,在敏感信息变动时采用实时更新索引文件的方式更新,而其它非敏感信息的变动采用定时增量更新索引文件的方式更新,这样既保证了搜索引擎的敏感信息的实时更新,又兼顾了搜索引擎的性能,尽可能减少对索引文件的频繁更新操作。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。