CN114579596A - 一种实时更新搜索引擎索引数据的方法及系统 - Google Patents
一种实时更新搜索引擎索引数据的方法及系统 Download PDFInfo
- Publication number
- CN114579596A CN114579596A CN202210485181.6A CN202210485181A CN114579596A CN 114579596 A CN114579596 A CN 114579596A CN 202210485181 A CN202210485181 A CN 202210485181A CN 114579596 A CN114579596 A CN 114579596A
- Authority
- CN
- China
- Prior art keywords
- index
- data
- offset
- search engine
- flag
- 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.)
- Granted
Links
Images
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及到一种实时更新搜索引擎索引数据的方法及系统,该方法中原始数据经过接收模块进入数据队列,再存储到数据库和搜索引擎集群中,后台管理模块配置索引结构并存到数据库中,由全量索引模块负责执行索引配置的分发及数据导入,自动化完成增量数据收集、全量数据重新导入、索引结构配置更新和索引切换工作,同时不会影响到线上对外提供的搜索服务;还涉及到一种实时更新搜索引擎索引数据的系统。本发明的方法和系统在数据更新的过程中对于用户来说是无感知的,可以持续使用搜索引擎提供的相关服务,大大提升了工作效率,系统稳定性和产品体验也能得到充分保障。
Description
技术领域
本发明涉及数据处理,特别涉及到一种确保数据一致性的实时更新搜索引擎索引数据的方法及系统。
背景技术
人们每天都会接收到海量信息,获取信息是人类认知世界、生存发展的刚需。随着大数据时代的到来和移动互联网的兴起,人们的日常生活的方方面面基本上都可以在手机上操作完成。打开手机也是琳琅满目的各种类型的APP, 网上购物、聊天、看各种视频、听歌、学习等等,衣食住行全覆盖。但是海量信息也带来诸多困扰,就是如何快速准确找到自己想要的各种信息是一项新的挑战。无疑搜索引擎成为了人们主动获取信息的最重要手段,当我们需求非常明确的时候,在搜索框中输入要找的内容,搜索引擎就可以快速准确的返回用户想要的结果。但是由于每天有大规模新增的数据,数据业务字段在随着时间推移不断有变化需要更新,同时也会有多模态、多场景需要适配,以及还有搜索效果优化、缺陷的修复等工作,搜索索引结构更新及数据保持一致性同步等需求变得越来越迫切越来越重要。
搜索引擎索引更新需要解决以下主要问题:
1)海量数据进行更新时,要有机制保证不能造成数据接收服务堵塞导致超时严重甚至不可用的情况;
2)支持高并发,可以动态扩容,当面对流量洪峰时依然保证服务正常;
3)当索引结构更新时,尽最大可能保证线上搜索服务不受影响,对于用户几乎是不可感知的;
4)索引切换的时候,一定要确保新老索引中的数据是一致的,不能出现数据丢失等不一致的情况;
5)数据或者索引更新不成功时,要有自动的恢复机制;
在现有技术中,搜索引擎的索引更新常用的主要是有以下两种方式:一是手动配置一套新的索引或者一套环境,保持正常的增量数据接收和对外提供搜索服务,首先灌入历史数据,不断的导入新数据达到和线上环境基本相同的数据量后,再手动切换线上生产环境的搜索索引,最终完成了搜索引擎索引更新的工作。但是,这种方法首先是需要人为干预,需要投入额外的人力和时间,人为操作也给系统稳定性带来了潜在风险,进而可能影响线上搜索服务,同时还可能有额外的服务器相关的成本投入,每次更改都会是工作量较大、成本也较高。二是暂停线上服务进行系统升级维护。在原有环境下进行索引结构更新,重新全量同步数据完成以后,再接入增量数据,最终重新上线。这种操作方式处理流程相对简单一些,但是需要中断线上服务,当数据量非常大的时候,耗时会进一步增加,大大影响了产品体验。
发明内容
本发明专利的目的在于克服上述现有技术中存在的不足,提供一种确保数据一致性的实时更新搜索引擎索引数据的方法及系统。本发明的方法和系统可以自动化完成增量数据收集、全量数据重新导入、索引结构配置更新、索引切换等工作,同时不会影响到线上对外提供的搜索服务,数据更新的过程,对于用户来说是无感知的,可以持续使用搜索引擎提供的相关服务。大大提升了工作效率,系统稳定性和产品体验也能得到充分保障。
为了达到上述发明目的,本发明提供的技术方案如下:
一种实时更新搜索引擎索引数据的方法,该方法通过一次全量数据更新、位置标记、两次追加数据、切换再追加的数据同步机制,保证线上搜索服务不中断,在保证数据一致性前提下自动完成数据更新,该方法包括如下步骤:
第一步,数据接收,接收所有待搜索的结构化数据、半结构化数据及非结构化数据;
第二步,接收的数据进入数据队列,数据队列中暂存接收到的原始待搜索数据,用offset参数标识数据队列中的数据消费情况;
第三步,启动数据同步模块,从数据队列中不断地消费新进入的数据,所述消费是指通过对offset执行不断加1位移的方式,把存在于数据队列中对应offset位置的数据读出来,接下来同步到数据库和搜索引擎集群两个地方;
第四步,分别存储数据至数据库和搜索引擎集群中,存储的数据到数据库用于数据备份,存储的数据到搜索引擎集群供用户数据搜索,同时把消费队列的位置信息flag_offset写到数据库中,用flag_offset作为起始位置从队列中消费数据,完成以后把最新的offset值更新到数据库中的flag_offset字段中;
第五步,在后台管理模块配置索引结构并存到数据库中,同时将该索引结构在数据库中对应的flag_index字段设置为0,后台管理模块对原始待搜索数据进行增、删、改、查操作,对于增、删、改这三种操作牵涉到数据的变化,将变化的数据通过API接口传输到数据接收模块,并通过第三步和第四步将变化的数据同步到数据库和搜索引擎集群中,可视化方式执行对搜索引擎索引集群的增、删、改、查操作,并将操作结果存到数据库中;
第六步,由全量索引模块负责执行索引配置的分发及数据导入,自动化完成增量数据收集、全量数据重新导入、索引结构配置更新和索引切换工作,同时不会影响到线上对外提供的搜索服务。对于本发明实时更新搜索引擎索引数据的方法,优化设计中,所述第五步后台管理模块对原始待搜索数据进行增、删、改、查操作时,在后台管理模块的系统界面触发设定的新增、删除、更新、查询按键,进而发出对应的新增、删除、更新或查询指令,指令通过后端API接口将数据变化发送至搜索集群进行数据更新。
对于本发明实时更新搜索引擎索引数据的方法,优化设计中,所述第六步的全量索引模块执行如下步骤:
S1,全量索引模块初次启动,扫描数据库中的索引表,查看是否存在flag_index为0的索引,若无则休息N秒进行等待,若有的话则执行S2步骤;
S2,从数据库中拉取flag_index为0的索引信息,该索引信息的索引名称记为index_name,并按照固定文件模式同步到搜索引擎集群中,更新flag_index为1;
S3,结合配置的索引名称index_name和version_index生成搜索引擎所使用的临时索引{index_name}_{version_index},index_a;
S4,全量更新数据,从mysql中读取flag_offset值,记为first_offset;从mysql中获取全部待搜索的数据,写入到index_a中;
S5,第一次追加数据,从mysql中读取最新的flag_offset的值,记为second_offset,然后去数据队列中拉取offset在区间[first_offset, second_offset]中的数据,并写入到index_a中;
S6,第二次追加数据,从mysql中读取最新的flag_offset的值,记为third_offset,然后去数据队列中拉取offset在区间[second_offset, third_offset]中的数据,并写入到index_a中;
S7,切换索引,将线上搜索引擎在使用中的index_name切换到index_a,完成数据同步和索引切操作,同时将该索引对应的数据库中的flag_index置为2;
S8,进行下一轮扫描是否有flag_index为0的索引,重复第S1步至第S7步。
对于本发明实时更新搜索引擎索引数据的方法,所述的固定文件模式为搜索引擎集群预定义的JSON格式文件,包括搜索集群使用的分析器、分词器、过滤器和索引配置信息。
一种实时更新搜索引擎索引数据的系统,该系统的结构模块组成包括有数据接收模块、数据队列、数据同步模块、数据存储、搜索引擎集群、后台管理模块和全量索引模块,原始数据经过数据接收模块接收后进入数据队列,再由数据同步模块分别存储到数据库和搜索引擎集群中,后台管理模块配置索引结构并存储到数据库中,所述全量索引模块执行索引配置的分发至数据库,并将数据库中存储数据导入至搜索引擎集群中呈现。
在本发明实时更新搜索引擎索引数据的系统中,所述数据接收模块通过API接口接收所有待搜索的结构化数据、半结构化数据及非结构化数据。
在本发明实时更新搜索引擎索引数据的系统中,所述的数据队列暂存接收到的原始待搜索数据,采取顺序读写的方式,再通过集群方式部署,通过offset参数标识队列中的数据消费情况,offset从0开始计数,每次消费掉的条数会在offset上累加。
在本发明实时更新搜索引擎索引数据的系统中,所述的数据同步模块从数据队列中不断的消费新进入的数据,接下来会同步到两个地方,一个是数据库用于数据备份,另外一个是搜索引擎集群用户数据搜索,同时把消费队列的位置信息flag_offset也写到数据库中,后面有flag_offset作为起始位置从队列中消费数据,完成后把最新的offset值更新到数据库中的flag_offset字段中,采取横向扩展以支持海量数据的快速消费,所述横向扩展是指以不断增加数据队列数量的方式,通过并行的数据队列的消费,实现海量数据的快速消费,所述消费是指通过对offset执行不断加1位移的方式,把存在于数据队列中对应offset位置的数据读出来。
在本发明实时更新搜索引擎索引数据的系统中,所述的数据存储中数据分布式集群方式部署,存放有原始待搜索数据、索引名称及索引配置信息、数据队列中目前已经消费到的位置标识flag_offset;其中,原始待搜索数据用于备份及恢复,以与后台管理模块进行数据交互;所述索引配置信息包括索引字段名称、类型、权重、是否返回、是否可检索、是否可高亮、是否可筛选、是否可聚合,还包括有标识位flag_index和version_index,所述flag_index标识该索引状态,0表示已修改,1表示已同步,2表示索引更新完成,而version_index标识该索引的版本号,默认是0,每次索引结构变化后加1,这两个字段取值可扩展,即所述flag_index和version_index两个字段除了现有0、1、2对应状态的设置以外,后续还可以增加包括3、4、5在内的自然数值以来代表更多的状态进行扩展。
在本发明实时更新搜索引擎索引数据的系统中,所述的搜索引擎集群采用分布式方式部署以支持海量数据的快速读写,按照后台管理模块配置的索引结构,通过倒排索引的方式存储数据,并对文本数据进行包括字符过滤和分词操作在内的预处理。
在本发明实时更新搜索引擎索引数据的系统中,所述的后台管理模块支持原始待搜索数据的增、删、改、查操作,对于增、删、改这三种操作牵涉到数据的变化,会将变化的数据通过API接口传输到数据接收模块,最终会将变化的数据同步到数据库和搜索引擎集群中,该后台管理模块支持可视化方式执行对搜索引擎索引结构,后台管理模块对原始待搜索数据进行增、删、改、查操作时,在后台管理模块的系统界面触发设定的新增、删除、更新、查询按键,进而发出对应的新增、删除、更新或查询指令,指令通过后端API接口将数据变化发送至搜索集群进行数据更新。
在本发明实时更新搜索引擎索引数据的系统中,所述的全量索引模块监控flag_index为0的索引,负责索引结构的同步及数据的灌入,并自动切换线上搜索服务的索引,主要执行步骤如下:
1)扫描数据库中的索引表,看是否有flag_index为0的索引,没有的话则该模块休息N秒进行等待,如果有的话则往下走;
2)从数据库中拉取flag_index为0的索引信息,该索引信息的索引名称记为index_name, 并按照固定文件模式同步到搜索引擎集群中,更新flag_index为1;
3)结合配置的索引名称index_name和version_index生成搜索引擎所使用的临时索引{index_name}_{version_index},index_a;
4) 全量更新数据,从mysql中读取flag_offset值,记为first_offset;从mysql中获取全部待搜索的数据,写入到index_a中;
5)第一次追加数据,从mysql中读取最新的flag_offset的值,记为second_offset,然后去数据队列中拉取offset在区间[first_offset, second_offset]中的数据,并写入到index_a中;
6) 第二次追加数据,从mysql中读取最新的flag_offset的值,记为third_offset,然后去数据队列中拉取offset在区间[second_offset, third_offset]中的数据,并写入到index_a中;
7)切换索引,将线上搜索引擎在使用中的index_name切换到index_a,数据同步和索引切换所有的操作均已经完成,同时将该索引对应的数据库中的flag_index置为2;
8) 进行下一轮扫描是否有flag_index为0的索引,若有flag_index为0的索引,则重复上述步骤1)到7)。
基于上述技术方案,本发明的实时更新搜索引擎索引数据的方法及系统与现有技术相比,经过实践应用取得如下技术效果:
1.面对索引结构变化后的数据更新一致性问题,本发明的方法及系统创新地给出了“一次全量、位置标记、两次追加、切换再追加”的数据同步机制,既保证了线上搜索服务不用中断,又能自动地完成了全过程同时保证了数据的一致性,不会出现数据丢失问题,也大大降低了人力干预带来的切换成本,确保系统稳定性不受影响。
2. 本发明的方法及系统中数据队列、数据存储、搜索引擎集群都采用了集群化部署上线,数据接收模块、数据同步模块、全量索引模块都可以采用多点部署。这种架构设计保证了整体的高可用,同时可以很好地支持海量数据的处理和导入,动态扩容,很好的应对流量洪峰带来的各种问题。
3.本发明系统中的索引结构的变更引入了版本控制机制,可以方便地进行索引备份、切换及回滚操作,当索引切换等过程中出现异常,为了保持服务的正常运行,需要对索引文件进行回滚到上一个版本,即version_index重置为更新前的版本,根据实际的业务场景灌入合适的数据。
附图说明
图1是本发明一种确保数据一致性的实时更新搜索引擎索引数据的系统的架构组成示意图。
图2是本发明实时更新搜索引擎索引数据的系统中全量索引更新的执行步骤示意图。
具体实施方式
下面我们结合附图和具体的实施例来对本发明一种确保数据一致性的实时更新搜索引擎索引数据的方法及系统做进一步的详细阐述,以求更为清楚明了地理解其结构组成和工作方式,但不能以此来限制本发明的保护范围。
如图1和图2所示,本发明先涉及到一种确保数据一致性的实时更新搜索引擎索引数据的方法,该方法通过一次全量数据更新、位置标记、两次追加数据、切换再追加的数据同步机制,保证线上搜索服务不中断,自动完成数据更新全过程并保证数据一致性,该方法包括如下步骤:
第一步,数据接收,接收所有待搜索的结构化数据、半结构化数据及非结构化数据;
第二步,接收的数据进入数据队列,数据队列中暂存接收到的原始待搜索数据,用offset参数标识数据队列中的数据消费情况;
第三步,启动数据同步模块,从数据队列中不断地消费新进入的数据,所述消费是指通过对offset执行不断加1位移的方式,把存在于数据队列中对应offset位置的数据读出来,接下来同步到数据库和搜索引擎集群两个地方;
第四步,分别存储数据至数据库和搜索引擎集群中,存储的数据到数据库用于数据备份,存储的数据到搜索引擎集群供用户数据搜索,同时把消费队列的位置信息flag_offset写到数据库中,用flag_offset作为起始位置从队列中消费数据,完成以后把最新的offset值更新到数据库中的flag_offset字段中;
第五步,在后台管理模块配置索引结构并存到数据库中,同时将该索引结构在数据库中对应的flag_index字段设置为0,后台管理模块对原始待搜索数据进行增、删、改、查操作,对于增、删、改这三种操作牵涉到数据的变化,将变化的数据通过API接口传输到数据接收模块,并通过第三步和第四步将变化的数据同步到数据库和搜索引擎集群中,可视化方式执行对搜索引擎索引集群的增、删、改、查操作,并将操作结果存到数据库中;在后台管理模块对原始待搜索数据进行增、删、改、查操作时,在后台管理模块的系统界面触发设定的新增、删除、更新、查询按键,进而发出对应的新增、删除、更新或查询指令,指令通过后端API接口将数据变化发送至搜索集群进行数据更新。
第六步,由全量索引模块负责执行索引配置的分发及数据导入,自动化完成增量数据收集、全量数据重新导入、索引结构配置更新和索引切换工作,同时不会影响到线上对外提供的搜索服务。如图2所示,在本发明确保数据一致性的实时更新搜索引擎索引数据的方法中,所述全量索引模块执行如下步骤:
S1,全量索引模块初次启动,扫描数据库中的索引表,查看是否存在flag_index为0的索引,若无则休息N秒进行等待,若有的话则执行第二步;
S2,从数据库中拉取flag_index为0的索引信息,该索引信息的索引名称记为index_name,并按照固定文件模式同步到搜索引擎集群中,更新flag_index为1,这里的固定文件模式为搜索引擎集群预定义的JSON格式文件,其中包括有搜索集群使用的分析器、分词器、过滤器和索引配置信息;
S3,结合配置的索引名称index_name和version_index生成搜索引擎所使用的临时索引{index_name}_{version_index},index_a;
S4,全量更新数据,从mysql中读取flag_offset值,记为first_offset;从mysql中获取全部待搜索的数据,写入到index_a中;
S5,第一次追加数据,从mysql中读取最新的flag_offset的值,记为second_offset,然后去数据队列中拉取offset在区间[first_offset, second_offset]中的数据,并写入到index_a中;
S6,第二次追加数据,从mysql中读取最新的flag_offset的值,记为third_offset,然后去数据队列中拉取offset在区间[second_offset, third_offset]中的数据,并写入到index_a中;
S7,切换索引,将线上搜索引擎在使用中的index_name切换到index_a,完成数据同步和索引切操作,同时将该索引对应的数据库中的flag_index置为2;
S8,进行下一轮扫描是否有flag_index为0的索引,重复第一步至第七步。
如图1所示,本发明还涉及到一种确保数据一致性的实时更新搜索引擎索引数据的系统,该系统结构模块组成包括有数据接收模块100、数据队列200、数据同步模块300、数据存储400、搜索引擎集群500、后台管理模块600和全量索引模块700,原始数据经过数据接收模块100接收后进入数据队列200,再由数据同步模块300分别存储到数据库和搜索引擎集群500中,后台管理模块600配置索引结构并存储到数据库中,所述全量索引模块700执行索引配置的分发至数据库,并将数据库中存储数据导入至搜索引擎集群500中呈现。
上述数据接收模块100通过API接口接收所有待搜索的结构化数据、半结构化数据及非结构化数据,支持单条或批量数据的新增、修改和删除操作,有接口访问验证、参数检查、数据异常处理机制、可以动态弹性扩容,支持高并发场景海量数据的接收。
上述的数据队列200用于暂存接收到的原始待搜索数据,而且是顺序读写,通过集群方式部署,具备很好的吞吐量,有offset参数标识队列中的数据消费情况。数据同步模块300从数据队列200中不断的消费新进入的数据,接下来会同步到两个地方,一个是数据库用于数据备份,另外一个是搜索引擎集群用户数据搜索,同时会把消费队列的位置信息flag_offset也写到数据库中,后面都会有flag_offset作为起始位置从队列中消费数据,完成以后把最新的offset值更新到数据库中的flag_offset字段中,可以横向扩展,所述横向扩展是指以不断增加数据队列数量的方式,通过并行的数据队列的消费方式来支持海量数据的快速消费,所述消费是指通过对offset执行不断加1位移的方式,把存在于数据队列中对应offset位置的数据读出来。
上述的数据存储400读写分离,分布式集群方式部署,保证整体性能。主要存放以下信息:
1)原始待搜索数据用于备份及恢复,并和后台管理模块进行交互;
2)索引名称及索引配置信息,包括索引字段名称、类型、权重、是否返回、是否可检索、是否可高亮、是否可筛选、是否可聚合等,同时有标识位flag_index和version_index,flag_index标识该索引状态,0表示已修改,1表示已同步,2表示索引更新完成,而version_index标识该索引的版本号,默认是0,每次索引结构变化后加1,这两个字段取值可以扩展是指所述flag_index和version_index两个字段除了现有0、1、2对应状态的设置以外,后续还可以增加包括3、4、5在内的自然数值以来代表更多的状态进行扩展。
3)数据队列中目前已经消费到的位置标识flag_offset。
上述的搜索引擎集群500分布式方式部署,支持海量数据的快速读写。按照后台系统配置好的索引结构,通过倒排索引的方式存储数据,并对文本数据进行字符过滤、分词等预处理。
上述的后台管理模块600实现两个功能:一是支持原始待搜索数据的增、删、改、查操作,对于增、删、改这三种操作牵涉到数据的变化,会将变化的数据通过API接口传输到数据接收模块,最终会将变化的数据同步到数据库和搜索引擎集群中,二是支持可视化方式执行对搜索引擎索引结构。后台管理模块600对原始待搜索数据进行增、删、改、查操作时,在后台管理模块600的系统界面触发设定的新增、删除、更新、查询按键,进而发出对应的新增、删除、更新或查询指令,指令通过后端API接口将数据变化发送至搜索集群进行数据更新。
全量索引模块700主要是监控flag_index为0的索引,负责索引结构的同步及数据的灌入,并自动切换线上搜索服务的索引。主要执行步骤如下:
1)扫描数据库中的索引表,看是否有flag_index为0的索引,没有的话则该模块休息N(比如10)秒进行等待,如果有的话则往下走;
2)从数据库中拉取flag_index为0的索引信息,该该索引信息的名称记为index_name, 并按照固定文件模式同步到搜索引擎集群中,更新flag_index为1;
3)结合配置的索引名称index_name和version_index生成搜索引擎所使用的临时索引{index_name}_{version_index},index_a;
4)全量更新数据,从mysql中读取flag_offset值,记为first_offset;从mysql中获取全部待搜索的数据,写入到index_a中;
5)第一次追加数据。从mysql中读取最新的flag_offset的值,记为second_offset,然后去数据队列中拉取offset在区间[first_offset, second_offset]中的数据,并写入到index_a中;
6)第二次追加数据。从mysql中读取最新的flag_offset的值,记为third_offset,然后去数据队列中拉取offset在区间[second_offset, third_offset]中的数据,并写入到index_a中;
7)切换索引。将线上搜索引擎在使用中的index_name切换到index_a。至此数据同步和索引切换所有的操作均已经完成,同时将该索引对应的数据库中的flag_index置为2。
8)进行下一轮扫描是否有flag_index为0的索引,重复上述步骤1)到步骤7)。
本发明的方法及系统创新地给出了“一次全量、位置标记、两次追加、切换再追加”的数据同步机制,既保证了线上搜索服务不用中断,又能自动地完成了全过程同时保证了数据的一致性,不会出现数据丢失问题,也大大降低了人力干预带来的切换成本,确保系统稳定性不受影响。
Claims (12)
1.一种实时更新搜索引擎索引数据的方法,其特征在于,该方法通过一次全量数据更新、位置标记、两次追加数据、切换再追加的数据同步机制,保证线上搜索服务不中断,在保证数据一致性前提下自动完成数据更新,该方法包括如下步骤:
第一步,数据接收,接收所有待搜索的结构化数据、半结构化数据及非结构化数据;
第二步,接收的数据进入数据队列,数据队列中暂存接收到的原始待搜索数据,用offset参数标识数据队列中的数据消费情况;
第三步,启动数据同步模块,从数据队列中不断地消费新进入的数据,所述消费是指通过对offset执行不断加1位移的方式,把存在于数据队列中对应offset位置的数据读出来,接下来同步到数据库和搜索引擎集群两个地方;
第四步,分别存储数据至数据库和搜索引擎集群中,存储的数据到数据库用于数据备份,存储的数据到搜索引擎集群供用户数据搜索,同时把消费队列的位置信息flag_offset写到数据库中,用flag_offset作为起始位置从队列中消费数据,完成以后把最新的offset值更新到数据库中的flag_offset字段中;
第五步,在后台管理模块配置索引结构并存到数据库中,同时将该索引结构在数据库中对应的flag_index字段设置为0,后台管理模块对原始待搜索数据进行增、删、改、查操作,对于增、删、改这三种操作牵涉到数据的变化,将变化的数据通过API接口传输到数据接收模块,并通过第三步和第四步将变化的数据同步到数据库和搜索引擎集群中,可视化方式执行对搜索引擎索引集群的增、删、改、查操作,并将操作结果存到数据库中;
第六步,由全量索引模块负责执行索引配置的分发及数据导入,自动化完成增量数据收集、全量数据重新导入、索引结构配置更新和索引切换工作,同时不会影响到线上对外提供的搜索服务。
2.根据权利要求1所述的一种实时更新搜索引擎索引数据的方法,其特征在于,所述第五步中后台管理模块对原始待搜索数据进行增、删、改、查操作时,在后台管理模块的系统界面触发设定的新增、删除、更新、查询按键,进而发出对应的新增、删除、更新或查询指令,指令通过后端API接口将数据变化发送至搜索集群进行数据更新。
3.根据权利要求1所述的一种实时更新搜索引擎索引数据的方法,其特征在于,所述第六步的全量索引模块执行如下步骤:
S1,全量索引模块初次启动,扫描数据库中的索引表,查看是否存在flag_index为0的索引,若无则休息N秒进行等待,若有的话则执行S2步骤;
S2,从数据库中拉取flag_index为0的索引信息,该索引信息的索引名称记为index_name,并按照固定文件模式同步到搜索引擎集群中,更新flag_index为1;
S3,结合配置的索引名称index_name和version_index生成搜索引擎所使用的临时索引{index_name}_{version_index},index_a;
S4,全量更新数据,从mysql中读取flag_offset值,记为first_offset;从mysql中获取全部待搜索的数据,写入到index_a中;
S5,第一次追加数据,从mysql中读取最新的flag_offset的值,记为second_offset,然后去数据队列中拉取offset在区间[first_offset, second_offset]中的数据,并写入到index_a中;
S6,第二次追加数据,从mysql中读取最新的flag_offset的值,记为third_offset,然后去数据队列中拉取offset在区间[second_offset, third_offset]中的数据,并写入到index_a中;
S7,切换索引,将线上搜索引擎在使用中的index_name切换到index_a,完成数据同步和索引切操作,同时将该索引对应的数据库中的flag_index置为2;
S8,进行下一轮扫描是否有flag_index为0的索引,重复第S1步至第S7步。
4.根据权利要求3所述的一种实时更新搜索引擎索引数据的方法,其特征在于,所述的固定文件模式为搜索引擎集群预定义的JSON格式文件,包括搜索集群使用的分析器、分词器、过滤器和索引配置信息。
5.一种实时更新搜索引擎索引数据的系统,其特征在于,该系统包括有数据接收模块(100)、数据队列(200)、数据同步模块(300)、数据存储(400)、搜索引擎集群(500)、后台管理模块(600)和全量索引模块(700),原始数据经过数据接收模块(100)接收后进入数据队列(200),再由数据同步模块(300)分别存储到数据库和搜索引擎集群(500)中,后台管理模块(600)配置索引结构并存储到数据库中,所述全量索引模块(700)执行索引配置的分发至数据库,并将数据库中存储数据导入至搜索引擎集群(500)中呈现。
6.根据权利要求5所述的一种实时更新搜索引擎索引数据的系统,其特征在于,所述数据接收模块(100)通过API接口接收所有待搜索的结构化数据、半结构化数据及非结构化数据。
7.根据权利要求5所述的一种实时更新搜索引擎索引数据的系统,其特征在于,所述的数据队列(200)用于暂存接收到的原始待搜索数据,采取顺序读写的方式,再通过集群方式部署,通过offset参数标识队列中的数据消费情况,offset从0开始计数,每次消费掉的条数会在offset上累加。
8.根据权利要求5所述的一种实时更新搜索引擎索引数据的系统,其特征在于,所述的数据同步模块(300)从数据队列(200)中不断的消费新进入的数据,接下来会同步到两个地方,一个是数据库用于数据备份,另外一个是搜索引擎集群用户数据搜索,同时把消费队列的位置信息flag_offset也写到数据库中,后面有flag_offset作为起始位置从队列中消费数据,完成后把最新的offset值更新到数据库中的flag_offset字段中,采取横向扩展以支持海量数据的快速消费,所述横向扩展是指以不断增加数据队列数量的方式扩展。
9.根据权利要求5所述的一种实时更新搜索引擎索引数据的系统,其特征在于,所述的数据存储(400)中数据分布式集群方式部署,存放有原始待搜索数据、索引名称及索引配置信息、数据队列中目前已经消费到的位置标识flag_offset;
其中,原始待搜索数据用于备份及恢复,以与后台管理模块进行数据交互;所述索引配置信息包括索引字段名称、类型、权重、是否返回、是否可检索、是否可高亮、是否可筛选、是否可聚合,还包括有标识位flag_index和version_index,所述flag_index标识该索引状态,0表示已修改,1表示已同步,2表示索引更新完成,而version_index标识该索引的版本号,默认是0,每次索引结构变化后加1,所述flag_index和version_index两个字段除了现有0、1、2对应状态的设置,后续增加包括3、4、5在内的自然数值以来代表更多的状态进行扩展。
10.根据权利要求5所述的一种实时更新搜索引擎索引数据的系统,其特征在于,所述的搜索引擎集群(500)采用分布式方式部署以支持海量数据的快速读写,按照后台管理模块(600)配置好的索引结构,通过倒排索引的方式存储数据,并对文本数据进行包括字符过滤和分词操作在内的预处理。
11.根据权利要求5所述的一种实时更新搜索引擎索引数据的系统,其特征在于,所述的后台管理模块(600)支持原始待搜索数据的增、删、改、查操作,对于增、删、改这三种操作牵涉到数据的变化,会将变化的数据通过API接口传输到数据接收模块,最终会将变化的数据同步到数据库和搜索引擎集群中,该后台管理模块(600)支持可视化方式执行对搜索引擎索引结构。
12.根据权利要求5所述的一种实时更新搜索引擎索引数据的系统,其特征在于,所述的全量索引模块(700)监控flag_index为0的索引,负责索引结构的同步及数据的灌入,并自动切换线上搜索服务的索引,主要执行步骤如下:
1)扫描数据库中的索引表,看是否有flag_index为0的索引,没有的话则该模块休息N秒进行等待,如果有的话则往下走;
2)从数据库中拉取flag_index为0的索引信息,该索引信息的索引名称记为index_name, 并按照固定文件模式同步到搜索引擎集群中,更新flag_index为1;
3)结合配置的索引名称index_name和version_index生成搜索引擎所使用的临时索引{index_name}_{version_index},index_a;
4) 全量更新数据,从mysql中读取flag_offset值,记为first_offset;从mysql中获取全部待搜索的数据,写入到index_a中;
5)第一次追加数据,从mysql中读取最新的flag_offset的值,记为second_offset,然后去数据队列中拉取offset在区间[first_offset, second_offset]中的数据,并写入到index_a中;
6) 第二次追加数据,从mysql中读取最新的flag_offset的值,记为third_offset,然后去数据队列中拉取offset在区间[second_offset, third_offset]中的数据,并写入到index_a中;
7)切换索引,将线上搜索引擎在使用中的index_name切换到index_a,数据同步和索引切换所有的操作均已经完成,同时将该索引对应的数据库中的flag_index置为2;
8) 进行下一轮扫描是否有flag_index为0的索引,若有flag_index为0的索引,则重复上述步骤1)到7)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210485181.6A CN114579596B (zh) | 2022-05-06 | 2022-05-06 | 一种实时更新搜索引擎索引数据的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210485181.6A CN114579596B (zh) | 2022-05-06 | 2022-05-06 | 一种实时更新搜索引擎索引数据的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114579596A true CN114579596A (zh) | 2022-06-03 |
CN114579596B CN114579596B (zh) | 2022-09-06 |
Family
ID=81767615
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210485181.6A Active CN114579596B (zh) | 2022-05-06 | 2022-05-06 | 一种实时更新搜索引擎索引数据的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114579596B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117149763A (zh) * | 2023-08-08 | 2023-12-01 | 广州方舟信息科技有限公司 | 一种索引切换同步方法、装置及存储介质 |
Citations (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5913209A (en) * | 1996-09-20 | 1999-06-15 | Novell, Inc. | Full text index reference compression |
US20060085490A1 (en) * | 2004-08-19 | 2006-04-20 | Copernic Technologies, Inc. | Indexing systems and methods |
US20100235335A1 (en) * | 2009-03-11 | 2010-09-16 | Heman Sandor Abc | Column-store database architecture utilizing positional delta tree update system and methods |
WO2011031796A2 (en) * | 2009-09-08 | 2011-03-17 | Fusion-Io, Inc. | Apparatus, system, and method for caching data on a solid-state storage device |
US7953721B1 (en) * | 2006-11-27 | 2011-05-31 | Netlogic Microsystems, Inc. | Integrated search engine devices that support database key dumping and methods of operating same |
US7987205B1 (en) * | 2006-11-27 | 2011-07-26 | Netlogic Microsystems, Inc. | Integrated search engine devices having pipelined node maintenance sub-engines therein that support database flush operations |
US20120030188A1 (en) * | 2010-07-27 | 2012-02-02 | Oracle International Corporation | Enterprise-based searching of new and updated data |
CN102811380A (zh) * | 2011-06-03 | 2012-12-05 | 三星电子(中国)研发中心 | 多媒体文件中音视频数据的解复用方法及装置 |
CN103177082A (zh) * | 2013-02-21 | 2013-06-26 | 用友软件股份有限公司 | 主服务器、从服务器、索引同步系统和索引同步方法 |
CN103294731A (zh) * | 2012-03-05 | 2013-09-11 | 阿里巴巴集团控股有限公司 | 实时索引建立、实时搜索方法及装置 |
CN104850502A (zh) * | 2015-05-05 | 2015-08-19 | 华为技术有限公司 | 一种数据的访问方法、装置及设备 |
CN104881422A (zh) * | 2013-12-30 | 2015-09-02 | 凯为公司 | 用于生成查找和进行判定的引擎、方法和软件定义网络 |
CN106294695A (zh) * | 2016-08-08 | 2017-01-04 | 深圳市网安计算机安全检测技术有限公司 | 一种面向实时大数据搜索引擎的实现方法 |
CN106649870A (zh) * | 2017-01-03 | 2017-05-10 | 山东浪潮商用系统有限公司 | 一种搜索引擎分布式实现方法 |
US20170277739A1 (en) * | 2016-03-25 | 2017-09-28 | Netapp, Inc. | Consistent method of indexing file system information |
CN109343790A (zh) * | 2018-08-06 | 2019-02-15 | 百富计算机技术(深圳)有限公司 | 一种基于nand flash的数据存储方法、终端设备及存储介质 |
CN110347329A (zh) * | 2018-04-02 | 2019-10-18 | 深信服科技股份有限公司 | I/o数据读写并发冲突的处理方法、系统及相关装置 |
WO2020234719A1 (en) * | 2019-05-23 | 2020-11-26 | International Business Machines Corporation | Indexing for evolving large-scale datasets in multi-master hybrid transactional and analytical processing systems |
CN112100160A (zh) * | 2020-11-05 | 2020-12-18 | 四川新网银行股份有限公司 | 一种基于Elastic Search的双活实时数据仓库建设方法 |
CN112417081A (zh) * | 2019-08-21 | 2021-02-26 | 北京京东尚科信息技术有限公司 | 一种实现增量倒排索引数据存储的方法和装置 |
CN113227999A (zh) * | 2019-04-27 | 2021-08-06 | 惠普发展公司,有限责任合伙企业 | 微服务数据聚合搜索引擎更新 |
CN113220662A (zh) * | 2021-04-30 | 2021-08-06 | 广州市百果园信息技术有限公司 | 索引迁移方法、装置、电子设备及存储介质 |
CN113378022A (zh) * | 2020-03-10 | 2021-09-10 | 北京搜狗科技发展有限公司 | 一种站内搜索平台、搜索方法和相关装置 |
-
2022
- 2022-05-06 CN CN202210485181.6A patent/CN114579596B/zh active Active
Patent Citations (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5913209A (en) * | 1996-09-20 | 1999-06-15 | Novell, Inc. | Full text index reference compression |
US20060085490A1 (en) * | 2004-08-19 | 2006-04-20 | Copernic Technologies, Inc. | Indexing systems and methods |
US7953721B1 (en) * | 2006-11-27 | 2011-05-31 | Netlogic Microsystems, Inc. | Integrated search engine devices that support database key dumping and methods of operating same |
US7987205B1 (en) * | 2006-11-27 | 2011-07-26 | Netlogic Microsystems, Inc. | Integrated search engine devices having pipelined node maintenance sub-engines therein that support database flush operations |
US20100235335A1 (en) * | 2009-03-11 | 2010-09-16 | Heman Sandor Abc | Column-store database architecture utilizing positional delta tree update system and methods |
WO2011031796A2 (en) * | 2009-09-08 | 2011-03-17 | Fusion-Io, Inc. | Apparatus, system, and method for caching data on a solid-state storage device |
US20120030188A1 (en) * | 2010-07-27 | 2012-02-02 | Oracle International Corporation | Enterprise-based searching of new and updated data |
CN102811380A (zh) * | 2011-06-03 | 2012-12-05 | 三星电子(中国)研发中心 | 多媒体文件中音视频数据的解复用方法及装置 |
CN103294731A (zh) * | 2012-03-05 | 2013-09-11 | 阿里巴巴集团控股有限公司 | 实时索引建立、实时搜索方法及装置 |
CN103177082A (zh) * | 2013-02-21 | 2013-06-26 | 用友软件股份有限公司 | 主服务器、从服务器、索引同步系统和索引同步方法 |
CN104881422A (zh) * | 2013-12-30 | 2015-09-02 | 凯为公司 | 用于生成查找和进行判定的引擎、方法和软件定义网络 |
CN104850502A (zh) * | 2015-05-05 | 2015-08-19 | 华为技术有限公司 | 一种数据的访问方法、装置及设备 |
US20170277739A1 (en) * | 2016-03-25 | 2017-09-28 | Netapp, Inc. | Consistent method of indexing file system information |
CN106294695A (zh) * | 2016-08-08 | 2017-01-04 | 深圳市网安计算机安全检测技术有限公司 | 一种面向实时大数据搜索引擎的实现方法 |
CN106649870A (zh) * | 2017-01-03 | 2017-05-10 | 山东浪潮商用系统有限公司 | 一种搜索引擎分布式实现方法 |
CN110347329A (zh) * | 2018-04-02 | 2019-10-18 | 深信服科技股份有限公司 | I/o数据读写并发冲突的处理方法、系统及相关装置 |
CN109343790A (zh) * | 2018-08-06 | 2019-02-15 | 百富计算机技术(深圳)有限公司 | 一种基于nand flash的数据存储方法、终端设备及存储介质 |
CN113227999A (zh) * | 2019-04-27 | 2021-08-06 | 惠普发展公司,有限责任合伙企业 | 微服务数据聚合搜索引擎更新 |
WO2020234719A1 (en) * | 2019-05-23 | 2020-11-26 | International Business Machines Corporation | Indexing for evolving large-scale datasets in multi-master hybrid transactional and analytical processing systems |
CN113874852A (zh) * | 2019-05-23 | 2021-12-31 | 国际商业机器公司 | 用于在多主混合事务和分析处理系统中演进大规模数据集的索引 |
CN112417081A (zh) * | 2019-08-21 | 2021-02-26 | 北京京东尚科信息技术有限公司 | 一种实现增量倒排索引数据存储的方法和装置 |
CN113378022A (zh) * | 2020-03-10 | 2021-09-10 | 北京搜狗科技发展有限公司 | 一种站内搜索平台、搜索方法和相关装置 |
CN112100160A (zh) * | 2020-11-05 | 2020-12-18 | 四川新网银行股份有限公司 | 一种基于Elastic Search的双活实时数据仓库建设方法 |
CN113220662A (zh) * | 2021-04-30 | 2021-08-06 | 广州市百果园信息技术有限公司 | 索引迁移方法、装置、电子设备及存储介质 |
Non-Patent Citations (3)
Title |
---|
BAOJIA ZHANG: "A New Secure Index Supporting Efficient Index Updating and Similarity Search on Clouds", 《SCC "16: PROCEEDINGS OF THE 4TH ACM INTERNATIONAL WORKSHOP ON SECURITY IN CLOUD COMPUTING》 * |
又蠢又笨的懒羊羊程序猿: "RocketMQ:消息消费队列与索引文件的实时更新以及文件恢复源码解析", 《HTTPS://BLOG.CSDN.NET/TAYLORSWIFTIILN/ARTICLE/DETAILS/121384893》 * |
孙芳媛: "基于倒排索引和字典树的站内搜索引擎的设计与实现", 《中国优秀硕士论文全文数据库》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117149763A (zh) * | 2023-08-08 | 2023-12-01 | 广州方舟信息科技有限公司 | 一种索引切换同步方法、装置及存储介质 |
CN117149763B (zh) * | 2023-08-08 | 2024-04-02 | 广州方舟信息科技有限公司 | 一种索引切换同步方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114579596B (zh) | 2022-09-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102880685B (zh) | 一种时间密集大数据量的b/s分区间分页查询方法 | |
CN106934014B (zh) | 一种基于Hadoop的网络数据挖掘与分析平台及其方法 | |
CN103678494A (zh) | 客户端同步服务端数据的方法及装置 | |
CN107544984B (zh) | 一种数据处理的方法和装置 | |
CN109063196A (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN108334534A (zh) | 业务系统字段配置方法、装置、服务器及可读存储介质 | |
WO2023087673A1 (zh) | 一种层次数据检索方法、装置和设备 | |
CN103457905A (zh) | 数据同步方法、系统及设备 | |
CN110659430A (zh) | 一种支持多区块链网络的区块链浏览方法 | |
CN111651519B (zh) | 数据同步方法、数据同步装置、电子设备及存储介质 | |
CN102254029A (zh) | 一种基于视图的数据访问系统及其方法 | |
CN106503158A (zh) | 数据同步方法及装置 | |
CN104021198A (zh) | 基于本体语义索引的关系数据库信息检索方法及装置 | |
CN114579596B (zh) | 一种实时更新搜索引擎索引数据的方法及系统 | |
CN109634970A (zh) | 表数据同步方法、设备、存储介质及装置 | |
CN106339408A (zh) | 数据同步方法、数据同步装置和服务器 | |
CN103164525A (zh) | Web应用发布方法和装置 | |
CN102073527A (zh) | 一种输入法词库的升级方法和装置 | |
CN105808653A (zh) | 一种基于用户标签系统的数据处理方法及装置 | |
CN112416991A (zh) | 一种数据处理方法、装置以及存储介质 | |
WO2023093607A1 (zh) | 一种离线数据模糊搜索方法、装置、设备和介质 | |
CN106648917B (zh) | 一种差异更新缓存数据的方法及系统 | |
CN111782731A (zh) | 一种数据同步方法及装置 | |
CN104281673A (zh) | 一种数据库的缓存构建系统及对应的构建方法 | |
CN102982034A (zh) | 互联网站内信息的搜索方法和搜索系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |