简单理解kde4的语义学桌面搜索
杜比环绕声
语义学桌面搜索是kde4桌面环境所提供的新搜索技术,它依据的是知识库的语义学研究成果。我一直很好奇这个技术,得益于kde 4.1 rc1的使用,说说我对这个技术的理解。
目前所能理解的搜索,大都是利用文件名、扩展名以及一些文件属性等关键字进行搜索,较早的实现是以文件名为关键字,采取目录树遍历的方法,诸如kde3的kfind程序,目前的实现大都基于事先建立的关键字索引数据库,来加快搜索速度,例如freebsd提供的locale程序。但这些搜索技术都是基于文件属性的,搜索的结果定位在文件位置上。
在桌面环境下更高的搜索需求是存在的,例如特定的内容在哪些文件中出现过,搜索特定大小的图片文件,搜索特定长度的音频文件等等,这些搜索都要深入到文件内部,而这种搜索实现可以从网络引擎获得的直接经验,但具体依据什么样的关键字,搜索范围能扩大到什么程度,目前还不得而知。
语义学搜索,是目前的一项研究,从目前kde4的实现上看,它是基于文件属性以及文件内容搜索的。 这种搜索基于文件内容和属性的描述语言——RDF,简单的说是一种类似xml语言,可以对多种属性进行定义和描述的框架。在这个框架上,可以根据不同类型的文件,建立不同的属性,然后对它进行描述,每个属性都是对外的一个接口,从搜索上看,就是提供多头的关键字。利用这些关键字,可以和计算机内的其他文件建立“蜘蛛网”般的各种联系。这种网是基于文件内部属性的,这个网可以简单的称之为“语义网”。
实现这个“语义网”需要大致需要三个条件
1、文件内容属性的分析
2、加快搜索的属性索引数据库
3、组建“语义网”
对应于kde4的语义学桌面搜索实现,分别是 soprano,strigi和nepomukserver
strigi是一个基于clucene的后台搜索服务,它可以动态跟踪文件,利用clucene建立和维护索引数据库,soprano提供不同文件类型的基于rdf描述的分析和存储方式。
nepomukserver提供了一个框架,对不同类型文件的rdf进行定义,比较直观的操作是它可以通过dolphin对文件添加“个人评分”“个性标记”以及“个性备注”,它也可以通过一些图片查看、制作软件添加个性标记,可以通过音乐播放软件添加附加的标记,这些都会被定义为rdf的描述。并最终利用strigi建立索引。当然这个索引数据库会很大,在kde4贡献者博客上,我看到了一位用了1个半小时的时间为30G的磁盘文件建立了200M的索引数据库。
有了这些技术上的支持,桌面搜索范围得到了明显的增强。
利用kde4的nepomuk框架,目前我可以查看那些文件里面出现了“FreeBSD”这个字,我也可以快速的汇总我所标记的文件。可以预想,随着neomuk-kde框架的进一步成熟,支持的程序越来越多,除了文件管理更方便之外,还可以通过rdf描述的属性关键字,把个人计算机中的文件组成一个小型“google网络”。
2009年1月31日星期六
让kde 4.2的Nepomuk正常工作
Nepomuk的启动流程
首先系统配置为Nepomuk 启动,然后启动 Nepomuk ontology loader,因为这个服务依赖 nepomukstorage,所以先启动 nepomukstorage
之后启动 nepomukqueryservice,nepomukstrigiservice,nepomukfilewatch,,装载 Soprano 的所有插件,搜索/usr/local/share/soprano/plugins目录下的插件,先搜索.desktop文件,然后根据desktop文件内容加载对应的库(nquadparser.desktop、nquadserializer.desktop、raptorparser.desktop、raptorserializer.desktop、redlandbackend.desktop),搜索了两遍,确定插件加载。
加载 libsoprano_redlandbackend.so 这个后端库,激活这个后端,并发现以下错误:could not find backend "sesame2" . Falling back to default.
建立搜索数据库:repository ' "main" ' at ' "/root/.kde4/share/apps/nepomuk/repository/main/",这里面包含数据库的路径。
creating model of type "hashes" with options
"hash-type='bdb',contexts='yes',dir='/root/.kde4/share/apps/nepomuk/repository/main/data/redland'"
Nepomuk::Repository::open: Successfully created new model for repository "main" 成功建立数据库,bdb格式的
CLuceneIndex::open in thread 701501696
CLuceneIndex::close in thread 701501696
CLuceneIndex::close done in thread 701501696
CLuceneIndex::open done in thread 701501696
这应该是一个测试,测试是否可以建立index
Successfully created new index for repository "main"
Successfully initialized nepomuk core
成功初始化nepomuk核心,成功初始化nepomukstorage,接下来按照下面的顺序初始化
Nepomukstrigi、 nepomukfilewatch、 nepomukqueryservice、 nepomukqueryservice、 nepomukontologyloader
建立nepomuk服务器链接,加载Soprano后端,启动strigi服务,提示失败原因是:低优先级别调度,当使用redland soprano后端时不能启动,,启动nepomukontologyloader 进程,监护 /root/.kde4/share/apps/nepomuk/ontologies目录,发现日期修改。
启动nepomukfilewatch进程,启动nepomukqueryservice进程,完成nepomuk相关服务的加载!
原来sesame2的编译需要java环境,在soprano的ports中若没有java环境,就不编译sesame2的后端组件。
FreeBSD环境下配置Nepomuk
从上面的分析可知,Nepomuk的文件检索功能需要soprano的sesame后端的支持才行,所以正常运行Nepomuk需要安装好sesame2,经过一些测试,主要的步骤如下:
从soprano的ports的测试可知,soprano是内含sesame后端代码的,但在编译时,需要检测JNI,为了满足这个条件,需要安装JAVA SDK环境
安装javavmwrapper-2.3.2 ports
下载安装 diablo-jdk-freebsd7.i386.1.6.0.07.02.tbz,可从FreeBSD基金会网站下载,也可自行编译。
安装完成后设置 JAVA_HOME=/usr/local/Diablo-jdk1.6.0
然后重新安装soprano软件,查看 /usr/local/lib/soprano/目录下,已经有sesame后端了!
重新启动kde,Nepomuk已经可以正常启动,系统启动即建立指定目录的索引!
首先系统配置为Nepomuk 启动,然后启动 Nepomuk ontology loader,因为这个服务依赖 nepomukstorage,所以先启动 nepomukstorage
之后启动 nepomukqueryservice,nepomukstrigiservice,nepomukfilewatch,,装载 Soprano 的所有插件,搜索/usr/local/share/soprano/plugins目录下的插件,先搜索.desktop文件,然后根据desktop文件内容加载对应的库(nquadparser.desktop、nquadserializer.desktop、raptorparser.desktop、raptorserializer.desktop、redlandbackend.desktop),搜索了两遍,确定插件加载。
加载 libsoprano_redlandbackend.so 这个后端库,激活这个后端,并发现以下错误:could not find backend "sesame2" . Falling back to default.
建立搜索数据库:repository ' "main" ' at ' "/root/.kde4/share/apps/nepomuk/repository/main/",这里面包含数据库的路径。
creating model of type "hashes" with options
"hash-type='bdb',contexts='yes',dir='/root/.kde4/share/apps/nepomuk/repository/main/data/redland'"
Nepomuk::Repository::open: Successfully created new model for repository "main" 成功建立数据库,bdb格式的
CLuceneIndex::open in thread 701501696
CLuceneIndex::close in thread 701501696
CLuceneIndex::close done in thread 701501696
CLuceneIndex::open done in thread 701501696
这应该是一个测试,测试是否可以建立index
Successfully created new index for repository "main"
Successfully initialized nepomuk core
成功初始化nepomuk核心,成功初始化nepomukstorage,接下来按照下面的顺序初始化
Nepomukstrigi、 nepomukfilewatch、 nepomukqueryservice、 nepomukqueryservice、 nepomukontologyloader
建立nepomuk服务器链接,加载Soprano后端,启动strigi服务,提示失败原因是:低优先级别调度,当使用redland soprano后端时不能启动,,启动nepomukontologyloader 进程,监护 /root/.kde4/share/apps/nepomuk/ontologies目录,发现日期修改。
启动nepomukfilewatch进程,启动nepomukqueryservice进程,完成nepomuk相关服务的加载!
原来sesame2的编译需要java环境,在soprano的ports中若没有java环境,就不编译sesame2的后端组件。
FreeBSD环境下配置Nepomuk
从上面的分析可知,Nepomuk的文件检索功能需要soprano的sesame后端的支持才行,所以正常运行Nepomuk需要安装好sesame2,经过一些测试,主要的步骤如下:
从soprano的ports的测试可知,soprano是内含sesame后端代码的,但在编译时,需要检测JNI,为了满足这个条件,需要安装JAVA SDK环境
安装javavmwrapper-2.3.2 ports
下载安装 diablo-jdk-freebsd7.i386.1.6.0.07.02.tbz,可从FreeBSD基金会网站下载,也可自行编译。
安装完成后设置 JAVA_HOME=/usr/local/Diablo-jdk1.6.0
然后重新安装soprano软件,查看 /usr/local/lib/soprano/目录下,已经有sesame后端了!
重新启动kde,Nepomuk已经可以正常启动,系统启动即建立指定目录的索引!
订阅:
博文 (Atom)