以前对全文检索望而却步,认为很难玩,最近玩了下Lucene ,发现挺容易上手的。废话不多说,记下小体会。
luncen索引用的是倒排索引技术,倒排索引和书后面的索引基本类似。其结构如下图所示:
这种结构使得lucene的检索效率高,在常数时间内一次命中所有的文档,一次I/O操作。
Lucene建立索引非常简单,下面以创建内存索引为例。
首先创建一个内存索引对象:
//建立内存索引对象
Directory directory = new RAMDirectory();
接着配置IndexWriter:
//配置IndexWriterConfig
IndexWriterConfig iwConfig = new IndexWriterConfig(Version.LUCENE_34 , analyzer);
iwConfig.setOpenMode(OpenMode.CREATE_OR_APPEND);
IndexWriter iwriter = new IndexWriter(directory , iwConfig);
注意:这里的analyzer为中文分词工具,实现自己的中文分词工具很重要。
剩下就是写入索引了,在写入索引的时候得先创建Document,而Document 又包含有Field。Field就是要进行索引和检索的域(我个人的理解,可能有误)
Document doc = new Document();
doc.add(new Field(fieldName, text, Field.Store.YES, Field.Index.ANALYZED));
filedName是为了后续的检索做准备,text就是要建立索引的文本。
可以创建多个Document,也可以把多个text写入一个Document中。
iwriter.addDocument(doc);
iwriter.close();
剩下的代码为检索:
IndexReader ireader = IndexReader.open(directory);
IndexSearcher isearcher = new IndexSearcher(ireader);
String keyword = "要检索的词条";
//使用QueryParser查询分析器构造Query对象
QueryParser qp = new QueryParser(Version.LUCENE_34, fieldName, analyzer);
qp.setDefaultOperator(QueryParser.AND_OPERATOR);
Query query = qp.parse(keyword);
//搜索相似度最高的5条记录
TopDocs topDocs = isearcher.search(query , 5);
System.out.println("命中:" + topDocs.totalHits);
//输出结果
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (int i = 0; i < topDocs.totalHits; i++){
Document targetDoc = isearcher.doc(scoreDocs[i].doc);
System.out.println("内容:" + targetDoc.toString());
}
就这要一个建立索引和检索的小程序就可以了。lucene确实给全文检索带来了很大的方便,可以使新手快速的掌握基本知识。但是到深入还有很长的路要走。要建立好的全文检索工程代码,首先得有好的分词工具。
- 大小: 6.3 KB
分享到:
相关推荐
**Lucene小常识详解** Lucene,作为Apache软件基金会的一个开放源代码项目,是一款高性能、全文本搜索引擎库,被广泛应用于各种搜索应用中,尤其在文献垂直搜索领域表现卓越。垂直搜索,顾名思义,是指针对某一特定...
《基于Lucene.Net开发的个人知识库》 在信息技术领域,高效的信息检索和管理是至关重要的。Lucene.Net,作为Apache Lucene项目的一个.NET版本,为开发者提供了强大的全文搜索引擎库,使得开发者能够轻松构建自己的...
lucene.ppt,lucene课件 lucene 全面知识点,用于搜索开发
这份PPT可能包含对Lucene基础知识的快速概览,如Lucene的主要特点、基本用法,以及适合初学者的示例代码。它可能以简洁易懂的方式解释Lucene的关键概念,对于快速入门Lucene是非常有价值的资源。 总的来说,这个...
本文翻译了论文"Scale-up x Scale-out: A Case Study using Nutch/Lucene",介绍了计算机专业领域中关于Lucene相关的知识点。 Scale-up vs Scale-out 论文中讨论了两个相对的方法:向上扩展(Scale-up)和向外...
以下是对这个版本中一些关键知识点的详细说明: 1. **索引结构**:Lucene的核心在于其高效的倒排索引结构。在源码中,你可以看到`IndexWriter`类如何处理文档的添加、删除和更新,以及`SegmentMerger`如何合并多个...
"lucene in action.pdf" 是《Lucene in Action》的电子版,提供理论知识和实践经验的学习资料;"Lucene的- 3.0.3.zip.ZIP"可能是Lucene 3.0.3版本的源码或二进制包,可供开发者下载研究和使用。 总之,Lucene是一...
**Lucene小实例文件检索** Lucene是一款由Apache软件基金会开发的全文检索...不过,要深入掌握Lucene,还需要进一步学习高级特性,如多字段检索、近实时搜索、自定义Analyzer、复杂查询构造以及性能优化等方面的知识。
以下是根据标题、描述以及压缩包中的文件名称,对Lucene相关知识点的详细解释: 1. **Apache Lucene**:Apache Lucene是一个开源的全文检索库,由Java编写。它提供了高级的文本分析和索引功能,使得开发者可以轻松...
**Lucene 2.0 API 知识点** 1. **索引构建**: Lucene 2.0 提供了 `IndexWriter` 类,用于创建和更新索引。开发者可以使用 `Document` 类来封装待索引的数据,然后通过 `addDocument()` 方法添加到索引中。 2. **...
### Lucene3源码分析知识点概述 #### 一、全文检索的基本原理 ##### 1. 总论 全文检索系统是一种高效的信息检索技术,能够帮助用户在海量文档中快速找到包含特定关键词的信息。Lucene是Java领域内最受欢迎的全文...
根据给定文件信息,这里将详细介绍关于《Lucene in Action 第二版》书籍的知识点。这本书是关于Java Lucene教程的,主要面向开发者学习使用Lucene进行搜索引擎开发。 ### 书名知识点: 《Lucene in Action 第二版...
Lucene基础知识** Lucene首先需要理解的是它的核心概念,包括文档(Document)、字段(Field)、术语(Term)和倒排索引(Inverted Index)。每个文档由多个字段组成,字段内包含文本内容。Lucene通过分析这些文本...
在Java编程语言中,Lucene被广泛应用于各种需要全文搜索功能的系统,如网站、文档管理、知识库等。其强大的搜索性能和灵活的配置使得开发者能够快速构建自己的搜索引擎。 一、Lucene的基本架构 Lucene的核心架构...
**Lucene 知识点详解** Lucene 是一个开源全文搜索引擎库,由 Apache 软件基金会开发。它提供了一个可扩展的、高性能的搜索框架,使得开发者能够快速地在大量文本数据中实现全文检索功能。这个压缩包“LuceneTest2...
6. **实战案例**:提供了丰富的实际应用场景,如搜索引擎的构建、日志分析、企业知识库的搭建等,让读者能将理论知识应用于实践。 7. **Java编程**:作为一本面向Java开发者的书籍,书中所有示例都用Java编写,这...
以下是Lucene实现的核心知识点: 1. **索引过程**: - `IndexWriter`:这是创建和更新Lucene索引的主要类。通过这个类,你可以将文档添加到索引中,或者对已有索引进行修改和删除。 - `Analyzer`:用于分词和标准...
如果你对Lucene感兴趣,可以参考官方文档、教程和社区资源,例如Apache Lucene的官方网站,以及你提到的博客链接(https://1151461406.iteye.com/blog/2388343),这个链接可能包含了一些实战案例和进阶知识。...
Lucene 被广泛应用于各类软件,如内容管理系统、电子商务平台、知识图谱、日志分析等,其强大的搜索能力为用户提供了快速、精准的信息获取途径。 综上所述,Apache Lucene 7.7.2 版本不仅巩固了其在全文搜索领域的...
首先,Lucene的基础知识是必不可少的。Lucene的核心在于索引和搜索,它将非结构化的文本数据转换为结构化的索引,使得快速高效的搜索成为可能。索引过程包括分词、词性标注、建立倒排索引等步骤,而搜索则通过查询...