说到搜索,大部分学员想到的就是数据库的模糊查询。模糊查询有两个问题:效率低,不能查找HTML页面上的静态内容。
于是需要工具进行对于网站的全文搜索。基本原理是用工具扫描整个网站的页面,将内容进行索引并保存,然后可以通过用户的关键字搜索。如果你用过google桌面搜索或者msn桌面搜索,应该对这个过程比较了解。
可见一个全文搜索工具至少需要包含两个方面:创建索引和搜索。
Lucene作为apache的开源工具,免费提供这些功能,并且能识别多种文件格式,支持词法分析等,是比较常用的全文搜索工具。
但是Lucene的中文教程很少,有本《Lucene In Action》,但讲的是老版本,Lucene2.0后,API变化较大,还没有很好的资料。
下面先贴出今天写的两段代码,针对磁盘文件的索引创建和搜索:
1,创建索引
public class CreateIndex {
public static void main(String[] args) {
String indexPath = "g:/indexout"; //保存索引的路径
try {
IndexWriter writer = new IndexWriter(indexPath, new StandardAnalyzer(), true);
addFile(writer, new File("g:/index")); //为指定的目录创建索引
int count = writer.docCount(); //得到索引文件的个数
writer.optimize(); //优化索引
writer.close();
System.out.println("创建索引完毕,一共索引了" + count + "个文件!");
} catch (Exception e) {
}
}
//用递归的方法搜索文件
public static void addFile(IndexWriter writer, File file) {
if (file.isDirectory()) {
File fs[] = file.listFiles();
for (int i=0; i<fs.length; i++) {
addFile(writer, fs[i]);
}
} else {
try {
//记录文件内容
Field fContent = new Field("content", new FileReader(file));
//记录文件名
Field fPath = new Field("path", file.getAbsolutePath(), Field.Store.YES, Field.Index.UN_TOKENIZED);
Document doc = new Document();
doc.add(fContent);
doc.add(fPath);
writer.addDocument(doc);
} catch (Exception e) {
}
}
}
}
2,搜索
public class SearchTest {
public static void main(String[] args) {
String key = "搜索关键字";
try {
Directory dir = FSDirectory.getDirectory("g:/indexout");
IndexSearcher searcher = new IndexSearcher(dir);
Query query = new QueryParser("content", new StandardAnalyzer()).parse(key); //创建一个查询
Hits hits = searcher.search(query); //得到查询的结果
Iterator it = hits.iterator(); //迭代打印结果
while (it.hasNext()) {
Hit hit = (Hit) it.next();
Document doc = hit.getDocument();
System.out.println(doc.get("path")); //打印搜索到文件的路径
}
} catch (Exception e) {
}
}
}
这两段代码已经可以实现Google桌面搜索的核心功能了.
分享到:
相关推荐
以上内容只是Lucene全文检索的基础知识,实际使用中还需要根据具体需求进行调整和优化。在深入学习Lucene的过程中,阅读《全文检索Lucene》这本书将是十分有益的,它将帮助你更好地理解和掌握Lucene的核心概念及其...
【标题】:“HeyJava传智播客全文检索Lucene源码” 【描述】:这个资源主要聚焦于Lucene,一个广泛使用的全文检索库,由Apache软件基金会开发并维护。通过学习这部分内容,你可以深入理解Lucene如何实现高效的文本...
总之,Lucene-5.2.1是一个强大而灵活的全文检索框架,不仅适用于大型网站的搜索功能,也可以用于企业内部信息检索、文档管理系统等多个领域。通过学习和实践这些经典实例,开发者能够掌握如何利用Lucene构建高效的...
《XWiki全文搜索Lucene后台代码解析》 在IT领域,全文搜索引擎的使用越来越广泛,尤其是在各类信息量庞大的Web应用中。XWiki是一款强大的开源wiki系统,它支持自定义的数据模型和丰富的扩展机制,其中就包括了全文...
Eclipse工程文件,全文检索 lucene-5.2.1 入门Eclipse工程实例,福利放送,与lucene3结果比对
【全文搜索Lucene & ElasticSearch】是一门关于安装和入门的课程,主要涵盖了全文检索的基本概念,Lucene和ElasticSearch的介绍,以及如何使用Java操作ElasticSearch。全文检索,顾名思义,是对非结构化数据进行搜索...
**全文搜索Lucene知识** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它是Java语言编写,但可以被其他编程语言通过各种桥接库进行调用。Lucene的核心功能包括文本分析、索引创建、查询解析...
**全文检索Lucene** Lucene是Apache软件基金会的开源项目之一,它是一个强大的、高性能的全文检索库。作为Java编写的基础组件,Lucene为开发者提供了实现全文搜索功能所需的底层算法和数据结构。这个库不仅实现了...
**Spring MVC + Lucene 全文检索** 在现代Web应用中,实现高效的全文检索功能是提升用户体验的关键之一。本文将详细介绍如何使用Spring MVC框架结合Apache Lucene库来构建一个强大的全文检索系统。首先,让我们了解...
【全文检索lucene】 Lucene是一个高性能、可扩展的信息检索库,由Apache软件基金会开发,是Java编写的一个全文检索引擎的开源工具包。它提供了一个简单但功能强大的API,允许开发者将全文搜索功能添加到自己的应用...
Lucene提供了强大的文本分析、索引构建和搜索功能,为开发者提供了构建自己的全文检索应用的基础框架。由于其高效性和灵活性,Lucene已经成为Java世界中最受欢迎的全文检索引擎。 **Lucene的核心组件** 1. **索引*...
Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了Lucene作为其内部全文检索子系统的...
**Lucene全文检索引擎** Lucene是Apache软件基金会的一个开源项目,它是一个高性能、全文本搜索引擎库,可以被集成到各种应用中实现全文检索功能。Lucene提供了完整的搜索功能实现,包括索引创建、文档存储、查询...
Lucene.Net 是一个基于 Apache Lucene 的开源全文搜索引擎库,专为 .NET Framework 平台设计。它提供了一套高级文本搜索程序库,让开发者能够在 .NET 应用程序中轻松实现全文检索功能。在本案例中,我们将在 .Net ...
在"Lucene全文搜索_LuceneJava全文搜索_"这个主题中,我们将深入探讨Lucene如何在Java环境中实现高效的全文搜索引擎。首先,Lucene的核心概念包括文档(Document)、字段(Field)、索引(Index)和搜索(Search)。...
Java全文搜索引擎Lucene是一款开源的、高性能的文本分析和检索库,它为开发者提供了在Java应用程序中实现全文搜索功能的能力。本篇将深入探讨Lucene 3.0.0版本的核心特性、设计理念以及使用方法。 一、Lucene概述 ...
《中文分词及其在基于Lucene的全文检索中的应用》这篇论文主要探讨了中文分词在全文检索系统,特别是基于Lucene平台的应用。全文检索技术是现代信息检索领域的重要组成部分,而Lucene作为一款开源的全文检索引擎框架...
在本文中,我们将探讨如何使用Zend Framework的Lucene模块进行全文检索,特别是针对中文分词的处理。全文检索是提高网站或应用搜索功能的关键技术,它允许用户输入任意词汇,系统能够快速找到与之相关的内容。Zend ...