`
javafan_303
  • 浏览: 957919 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在项目中集成 Google Desktop,提供全文检索能力(转)

阅读更多

 在项目中集成 Google Desktop,提供全文检索能力 (转)(原文http://wakan.blog.51cto.com/59583/d-7

 


在项目中,需要对客户资料和文件进行全文检索。考虑到 Google Desktop 强大的检索能力,决定把它集成到项目中,从而简化项目方案,加快进度。


1、用户从 Client 端浏览器中发出查询请求,例如:
  “网络管理”
 
2、search.jsp 构建出特殊的 URL,访问 Google Desktop:
  “


其中:
(1)127.0.0.1 是本机的 IP 地址,4664 是 Google Desktop 的监听端口号;
(2)“search&s=C4gKVsZ-bAyBaEwxsW2FKoAAqr0”是 Google Desktop 的特殊参数,注:“s=”后边的内容,不同的机器内容不一样,暂且称之为 serial,下文中有说明;
(3)“q=%E7%BD%91%E7%BB%9C%E7%AE%A1%E7%90%86”是被搜索的关键词,“网络管理”的 UTF-8 编码,再经过 java.net.URLEncoder.encode() 之后的结果;

3、Google Desktop 从本地硬盘上(假定是 E:\Docs)的资料中检索出符合条件的数据;(实际上这是事先就建好索引,并不是被调用时再去读取的)

4、Google Desktop 把结果返回给 search.jsp。这是一个 UTF-8 编码的大字符串;

5、search.jsp 把检索结果进行一系列处理后(例如去掉 Google 的 LOGO、权限过滤、格式调整、文件名变换、超级链接重定位等),返回给客户端浏览器。有一件事是要做的:把检索结果中形如“E:\Docs\abc.doc”的文件路径换成“/getfile.jsp?filename=abc.doc”,否则客户端打不开该链接;

6、客户单击了那些他感兴趣的文档资料的链接,该链接形如:
  “


7、getfile.jsp 从本地硬盘(E:\Docs)中读出 abc.doc。(在读出之前,可以加入权限判断功能,检查当前用户是否具备访问 abc.doc 的权限)

8、getfile.jsp 以二进制的方式把文件内容(abc.doc)返回给 Client 端浏览器,浏览器将根据文件的类型自动调用相关联的 Windows 程序(MS Word)打开文件。

本方案的关键之处是在第 2 步中构建合理的 URL。而该 URL 中,比较困难的是 “search&s=C4gKVsZ-bAyBaEwxsW2FKoAAqr0”。该内容在不同的机器上,可能不一样,但在同一台机器上,却是固定的,所以只需要手工寻找一次即可。

寻找该 serial 的方法是:

1、在安装了 Google Desktop 的服务器上,双击屏幕右下角的 Google Desktop 图标,系统将自动打开 IE,并出现桌面搜索的主页面;同时在 IE 的地址栏中将出现形如“
”的 URL;

2、在主页面上的空白处单击鼠标右键,“查看源文件”,并查找类似于“<FORM name=f method=GET action='/search&s=C4gKVsZ-bAyBaEwxsW2FKoAAqr0'>”的代码,看见了吧?“action=”后边的那一串,就是要寻找的目标;

本演示方案中,共涉及两个 JSP 文件:

1、search.jsp:负责构建正确的 URL,并对返回的结果作出分析、过滤、替换、权限检查等操作;

2、getfile.jsp:负责检查权限,然后从硬盘上读取相关的文件资料,返回给客户端;

由于我还不太会用赛迪的 BLOG,不知道如何实现图文混排(试了一次,好象不成功),所以在此只给出关键代码的示例,search.jsp 可仿照着写:

import java.io.InputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class GoogleDesktopConnect {

/* 这就是双击屏幕右下角的 Google Desktop 图标后,出现在 IE 地址栏中的内容 */
private static String urlInit = "
";

/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  String word = "网络管理";
  GoogleDesktopConnect google = new GoogleDesktopConnect();
  google.connect(urlInit, word);
}

private void connect(String strStartURL, String word){
  try {
    /* 从首页中自动分析出 search&s=C4gKVsZ-bAyBaEwxsW2FKoAAqr0*/
    String serial = getSerial(strStartURL);
    System.out.println("serial=" + serial);
   
    /* 构建合适的 URL */
    String newWord = java.net.URLEncoder.encode(word, "UTF-8");
    String strUrl = "
" + serial + "&q=" + newWord;  
    System.out.println("\n" + strUrl + "\n");
   
    /* 连接 Google Desktop */
    URL url = new URL(strUrl);
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setDoOutput(false);
    con.setDoInput(true);
    con.setRequestMethod("GET");
    /* 重要!如果不设置代理,Google Desktop 将返回错误信息 */
    con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
    con.connect();

    /* 从 Google Desktop 中接收检索结果 */
    InputStream is = con.getInputStream();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    int b = is.read();
    while (b >= 0) {
    bos.write(b);
    b = is.read();
    }
    String result = bos.toString("UTF-8");
    con.disconnect();
   
    // 接下来可以对 result 进行各种处理,例如权限检查、内容过滤、格式转换、URL 地址转换等

    System.out.println(result);
  }
  catch (Exception e) {
    e.printStackTrace();
  }
}


/**
  根据 urlInit,读取 Google Desktop 的初始页面,并从页面中分析出 serial
  */
private String getSerial(String strUrl) {
  String serial = null;
  try {
    URL url = new URL(strUrl);
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setDoOutput(false);
    con.setDoInput(true);
    con.setRequestMethod("GET");
    con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
    con.connect();

    InputStream is = con.getInputStream();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    int b = is.read();
    while (b >= 0) {
    bos.write(b);
    b = is.read();
    }
    String helloPage = bos.toString("UTF-8");
    System.out.println(helloPage);
   
    /* 查找 action='/server&s= */
    int p = helloPage.indexOf("action='/search&s=");
   
    /* 得到 serial */
    serial = helloPage.substring(p+18, p+45);
  }
  catch (Exception e) {
    e.printStackTrace();
  }
  return serial;
}
}
http://127.0.0.1:4664/search&s=http://127.0.0.1:4664/&s=UNBXCjdtJHM6yrJXNAfPo4xw6eQhttp://127.0.0.1:4664/&s=UNBXCjdtJHM6yrJXNAfPo4xw6eQhttp://server:8080/getfile.jsp?filename=abc.dochttp://127.0.0.1:4664/search&s=C4gKVsZ-bAyBaEwxsW2FKoAAqr0&q=%E7%BD%91%E7%BB%9C%E7%AE%A1%E7%90%86http://server:8080/search.jsp?keyword=
分享到:
评论

相关推荐

    全文检索技术(自己总结)

    **全文检索技术** ...全文检索技术的应用广泛,不仅在互联网搜索引擎中发挥着重要作用,也在桌面搜索和个人文件管理等领域提供了便利。随着技术的发展,全文检索系统将继续优化,以满足日益增长的信息检索需求。

    JAVA lucene全文检索工具包的理解与使用.doc

    不同于可以直接使用的搜索引擎产品,如百度或Google Desktop,Lucene是一个框架,需要开发者根据自身需求进行定制和集成。 1. Lucene核心功能: Lucene的主要任务是对文本进行分词、索引,然后根据用户输入的关键词...

    google桌面搜索,google搜索

    谷歌桌面搜索(Google Desktop Search)是谷歌公司推出的一款桌面搜索工具,它允许用户在个人计算机上快速便捷地搜索本地文件、电子邮件、聊天记录、网页浏览历史等信息,如同使用谷歌搜索引擎一般。这款工具极大地...

    Google 桌面企业版

    5. **管理工具**: 对于企业环境,Google桌面企业版提供管理工具,如`GoogleDesktop.adm`文件所示,管理员可以配置和控制搜索范围、安全设置以及更新策略。 6. **安装与配置**: `GoogleDesktopSetup.msi`是Windows...

    谷歌桌面搜索4.5

    3. **电子邮件集成**:谷歌桌面搜索4.5能与常见的电子邮件客户端(如Outlook、Gmail等)集成,用户可以直接在搜索结果中查看邮件内容,无需打开邮件客户端。 4. **网页历史搜索**:除了本地文件,该工具还能够搜索...

    GDS Java API - Google Desktop Java API-开源

    **GDS Java API**,全称为Google Desktop Search Java API,是一个专门为Java开发者设计的库,允许他们集成到自己的应用程序中,以便与谷歌桌面搜索服务进行交互。谷歌桌面搜索(Google Desktop Search)是一款曾经...

    Lucene.net概念介绍

    通过 Lucene.net,开发人员可以轻松地在 .NET 应用程序中集成全文搜索功能,从而提升应用的用户体验和数据查找效率。 1. Lucene 简介: - Lucene 本身是一个开源的全文搜索框架,它不直接作为一款应用产品使用,...

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    Power BI官方中文教程

    - **在 Power BI Desktop 中运行 Python/R 脚本**:支持用户直接在 Power BI Desktop 内部执行 Python 或 R 脚本,增加了数据分析的灵活性。 - **使用 Python 创建 Power BI 视觉对象**:教授如何使用 Python 编写...

    搜索服务器,GOOGL桌面远程访问

    然而,Google在2011年停止了对这个项目的支持,因此,描述中的“GOOGL桌面”可能是用户所指的类似功能或者是一个自定义的实现,旨在模拟Google Desktop的特性。 在标签中提到了“百度硬盘”,这可能指的是百度网盘...

    gypsophilia_touringguide

    在这个场景中,"gypsophilia_touringguide" 提供了一个关于喜爱餐厅清单的指南,这可能是为了方便旅行者或美食爱好者找到值得去的地方。虽然标签没有提供具体的信息,但我们可以从文件名推测这可能是一个开源项目...

    Lucene初级教程

    通过Lucene,开发者可以集成全文搜索功能到自己的应用程序中,类似于百度或Google Desktop的后台技术。 Lucene的工作流程分为“入”和“出”两个阶段。在“入”的阶段,源数据(如文本文件、数据库记录等)经过...

    别有洞天 Novell SUSE Linux Enterprise 10.pdf

    Beagle一体化搜索工具则类似于Google桌面搜索,但与操作系统集成度更高,能够快速查找硬盘中的文件、约会、电子邮件和即时消息,大大提高了信息检索效率。 在服务器领域,SUSE Linux Enterprise Server的表现同样...

    Folios:我新的最高机密项目。

    在Python项目中,开发者通常会使用 Git 工具如 `git` 命令行或 GUI 工具如 `GitHub Desktop` 或 `SourceTree`。 4. **RESTful API**:如果 Folios 提供了 Web 服务,那么很可能使用了 REST(Representational State...

    WebGIS考试参考试题-(1).docx

    在早期的WebGIS系统中,有一些代表性的项目,例如加拿大的国家地图信息服务部和GRASSLinks。WebGIS不仅用于传统的地图展示,还广泛应用于电子政务,如公共服务信息提供、客户服务中心以及网上办事等交互交流方式。...

    程序员需要的高效率工具

    Google Desktop Search 是一款由谷歌开发的桌面搜索工具,它可以帮助用户在本地计算机上搜索电子邮件、聊天记录、网页浏览历史等信息。尽管该产品已经停止更新,但它仍然为那些需要快速访问历史数据的用户提供了一个...

    毕业设计:基于Android平台英语单词速记App源码.zip

    5. **SQLite数据库**:为了存储和检索用户学习的单词数据,项目可能使用了Android内置的SQLite数据库。开发者需要了解如何创建表、插入、查询和更新数据。 6. **内容提供者(Content Provider)**:如果应用涉及到...

    java开源包1

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

Global site tag (gtag.js) - Google Analytics