http://www.blogcn.com/User8/flier_lu/blog/20045179.html
最近实在太忙,没空更新blog,只好贴点代码先,呵呵
在建立 企业内容管理服务器时,一个很大的问题是如何处理种类繁多、数量巨大的文件检索和定位问题。虽然大部分关系型数据库提供了 LIKE 语句或面向字段的全 文检索支持,但并非所有数据都适合保存在数据库中。例如一个 SharePoint 建立的知识共享服务器上,存在 DOC, PPT, PDF, CHM 等不同格式文档文件,面向内容的全文检索如 Lucene 或 MS Search 都无法提供直接的完善支持。而且对检索内容的更新和历史追 述也是大问题,特别是基于文件方式共享时,很难对更新文档的索引实效性和更新的历史做维护。
好在现在有了 Google 桌面搜索(GDS - Google Desktop Search),让这些恼人的问题可以告一段落了,呵呵。
我们所需要做的只是在服务器上安装一套 Google 桌面搜索,配置好允许它索引哪些目录,下载或开发一些特定格式文件的支持。Google 桌面搜索 自身就支持 Word, Excel, Pointpoint, Html, Pdf 等常见格式,通过免费的插件还可以支持诸如 CHM 等特定格式, 也可以很方便开发支持自己特定格式的索引插件。(本系列文章下一篇将以 foxmail 的索引器为例介绍如何开发索引器)而 Google 桌面搜索会 自己处理诸如索引实效性和历史版本(快照)的问题。
而使用 GDS 结果的最简单方法,莫过于直接访问 localhost:4664 的 Web 搜索界面。可以通过 Apache 的 mod_proxy 或类似功能将之转发到对外的页面上。但一个较大问题是这样返回的搜索结果是较难 重用的 HTML 格式,而且路径指向的是服务器上的文件路径,对远程访问不可用。
好在 GDS 提供了查询服务支持,我们可以通过此接口获取我们感兴趣的查询结果,并翻译成远程可用的地址链接。
主要流程如下:
1.检测 GDS 的安装情况,获取其查询请求的key
2.向 GDS 以特定格式发送查询请求
3.解析 GDS 返回的 XML 格式查询结果
4.将查询结果翻译成远程可用形式,并在门户上展示
第一步检测 GDS 的安装实现很简单,只需要测试特定注册表键的存在与否,以及其指向目录的有效性即可。
注意 GDS 处于安全性或某方面的考虑,在安装时会为每台机器生成一个唯一的查询 key,在发送查询请求时必须附带此 key,否则查询会失败。这个 key 的内容可以通过 search_url 获取到,如笔者机器上 search_url 内容如下:
在得到搜索url后,就可以以特定格式组织查询请求,在一个GET请求中提交所有需要查询的内容。一般来说,查询参数可以分为查询字符串、查询标记、起始记录、返回记录数和返回格式。
查询字符串指定你要搜索的内容,如果内容中有空格,需要以 + 号替代;如果希望搜索一个连续 匹配,需要用 " 号扩起来,并在发送时编码为 %25。查询字符串的编码支持如下:
查询标记则包括要查询哪些类型的数据,以什么方式排序等等,如:
起始记录、返回记录数分别定义返回的查询结果从哪条记录开始,一次返回多少条,跟数据库操作中的分页很类似。返回格式则直接指定为便于二次分析处理的 xml 格式。
具体完成搜索请求的代码如下:
GDS 会根据搜索请求,返回一段 XML 格式的搜索结果,如
我们需要对结果集做解析和整理,分析生成一个完整可用的结果列表。
然后就可以很方便的使用此封装库进行 GDS 查询,如
对企业搜索服务来说,可以将 URL 转换为远程可用的 Web 地址。
下面是完整的结果集解析代码:
to be continue... GDS [2] 为 Google 桌面搜索增加 Foxmail 支持
最近实在太忙,没空更新blog,只好贴点代码先,呵呵
在建立 企业内容管理服务器时,一个很大的问题是如何处理种类繁多、数量巨大的文件检索和定位问题。虽然大部分关系型数据库提供了 LIKE 语句或面向字段的全 文检索支持,但并非所有数据都适合保存在数据库中。例如一个 SharePoint 建立的知识共享服务器上,存在 DOC, PPT, PDF, CHM 等不同格式文档文件,面向内容的全文检索如 Lucene 或 MS Search 都无法提供直接的完善支持。而且对检索内容的更新和历史追 述也是大问题,特别是基于文件方式共享时,很难对更新文档的索引实效性和更新的历史做维护。
好在现在有了 Google 桌面搜索(GDS - Google Desktop Search),让这些恼人的问题可以告一段落了,呵呵。
我们所需要做的只是在服务器上安装一套 Google 桌面搜索,配置好允许它索引哪些目录,下载或开发一些特定格式文件的支持。Google 桌面搜索 自身就支持 Word, Excel, Pointpoint, Html, Pdf 等常见格式,通过免费的插件还可以支持诸如 CHM 等特定格式, 也可以很方便开发支持自己特定格式的索引插件。(本系列文章下一篇将以 foxmail 的索引器为例介绍如何开发索引器)而 Google 桌面搜索会 自己处理诸如索引实效性和历史版本(快照)的问题。
而使用 GDS 结果的最简单方法,莫过于直接访问 localhost:4664 的 Web 搜索界面。可以通过 Apache 的 mod_proxy 或类似功能将之转发到对外的页面上。但一个较大问题是这样返回的搜索结果是较难 重用的 HTML 格式,而且路径指向的是服务器上的文件路径,对远程访问不可用。
好在 GDS 提供了查询服务支持,我们可以通过此接口获取我们感兴趣的查询结果,并翻译成远程可用的地址链接。
主要流程如下:
1.检测 GDS 的安装情况,获取其查询请求的key
2.向 GDS 以特定格式发送查询请求
3.解析 GDS 返回的 XML 格式查询结果
4.将查询结果翻译成远程可用形式,并在门户上展示
第一步检测 GDS 的安装实现很简单,只需要测试特定注册表键的存在与否,以及其指向目录的有效性即可。
|
注意 GDS 处于安全性或某方面的考虑,在安装时会为每台机器生成一个唯一的查询 key,在发送查询请求时必须附带此 key,否则查询会失败。这个 key 的内容可以通过 search_url 获取到,如笔者机器上 search_url 内容如下:
以下为引用:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Google\Google Desktop\API]
"search_url"="http://127.0.0.1:4664/search&s=SUPg4XxVcE8Bx8Atf4uTQd3Z7ic?q="
在得到搜索url后,就可以以特定格式组织查询请求,在一个GET请求中提交所有需要查询的内容。一般来说,查询参数可以分为查询字符串、查询标记、起始记录、返回记录数和返回格式。
查询字符串指定你要搜索的内容,如果内容中有空格,需要以 + 号替代;如果希望搜索一个连续 匹配,需要用 " 号扩起来,并在发送时编码为 %25。查询字符串的编码支持如下:
|
查询标记则包括要查询哪些类型的数据,以什么方式排序等等,如:
|
起始记录、返回记录数分别定义返回的查询结果从哪条记录开始,一次返回多少条,跟数据库操作中的分页很类似。返回格式则直接指定为便于二次分析处理的 xml 格式。
具体完成搜索请求的代码如下:
|
GDS 会根据搜索请求,返回一段 XML 格式的搜索结果,如
以下为引用:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<results count="24945">
<result>
<category>file</category>
<id>46384</id>
<title>SDK Developer Documentation</title>
<url>C:\Documents and Settings\me\My Documents\developerguide.html~</url>
<time>127543068856350000</time>
<snippet>SDK Developer Documentation <b>Google</b> Desktop Search SDK Developer Guide For Users Download Plug-ins Desktop Search Forum For Developers</snippet>
<icon>/file.gif</icon>
<cache_url>http://127.0.0.1:4664/... </cache_url>
</result>
...
</results>
我们需要对结果集做解析和整理,分析生成一个完整可用的结果列表。
|
然后就可以很方便的使用此封装库进行 GDS 查询,如
|
对企业搜索服务来说,可以将 URL 转换为远程可用的 Web 地址。
下面是完整的结果集解析代码:
|
to be continue... GDS [2] 为 Google 桌面搜索增加 Foxmail 支持