一种基于事件关联的桌面云搜索方法
技术领域
本发明涉及一种在海量数据库存储的环境下进行数据或文件搜索技术,特别涉及一种基于事件关联的桌面云搜索方法。
背景技术
云环境由于能有效地进行资源的整合以提高资源的利用率,正受到工业界和学术界的广泛重视。随着云存储技术的发展,工业界和学术界也正积极地研究和推动云存储环境下数据的存储、组合和检索,以便能够向用户提供更人性化的服务。云存储能够带给用户一种崭新的存储体验。例如,用户在工作地点和家里均有一台电脑,那么他在两台计算机上的操作往往无法进行同步,从而带来了繁琐的文件拷贝和传送问题,而且还会存在数据的不一致性。倘若硬盘或者移动存储器件发生损坏,则会造成无法计算的数据损失。云存储与传统的存储设备相比,由于数据存储在云端,故具有不再担忧由于硬盘损坏而丢失重要数据的优点。同时,任何一台设备对该文件的更改都将自动更新到云上,并且可以随时随地查看文件。所以,在云存储的环境下,能使我们在不同地方对数据所进行的操作得到同步,使数据存储和更新更为方便。
信息数字化导致个人存储的信息(特别是无结构化数据信息)呈指数级增长,即使普通的个人电脑如今也配备了数百GB以上的存储空间。而且在云环境下,为了进行云环境的整体优化,这些数据往往以分块的形式分布式存放在大量的云存储服务器上。因此,在云存储环境下,如何在海量的无结构化数据中检索到有用的信息正成为一个非常具有挑战性的问题。
传统的基于关键字和内容的搜索方式即使在个人电脑上都存在着响应时间长,搜索结果不够准确等问题。那么相应的搜索工具在云存储环境下面对海量的数据必然面临重大的挑战。另外,人对于普通事件的记忆往往随着时间的流逝而逐渐模糊。仅仅依靠模糊记忆的几个关键字在如此大的存储空间中寻找需要的文件或信息,往往耗时较长,而且,也不够准确。
设想有这么一个场景:当你突然想起几个月前,你用计算机在发送一封邮件时浏览过的一篇文档有一个很好的想法或者对自己很重要的东西,而你现在迫切地想把它找出来再次阅览或者使用它。当面对着计算机里无数的文件和文件夹,你如果又忘了具体的文件信息,这谈何容易?你可能根本找不到它,或者花上很长的时间逐个文件夹寻找。
现在有许多成熟的桌面搜索工具。例如,Linux的文件搜索功能、Google桌面搜索、windows桌面搜索和百度硬盘搜索等。但是,这些桌面搜索都具有搜索功能简单,响应慢,占用系统资源多等缺点。而且,也无法满足我们的需求。在过去的十多年中,也有大量研究文件系统搜索的工作。如:利用多维倒排文件的高维空间中点数据的索引方法(即MIF);使用基于资源的匹配来替代传统的字符串匹配文件搜索引擎:天网千帆;基于RDF句子的文档词向量构建方法语义网文档搜索;多用户环境下的桌面文件搜索等等。以上这些工作都是为了提高搜索的性能。但是,如果需要搜索的只是曾经浏览过的一个网页的网址,或者偶尔浏览过的一篇文档,我们不记得也没有存储详细的网址,也不记得需要搜索文件的文件名或者关键词,那么传统的搜索工具和搜索方法完全无能为力。
所以,针对上述场景下所遇到的问题,我们需要一个改进的工具来解决云环境下个人用户的搜索问题。本发明以用户的行为为主线,将和其相关联的事件以结构化数据的形式存储起来。在无法提供准确的信息来搜索需要的文件或数据时,可以先搜索和该文件相关联的能够准确记忆的事件,然后基于存储在数据库中各种事件的关联性回溯到需要的文件或数据。
发明内容
本发明的目的在于克服现有技术的缺点与不足,提供一种基于事件关联的桌面云搜索方法,其将模糊的记忆和其相应的历史事件关联起来,通过关联的历史,来准确定位搜索信息。
为了达到上述目的,本发明采用以下技术方案:
一种基于事件关联的桌面云搜索方法,具体包括下述步骤:
(1)用户在使用计算机时,后端程序随用户登录而启动,其中一个进程使用Linux内核提供的inotify系统调用来分别对存储本地文件使用的历史文件数据库进行监控,平时处于阻塞状态,当这些文件被修改时,即发生了对象事件,则执行步骤(2)的操作;
(2)内核给程序发出一个时间通知来唤醒程序,经过对上述对象事件的判定来构建结构体,然后执行步骤(3);
(3)把步骤(2)中构建的结构体发送到预先约定的消息队列中,然后进程继续阻塞,等待下一个事件的到来,继续执行步骤(1);
(4)后端程序的另外一个进程负责每隔一定时间对消息队列中的消息进行读取,然后根据消息的不同来更新常驻于内存的链表文件;
(5)为用户提供一个图形前端界面,用户通过前端界面提供一些自己的显性记忆;
(6)程序搜索,通过步骤(5)中提供的条件对本地信息库存储的所有信息进行筛选;
(7)用户在所显示的结果中寻找到自己所需要的信息。
优选的,步骤(1)中,所述历史文件数据库包括本地文件使用历史的文件、各个浏览器的历史数据库文件和Email程序的数据库文件。
优选的,步骤(2)中,如果所述对象事件是一个网页或邮件事件类型,则通过一个包含打开程序、文件类型、用户Uid、执行方式或打开时间等一系列信息来构建结构体,然后执行步骤(3);如果所述对象是一个文档事件,则从GtkRecentManager中获取最新的最近使用的文件信息,包括用户uid、文件类型、打开程序、执行方式、打开时间、文件路径或文件名来构建结构体,然后执行步骤(3)。
优选的,步骤(4)中,所述链表文件包括打开文件的列表和打开程序的列表。
优选的,所述步骤(4)进一步包括读取完消息后遍历打开程序列表来判断这些程序的进程是否存在,若不存在则表明程序已经被关闭,然后把打开文件的列表里的该程序打开的文件项转存至数据库中;若存在,则转至步骤(5)。
优选的,步骤(4)中,所述显性记忆包括所需要寻找的对象曾经被使用、阅览或者编辑的时间段;所操作对象期间曾经打开过的程序或对象的类型;或操作对象目标对象期间所操作的对象名字的关键字。
优选的,步骤(5)之后还包括提供一些自己所要寻找的隐性记忆,所述隐性记忆包括目标对象的操作程序、目标对象的类型和目标对象的关键字。
本发明相对于现有技术具有如下的优点及效果:
1、本发明采用会话的方式,来从显性的记忆中关联回溯到隐性的记忆,对于曾经使用过的、存在于记忆中的不确定信息的搜索有较好的效果,特别是对于无法确定关键字的信息或文件的搜索效果更为理想,有着其它桌面搜索程序无法比拟的优势和高效。
2、本发明利用分布在操作系统中的各种数据库来记录和关联与用户行为相关联的事件,避免了修改操作系统来获取事件信息。因此,具有较高的推广价值。
3、本发明是将针对海量非结构化数据的搜索转化为结构化的数据进行存储和检索,因此,极大地提高了检索效率。
附图说明
图1是本发明实施例1云桌面搜索方法的流程图;
图2是本发明实施例2云桌面搜索方法的流程图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
实施例1
在云环境下的个人桌面电脑环境中,用户使用Linux操作系统的GNOME(一种让使用者容易操作和设定电脑环境的图形接口工具)桌面环境来进行收发邮件、浏览网页、操作本地文件等。用户要在机器上寻找一些自己操作过的、而现在不确定的数据或文件,而自己仅记得一些相关联的信息。如寻找几个月以前查看特定的某人发送过来的邮件时所浏览过的一篇文档或网页。
本实施例基于事件关联的云桌面搜索方法,如图1所示,包括下述步骤:
(1)用户在使用计算机时,后端程序随用户登录而启动,其中一个进程使用Linux内核提供的inotify系统调用(inotify是Linux操作系统提供的一个系统调用的接口,可以通过编程来使用该接口)来分别对存储本地文件使用历史的文件、各个浏览器的历史数据库文件、Email程序的数据库文件进行监控,平时处于阻塞状态。当这些文件被修改时,也就是说,发生了我们想要的对象事件。
(2)对象发生后,内核会给我们的程序发出一个事件通知来唤醒我们的程序,经过对这些对象事件的判定,如果是对象是一个网页或邮件事件类型,则通过构建一个包含打开程序、文件类型、用户uid、执行方式、打开时间等一系列信息的结构体(不含从数据库中获得的信息);如果对象是一个文档事件,从GtkRecentManager(GtkRecentManager是Linux操作系统的GNOME环境下提供的一个用来管理最近使用的文件的工具)中获取最新的最近使用过的文件信息,通过这些文件信息(包括用户uid、文件类型、打开程序、执行方式、打开时间、文件路径、文件名)来构建结构体。
(3)把构建好的结构体发送到一个进程间预先约定的消息队列中。然后进程继续阻塞,等待下一个事件的到来。
(4)后端程序的另外一个进程则负责每隔一定的时间对消息队列中的消息进行读取,然后依据消息的不同来更新常驻于内存的两个链表文件:打开文件的列表和打开程序的列表。这些列表保存着系统正在运行的GUI(图形用户界面)程序的名称及其打开的文件的信息(如打开时间、文件名称、文件路径等等)。读取完信息后则遍历打开程序的列表来判断这些程序的进程是否存在,若不存在则表明程序已被关闭,然后把打开文件的列表里的该程序打开的文件项转存至数据库中,若关闭的是浏览器,则从浏览器的数据库文件读取对象的打开时间以来所浏览的网页信息(包括网页标题、URL、打开时间),经过转换后存储一个本地的数据库里。这些就是程序搜索的信息库数据的起源。接着休眠一段时间,再继续读取消息队列里的消息。如此循环不断。
(5)本发明为用户提供一个图形前端界面。当用户需要查找数据时,用户可以提供一些自己记得的显性记忆,比如说,所要寻找的对象曾经被使用或阅览、编辑的大概时间段,所操作对象期间曾经打开过的程序或对象的类型,或者是操作目标对象期间所操作的其它对象名字的关键字等。
(6)程序搜索时,会在本地信息库存储的所有信息中,由以上所提供的条件进行筛选,以寻找到合适、正确的结果。
(7)用户在所显示的结果中快速定位到自己所要的信息。
实施例2
本实施例除下述特征外其他特征同实施例1:如图2所示,实施例1中所述步骤(5)之后用户可以提供一些自己所要寻找的隐性记忆的相关信息。如目标对象的操作程序,目标对象的类型,目标对象的关键字等。程序搜索时,会在本地信息库存储的所有信息中,由用户提供的显性记忆和隐性记忆的条件进行筛选,以寻找到合适、正确的结果。首先由显性记忆所提供的信息来定位到历史的一个或者多个会话,然后再在这些会话中对筛选出符合隐性记忆的结果。并认定最近时间段的结果为最优结果。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。