lucene 是什么?
lucene是一个基于JAVA的全文信息检索工具包,它不是一个完整的搜索引擎,它只为你的程序构建索引,然后在索引上进行搜索。具体lucene能做什么,见下图:
lucene能做什么?
任何文本的东西都可以给lucene构建索引,不管是pdf、html只要能转换为文本,lucene就可以构建索引,查询索引。就这么简单
下面就用一个简单的例子来构建自己的应用程序:
Lucene 软件包分析
Lucene 软件包的发布形式是一个 JAR 文件,下面我们分析一下这个 JAR 文件里面的主要的 JAVA 包,使读者对之有个初步的了解。
Package: org.apache.lucene.document
这个包提供了一些为封装要索引的文档所需要的类,比如 Document, Field。这样,每一个文档最终被封装成了一个 Document 对象。
Package: org.apache.lucene.analysis
这个包主要功能是对文档进行分词,因为文档在建立索引之前必须要进行分词,所以这个包的作用可以看成是为建立索引做准备工作。
Package: org.apache.lucene.index
这个包提供了一些类来协助创建索引以及对创建好的索引进行更新。这里面有两个基础的类:IndexWriter 和 IndexReader,其中 IndexWriter 是用来创建索引并添加文档到索引中的,IndexReader 是用来删除索引中的文档的。
Package: org.apache.lucene.search
这个包提供了对在建立好的索引上进行搜索所需要的类。比如 IndexSearcher 和 Hits, IndexSearcher 定义了在指定的索引上进行搜索的方法,Hits 用来保存搜索得到的结果。
首先介绍一下lucene的基本类:
Document : 用于表示一个文件,document由Field组成,是Field的一个集合,Field表示用于建立索引和查询索引。所以为了能合理的区分多个document,建议对每个文档用到的Field应该是能唯一标识该docuemnt,尽量和别的document的Field内容不同。
Field: Document的集合内容,用于区分文档和查询文档的基本单位,有两部分组成一个是name,一个是原始的未加工的文本内容。如Field field = new Field("name" ,"value");,在查询索引的时刻可以依据name来查询,也就是用name对应的value来匹配我们的关键字。
Analyze: 建立索引避免不了对文档内容进行分词,Analyze对象正是用于分词的对象。该类是一个抽象内,你可以依据自己的业务规则来分词,还有很多第三方分词器,自己用适配模式+代理模式来适配自己的业务也行。
Directory: Directory是用来存储index文件的目录,该类有两个实现类FSDirectory/RAMDirectory(FS = FileSystem , RAM...).
IndexWriter: IndexWriter是用来建立索引的具体类,IndexReader 是用来删除索引的具体类.
IndexSearcher:IndexSearcher是在已经建立的索引上进行查询的具体类。
建立索引的例子代码:
/**
* 构建索引
* @param indexDir
* @param dataDir
* @throws Exception
*/
public void buildIndex(String indexDir, String dataDir) throws Exception {
// 存放索引位置
File indexFile = new File(indexDir);
// 数据文件位置
File dataFile = new File(dataDir);
File[] alldataFiles = dataFile.listFiles();
Version version = Version.LUCENE_34;
//分词 分析类
Analyzer luceneAnalyzer = new StandardAnalyzer(version);
//存放索引的位置
Directory directory = FSDirectory.open(indexFile);
//写入索引
IndexWriter indexWriter = new IndexWriter(directory,
new IndexWriterConfig(version, luceneAnalyzer));
for (File tempFile : alldataFiles) {
if (tempFile.isFile()) {
//文档抽象对象
Document document = new Document();
document.add(new Field("path", tempFile.getCanonicalPath(),
Field.Store.YES, Field.Index.ANALYZED));
document.add(new Field("content", readFileContent(tempFile),
Field.Store.YES, Field.Index.ANALYZED));
indexWriter.addDocument(document);
}
}
indexWriter.optimize();
indexWriter.close();
System.out.println("end.....................");
}
查询内容代码:
private static String readFileContent(File file) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream(file), "gbk"));
StringBuffer content = new StringBuffer();
for (String line = null; (line = reader.readLine()) != null;) {
content.append(line).append("\n");
}
return content.toString();
}
基础类:
Query:将用户的输入组织成luence能识别的方式,Query有多个实现类,对应多种情况。
QueryParser:该类用于将索引的Field和关键字转换成luence能理解的Query
IndexSearcher:该类用于在已经建立的索引上执行搜索。
TopDocs:该类用于保存IndexSearcher搜索到的结果。是对结果的一个封装。
查询索引的例子代码:
/**
* 搜索内容
* @param indexDir
* @throws Exception
*/
public void searchIndex(String indexDir) throws Exception {
// 存放索引位置
File indexFile = new File(indexDir);
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_34);
String queryString = "爱到万年";
// 把要搜索的文本解析为Query
String[] fields = { "path", "content" };
QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_34,
fields, analyzer); // 查询解析器
Query query = queryParser.parse(queryString);
// 查询
IndexSearcher indexSearcher = new IndexSearcher(
FSDirectory.open(indexFile));
Filter filter = null;
//获取匹配结果
TopDocs topDocs = indexSearcher.search(query, filter, 10000);// topDocs
// 类似集合
System.out.println("总共有【" + topDocs.totalHits + "】条匹配结果.");
// 输出
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
int docSn = scoreDoc.doc;// 文档内部编号
Document doc = indexSearcher.doc(docSn);// 根据文档编号取出相应的文档
System.out.println("path:" + doc.get("path"));
System.out.println("content:" + doc.get("content"));
}
System.out.println("end.............. " + new Date().toLocaleString());
}
- 大小: 31.5 KB
分享到:
相关推荐
通过Lucene,开发者可以构建自己的全文搜索引擎,支持高效的全文检索、布尔查询、短语查询等。 **2. ShootSearch优化** ShootSearch对原始的Lucene进行了优化,以适应中型规模的搜索需求。优化可能包括以下方面: -...
**基于Lucene的桌面搜索引擎** 在信息技术飞速发展的今天,数据...利用Lucene的强大功能,不仅可以实现基础的全文搜索,还能进行高级查询,如短语搜索、通配符搜索和近似搜索等,极大地提升了桌面搜索的效率和便利性。
通过利用Lucene强大的全文检索能力,可以构建特定领域的搜索引擎,比如文章中提到的新闻搜索引擎。这种搜索引擎能够处理大量新闻数据的索引和实时搜索,相比普通搜索引擎,可以在特定领域中提升搜索结果的相关性和...
《Lucene+Nutch搜索引擎开发:王学松源代码解析》 在信息技术日新月异的今天,搜索引擎已经成为了人们获取信息的重要工具。...通过实践这些代码,不仅可以提升技术能力,还能为构建自己的搜索引擎应用打下坚实基础。
通过Heritrix爬取数据,利用Lucene建立高效索引,JSP实现交互界面,形成了一套完整的搜索引擎系统。这样的实践项目不仅有助于理解搜索引擎的工作原理,也为实际的网页搜索应用提供了基础框架。对于学习和研究搜索...
【描述】:该文档主要探讨了如何利用Apache Lucene构建一个桌面搜索引擎,这是一个开源的全文检索库,为开发者提供了强大的文本搜索功能。 【标签】:“Lucene 搜索引擎” 【部分内容】:在深入理解基于Lucene的...
### 利用Lucene构建个性化搜索引擎的关键技术与实践 #### 概述 随着互联网的快速发展,搜索引擎已成为人们获取信息不可或缺的工具。当前市场上知名的搜索引擎如Google、Yahoo、百度等不仅推动了信息技术的进步,也...
总结,利用LUCENE.NET开发WEB搜索引擎是一项技术含量高的工作,涉及到数据爬取、文本处理、索引构建、搜索算法等多个环节。通过深入理解和实践,开发者可以构建出高效、灵活的搜索引擎,满足不同场景的需求。
4. **索引构建**:详细解释如何利用Lucene构建索引,包括分词策略、倒排索引的建立以及索引优化。 5. **查询处理**:描述查询解析、查询优化和相关性排序算法,比如TF-IDF或者BM25。 6. **性能评估**:通过实验...
这个压缩包“基于lucene 的简单搜索引擎.rar”很可能是为了演示如何利用Lucene来构建一个基本的搜索引擎。在这里,我们将深入探讨Lucene的主要组件和构建过程。 ### 1. Lucene核心概念 **1.1 文档(Document)** ...
《基于Lucene的Web搜索引擎的研究》是一篇深入探讨如何利用Lucene构建高效、精准的Web搜索引擎的优秀研究生毕业论文。Lucene是Apache软件基金会开发的一个全文检索库,它提供了强大的文本分析和索引功能,是构建搜索...
开发者可以利用Lucene对大量数据进行快速高效的全文检索,同时Lucene还支持多线程和分布式搜索,适合构建大规模的搜索引擎。 2. **Heritrix**: Heritrix是互联网档案馆开发的一款可配置、可扩展的网络抓取工具,...
《Lucene+Nutch搜索引擎》是一本深入探讨如何利用开源搜索引擎技术构建高效检索系统的书籍。它主要围绕Apache Lucene和Nutch这两个核心项目展开,旨在帮助读者理解和掌握搜索引擎的基础原理及其实现方法。 Lucene是...
在本项目中,我们看到的是一个专门针对财经类网页的搜索引擎,这展示了如何利用Lucene来处理特定领域信息的搜索需求。 ### Lucene基础知识 1. **索引构建**:Lucene的核心功能是创建索引。它将非结构化的文本数据...
《lucene+nutch搜索引擎开发源码1》是一个包含开源搜索引擎项目Lucene和Nutch源代码的压缩包,主要针对搜索引擎开发的学习和实践。这个压缩包是书籍《lucene+nutch搜索引擎开发》的一部分,由于源码量较大,因此分为...
**LUCENE搜索引擎基本工作原理** Lucene是一个开源的全文搜索引擎库,被广泛应用于构建复杂的搜索引擎系统。它的设计目标是高效、...通过理解这些原理,开发者可以更好地利用Lucene构建高效、定制化的搜索解决方案。
开发者可以利用Lucene来构建自己的搜索引擎,或者将其嵌入到现有的应用程序中以实现全文搜索功能。 **文件名称列表解析** - "ajax光盘使用说明.doc":这可能是关于如何使用提供的源代码和资源的详细指南,涵盖了...
书中会详细介绍如何利用JAVA与LUCENE结合,构建完整的搜索引擎系统。这包括数据的输入与处理、索引的建立、查询接口的设计以及后台服务的部署和维护等。 在《解密搜索引擎技术实战 LUCENE & JAVA(第3版)》中,...