发明内容
发明目的:本发明目的是提供一种基于ElasticSearch全文检索的文件索引系统及方法,其中系统可实现对目录和文件执行增删改查、重命名、移动位置后实时在检索中保持结果一致性;所述的方法能向文件系统管理模块反馈文件的路径信息,以便对检索的结果所属的文件执行各种管理操作。
技术方案:本发明一种基于ElasticSearch全文检索的文件索引系统,包括:
用户操作管理模块,用于接收用户检索请求并发送至文件系统管理模块,以及从文件系统管理模块接收搜索到的文件url值;
文件系统,用于存储和管理文件与目录;
ElasticSearch集群模块,用于执行用户检索请求中的关键词检索,并返回检索结果给ElasticSearch客户端模块;
数据库系统,用于存储文件属性信息;
文件系统管理模块,与所述用户操作管理模块及所述文件系统连接,用于处理用户检索请求时,将用户检索请求中的关键词传送给ElasticSearch客户端模块,并且实时检测文件系统中的文件和目录更新;
ElasticSearch客户端模块,与所述文件系统管理模块、ElasticSearch集群模块和数据库系统连接,用于将用户检索请求中的关键词提交ElasticSearch集群模块检索;同时保障文件系统的文件和目录发生更新时,数据库系统中的文件属性信息和ElasticSearch集群模块的索引信息同步更新。
进一步的,所述数据库系统包括文件属性信息表,所述文件属性信息表中包含文件的url值与md5值,文件的url值为文件的路径信息;文件的md5值为文件内容计算值。
进一步的,所述ElasticSearch客户端模块设置ElasticSearch集群模块中的索引信息ID为文件的md5值。
进一步的,所述文件系统的文件和目录更新包括对目录和文件执行增删改查、重命名和移动位置。
本发明所述的一种基于ElasticSearch全文检索的文件索引方法,包括如下步骤:
1、用户操作管理模块接受用户检索请求并传递给文件系统管理模块;
2、文件系统管理模块在处理用户检索请求时,将用户检索请求中的关键词传送给ElasticSearch客户端模块;
3、ElasticSearch客户端模块将用户检索请求中的关键词提交ElasticSearch集群模块检索;
4、ElasticSearch集群模块执行用户检索请求中的关键词检索,并返回检索结果,检索结果为包含关键字的索引记录;
5、ElasticSearch客户端模块从检索结果中提取文件的md5值;
6、ElasticSearch客户端模块根据文件的md5值,查询数据库系统中的文件属性信息表,找到所有包含文件md5值的文件属性记录,并从文件属性记录中找出文件的url值,返回给ElasticSearch客户端模块;
7、ElasticSearch客户端模块将文件的url值向文件系统管理模块反馈,文件系统管理模块向用户操作管理模块显示搜索到的文件url值。
进一步的,所述用户操作管理模块根据搜索到的文件url值可对文件进行管理操作。
有益效果:本发明通过增加一个ElasticSearch客户端模块,可实时保证文件系统的更新与ElasticSearch集群模块中的索引以及数据库系统中的文件属性信息表之间的同步,实现对目录和文件执行增删改查、重命名、移动位置后可实时在检索中保持结果一致性;同时针对ElasticSearch存储冗余的情况,可选择不在ElasticSearch和数据库系统中存储数据,而是将检索的结果以文件路径和附加属性的形式通知文件系统管理模块;并且能实现文件系统管理模块与ElasticSearch之间的双向交流,支持检索结果所在文件的路径的获取,从而可以支持对命中文件执行更多的操作。
具体实施例
下面结合附图和实施例对本发明做进一步描述:
本发明一种基于ElasticSearch全文检索的文件索引系统,包括:用户操作管理模块,用于接收用户检索请求并发送至文件系统管理模块,以及从文件系统管理模块接收搜索到的文件url值;
文件系统,用于存储和管理文件与目录;
ElasticSearch集群模块,用于执行用户检索请求中的关键词检索,并返回检索结果给ElasticSearch客户端模块;
文件系统管理模块,与所述用户操作管理模块及所述文件系统连接,用于处理用户检索请求时,将用户检索请求中的关键词传送给ElasticSearch客户端模块,并且实时检测文件系统中的文件和目录更新;
ElasticSearch客户端模块,与所述文件系统管理模块、ElasticSearch集群模块和数据库系统连接,ElasticSearch客户端模块可实时保证文件系统的更新与ElasticSearch集群模块中的索引以及数据库系统中的文件属性信息表之间的同步,从而实现在对目录和文件执行增删改查、重命名、移动位置后可实时在检索中保持结果一致性,如图1。
如表1所示,数据库系统是用于存储文件属性信息,在数据库系统中维护一张文件属性信息表,包含文件的url值、md5值、作者等文件属性信息,其中url值是文件的绝对路径,可以是本地文件系统的路径,也可以是网络文件系统的路径,根据路径可以唯一定位一个文件,但路径并不是固定不变的,它会随着文件本身或者任何一个父级目录的重命名或者移动位置而改变;而另一方面,即使同一个文件也可以有多份拷贝,这些拷贝可以有相同或不同的目录层次和文件名称,这些文件共有同一个md5值,因为文件的md5值是根据文件内容计算的,只有内容不完全相同的文件才拥有不同的md5值。
表1文件属性信息表
如表2所示,在ElasticSearch集群模块中针对文本类文件创建索引,每条索引记录代表一个文件,从严格意义上说,代表一篇文件内容,因为索引的唯一标识是ID字段,而ID将被设置为文件的md5值,因此具有相同md5值的文件(亦即文件内容完全相同的文件)将对应ElasticSearch集群中同一个索引记录。由于ElasticSearch集群是对文件的内容进行关键字查询,因此每一个内容文本只需要一条索引记录表示即可,通过这种方式,不管源文件系统有多少文件是冗余的,也不管冗余多少份,在ElasticSearch集群中将始终保持最少的索引数据,有效保证了查询性能。
表2索引表
要实现ElasticSearch检索文件系统的实时性,就必须在每次更新文件时,都同步更新ElasticSearch索引以及数据库系统中的文件属性信息,始终保持两者的一致性,只有这样才能在更新文件系统后,查询的结果依然保持与文件完全系统一致。以下针对文件的各种类型的更新一一描述本系统的实现:
1、增加目录时,筛选其中的文本类文件在ElasticSearch中批量创建文件索引(若相同索引字段的索引已存在,则不重复添加),在数据库系统中批量添加文件属性信息;
当用户操作管理模块通过文件系统管理模块向文件系统上传了一个新的目录时,文件系统管理模块将目录的url值发送给ElasticSearch客户端模块,ElasticSearch客户端模块递归遍历该目录下的所有文件以及子目录下的所有文件,筛选出文本类文件,如txt文本文件、word、excel、ppt等办公文档,针对这些文件,读取url值、md5值等信息,添加到数据库系统的文件属性信息表中;紧接着,提取文件里面的纯文本,发送给ElasticSearch集群创建文件索引,同时指定ElasticSearch客户端模块将索引字段ID设置为相应文件的md5值,整个过程如图2所示。
2、删除目录时,在数据库系统中批量删除文件属性信息,然后筛选md5值在数据库系统中已经不存在的文件,在ElasticSearch集群中批量删除文件索引;
当文件系统管理模块检测到用户操作管理模块删除了一个目录时,将目录删除前的url值发送给ElasticSearch客户端模块,由于此时,该目录在文件系统中已经不存在,因此ElasticSearch客户端模块已无法获取该目录里面的信息,但可以确定的是,数据库系统中以该目录路径为前缀的文件都将不存在了,因此在数据库系统文件属性信息表中查找所有以删除目录url值开始的文件,保存它们的md5值并去重,然后删除这些文件记录,紧接着,在保存的md5列表中,剔除那些在数据库系统中还存在的(说明这些文件在其他目录下还有副本),最后针对剩下的在数据库系统中已经不存在的那些md5值,在ElasticSearch集群中按照索引字段ID=md5查找文件索引并删除,整个过程如图3所示。
3、重命名或者移动目录时,在数据库系统中批量更新文件属性的绝对路径信息;
当用户操作管理模块重命名或者移动目录后,目录中的文件的url值将发生变化,这些文件的url值在目录变动前是以目录的旧url值为前缀的,现在前缀变为了新url值,但文件的内容并没有变化,亦即md5值没有变化,因此只须更新数据库系统中文件属性信息表的url值即可。更新的过程为:文件系统管理模块检测到用户操作管理模块重命名或移动了一个目录,将目录的旧url值和新url值都发送给ElasticSearch客户端模块,ElasticSearch客户端模块在数据库系统的文件属性信息表中查找以目录旧url值为前缀的记录,并将记录中的url值更新为以目录的新url值为前缀,替换掉旧url值的前缀。整个过程如图4所示。
4、增加单个文件时,判断该文件是否是文本类文件,若不是忽略,若是,读取md5值后,在数据库系统中添加该文件的属性信息,在ElasticSearch集群添加文件索引;
当文件系统管理模块检测到用户操作管理模块新增一个文件后,将该文件的url值发送给ElasticSearch客户端模块,ElasticSearch客户端模块判断该文件是否是文本类文件,若不是,则忽略;若是,首先读取md5值、url值等信息,在数据库系统的文件属性信息表中添加该文件的属性信息,然后抽取文件内容的纯文本,提交ElasticSearch集群创建文件索引,并让ElasticSearch客户端模块设置索引的ID等于该文件的md5值,整个过程如图5所示。
5、删除单个文件时,在数据库系统中删除该文件的属性信息,然后判断该文件md5值在数据库系统中是否存在,若不存在,在ElasticSearch集群删除文件索引;
当文件系统管理模块检测到用户操作管理模块删除了一个文件时,将文件的url值发送给ElasticSearch客户端模块,ElasticSearch客户端模块首先根据url值在数据库系统的文件属性信息表中查找是否存在该文件,若不存在,忽略,若存在,读取该文件的md5值然后删除这条文件记录,然后判断文件属性信息表中是否还存在其它具有相同md5值的文件,若存在,处理结束,若不存在,说明没有其它该文件的副本,因此紧接着在ElasticSearch集群中按照索引字段ID=md5查找文件索引并删除,整个过程如图6所示。
6、重命名或移动单个文件时,判断该文件是否是文本类文件,若不是忽略,若是,在数据库系统中更新文件属性的绝对路径信息;
当用户操作管理模块重命名或者移动文件后,文件的url值将发生变化,但文件的内容并没有变化,即md5值没有变化,因此只须更新数据库系统中文件属性信息表的url值即可。更新的过程为:文件系统管理模块检测到用户操作管理模块重命名或移动了一个文件,将文件的旧url值和新url值都发送给ElasticSearch客户端模块,ElasticSearch客户端模块首先根据新url值判断该文件是否是文本类文件,如果不是,忽略,若是,根据旧url值在数据库系统的文件属性信息表中查找文件记录,然后将该条记录的旧url值修改为文件的新url值,整个过程如图7所示。
7、修改文件内容后,判断该文件是否是文本类文件,若不是忽略,若是,重新获取md5值,在数据库系统中更新文件属性的md5值信息,更新前临时保存旧的md5值,然后判断数据库系统中是否存在其它旧的md5值的文件,若不存在,在ElasticSearch集群中删除旧的文件索引,最后根据新的文件内容和md5值创建新的索引;
修改文件内容后,文件的url值保持不变,但是内容改变了,一方面需要重新获取md5值并更新数据库文件属性信息表中存储的md5值,另一方面,ElasticSearch集群中文件索引的md5值可能已经过期(如果没有其它文件的副本的话),如果过期,需要根据旧的md5值查找文件索引并删除之,最后提取文件的纯文本重新创建索引,并将索引字段ID赋值为文件新的md5值,整个过程如图8所示。
本发明系统可有效减少ElasticSearch在进行索引查询时存在多个数据副本,造成存储资源浪费,具体实现为:
在本发明系统中,数据库系统不存储文件内容,需要文件内容的时候,是通过ElasticSearch客户端模块根据文件的url值及对应文件的传输协议直接从文件系统获取,这可以有效避免把文件内容存储在数据库中造成的数据冗余及为了保持数据的同步更新而带来的麻烦和性能消耗,过程如图9所示。
同时ElasticSearch集群本身也可以不存储文件内容,由于查询到文件索引后,会获取文件的md5值,而根据md5值可以在数据库系统中匹配到对应的文件url值,根据url值即可打开文件并显示文件内容,这对于全文检索只需要文件url值作为检索结果的需求特别适合,可以有效减少ElasticSearch集群的存储压力。
如图10所示,所述的基于ElasticSearch全文检索的文件索引方法,包括如下步骤:
(1)用户操作管理模块接受用户检索请求并传递给文件系统管理模块;
(2)文件系统管理模块在处理用户检索请求时,将用户检索请求中的关键词传送给ElasticSearch客户端模块;
(3)ElasticSearch客户端模块将用户检索请求中的关键词提交ElasticSearch集群模块检索;
(4)ElasticSearch集群模块执行用户检索请求中的关键词检索,并返回检索结果,检索结果为包含关键字的索引记录;
(5)ElasticSearch客户端模块从检索结果中提取文件的md5值;
(6)ElasticSearch客户端模块根据文件的md5值,查询数据库系统中的文件属性信息表,找到所有包含该md5值的文件属性记录,并从文件属性记录中找出文件的url值,返回给ElasticSearch客户端模块;
(7)ElasticSearch客户端模块将文件的url值向文件系统管理模块反馈,文件系统管理模块向用户操作管理模块显示搜索到的文件url值;而用户操作管理模块根据搜索到的文件url值可对文件进行管理操作。
根据本发明的文件索引方法得到的文件url值,即文件的路径信息也能获取,这样在使用ElasticSearch全文检索各种文件实行查询检索时,除了能获取检索到的文件内容或者关键字所处的上下文片段,还能获取命中的文件在文件系统中的存储路径,以便查询客户端可以在获取查询结果后,根据文件路径自由操作该文件。