Lucene_demo05_内存索引和文件索引
内存索引库:数据是临时的、访问速度比文件索引库要快、索引库中的数据不能存放太多、内存索引库和文件索引库能结合在一起
两个或者两个以上的索引库的合并:
如果是内存索引库,直接调用构造函数进行合并就可以了 内存索引库中。也可以调用addIndexesNoOptimize进行合并
如果是文件索引库,调用addIndexesNoOptimize进行合并,该方法可以接受多个索引库
public class RamIndex {
/**
* 内存索引库
*/
@Test
public void testRAM() throws Exception {
// 创建了内存索引库
Directory directory = new RAMDirectory();
IndexWriter indexWriter = new IndexWriter(directory, LuceneUtils.analyzer, MaxFieldLength.LIMITED);
Article article = new Article();
article.setId(26L);
article.setTitle("NBA总冠军");
article.setContent("LBJ和韦德能带领热火在2013赛季拿到NBA总冠军吗");
Document document = DocumentUtils.article2Document(article);
indexWriter.addDocument(document);
indexWriter.close();
this.showData(directory);
}
/**
* 内存索引库和文件索引库的结合
*/
@Test
public void testRamIndexAndFileIndex() throws Exception {
Directory fileDirectory = FSDirectory.open(new File("./indexDir"));// 创建两个索引库
Directory ramDirectory = new RAMDirectory(fileDirectory);
// 内存索引
IndexWriter ramIndexWriter = new IndexWriter(ramDirectory, LuceneUtils.analyzer, MaxFieldLength.LIMITED);// 这个ramIndexWriter是针对内存索引库
Article article = new Article();
article.setId(26L);
article.setTitle("热火赢了总冠军");
article.setContent("哈哈,热火终于赢了,果然不负众望!!");
Document document = DocumentUtils.article2Document(article);
ramIndexWriter.addDocument(document);
ramIndexWriter.close();
// 文件索引
IndexWriter fileIndexWriter = new IndexWriter(fileDirectory, LuceneUtils.analyzer, true, MaxFieldLength.LIMITED);// fileIndexWriter对应的索引库是fileDirectory
fileIndexWriter.addIndexesNoOptimize(ramDirectory);// 把内存索引库的信息写入到文件索引库addIndexesNoOptimize
fileIndexWriter.close();
// 经过两个索引操作后,输出最后的数据
this.showData(fileDirectory);
}
/**
* 当应用程序启动的时候,直接和内存索引库交互,当程序快结束的时候,把内存索引库中的内容追加到文件索引库中
*/
@Test
public void testRamIndexAndFileIndex2() throws Exception {
// 内存索引
Directory directory = new RAMDirectory();
IndexWriter ramIndexWriter = new IndexWriter(directory, LuceneUtils.analyzer, MaxFieldLength.LIMITED);
Article article = new Article();
article.setId(27L);
article.setTitle("热火赢了总冠军");
article.setContent("哈哈,热火终于赢了,果然不负众望!!");
Document document = DocumentUtils.article2Document(article);
ramIndexWriter.addDocument(document);
ramIndexWriter.close();
// 文件索引
Directory fileDirectory = FSDirectory.open(new File("./indexDir"));
IndexWriter fileIndexWriter = new IndexWriter(fileDirectory, LuceneUtils.analyzer, MaxFieldLength.LIMITED);
fileIndexWriter.addIndexesNoOptimize(directory);
fileIndexWriter.close();
// 经过两个索引操作后,输出最后的数据
this.showData(fileDirectory);
}
// 公共输出类
private void showData(Directory directory) throws Exception {
IndexSearcher indexSearcher = new IndexSearcher(directory);
QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_30, new String[] { "title", "content" }, LuceneUtils.analyzer);
Query query = queryParser.parse("总冠军");
TopDocs topDocs = indexSearcher.search(query, 50);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
List<Article> articleList = new ArrayList<Article>();
for (int i = 0; i < scoreDocs.length; i++) {
Document document = indexSearcher.doc(scoreDocs[i].doc);
Article article = DocumentUtils.document2Article(document);
articleList.add(article);
}
// 输出查询出来的索引对象
for (Article article : articleList) {
System.out.println(article.getId());
System.out.println(article.getTitle());
System.out.println(article.getContent());
}
}
}
分享到:
相关推荐
在"lucene_demo"这个压缩包中,很可能包含了一些示例代码或者项目,用于演示如何使用Lucene进行实际的文本搜索开发。这些示例通常会涵盖以下几个关键知识点: 1. **安装与配置**:Lucene的下载、构建环境的搭建,...
将提供的“luceneDemo”文件加入到项目中,这是DEMO的主要代码。这个DEMO将展示如何使用Clucene的基本操作,包括创建索引、搜索索引等关键步骤。 五、理解DEMO代码 DEMO代码通常包含以下几个部分: 1. **索引创建...
总结,Lucene5 全文搜索 demo 展示了如何利用 Lucene 的核心组件创建和搜索索引。从索引的构建到查询的执行,每个步骤都涉及到对 Lucene API 的深入理解。通过学习这个示例,开发者可以进一步了解 Lucene 的工作原理...
`Lucene-Demo`文件可能是项目源代码或配置文件的压缩包,里面可能包含了一个完整的Java项目结构,包括`src/main/java`(源代码)、`src/main/resources`(资源文件)和`pom.xml`(Maven项目对象模型文件)。...
4. **Lucene的简单demo**:这个项目包含两个关键文件——`TestLuceneSearch.java`和`TestLuceneIndex.java`,分别代表了Lucene的索引创建和搜索功能的示例代码。通过这两个文件,我们可以了解如何初始化索引器、添加...
"luceneDemo1"和"lucene"可能是两个不同的文件或文件夹,它们可能包含了运行Lucene的示例代码或者已经构建好的索引。"luceneDemo1"可能是一个包含Lucene应用示例的Java项目,包含了必要的类和方法,展示了如何使用...
本篇文章将深入探讨Lucene的几个常见示例,包括`LuceneDemo`、`LuceneZJ`、`Lucene_HelloWorld`,帮助初学者快速理解Lucene的基本操作。 1. **Lucene_HelloWorld** 这个示例是入门Lucene的首选,它展示了如何创建...
这个"Lucene3.3.0学习Demo"是针对这一版本进行的实践教学资源,旨在帮助开发者更好地理解和使用Lucene。 首先,我们来看看Lucene的基本工作流程: 1. **分词**:Lucene通过Analyzer处理输入的文本,将其分解为一...
《Lucene 4.7.2 Demo:Java全文搜索引擎的核心技术探索》 Lucene,作为Apache软件基金会的一个开源项目,是Java平台上的一个全文搜索引擎库。它的主要功能是提供高效、可扩展的文本检索和分析能力。在4.7.2这个版本...
在"LuceneDemo"这个项目中,你可以期待看到一个简单的Java程序,它将演示上述过程,可能包括创建一个或多个包含文本数据的Document,使用默认的StandardAnalyzer建立索引,然后执行一个基本的文本查询,展示搜索结果...
通过学习和实践这个LuceneDemo,你可以对Lucene有一个初步的认识,了解如何创建、索引和搜索文档。随着深入学习,你会发现Lucene的强大之处在于其高度定制化的能力,可以满足各种复杂的搜索需求。在实际项目中,结合...
5. **性能优化**:考虑到桌面搜索可能涉及大量小文件,需要关注内存管理和索引效率,如使用内存映射文件、控制段合并策略等。 通过以上步骤,你可以构建出一个功能完善的桌面搜索应用,利用Lucene.Net的强大功能,...
这个"Lucene.NET全文索引搜索Demo项目"是一个实际应用示例,展示了如何在.NET环境中使用Lucene.NET进行全文索引和搜索操作。 首先,我们要理解什么是全文索引。全文索引是一种特殊的数据库索引,它允许用户通过输入...
**Lucene 概述** Lucene 是一个高性能、全文本搜索库...实际的 "luceneDemo" 可能包含更丰富的功能,例如支持多字段查询、高亮显示搜索结果、分页显示等。学习和理解 Lucene,可以帮助开发者构建强大的全文检索系统。
通过分析【压缩包子文件的文件名称列表】中的"LuceneTest",我们可以推测这可能包含了测试类或者测试用例,用于验证Lucene和Paoding的整合效果,包括创建索引、执行搜索、性能测试等功能的实现代码。 综上所述,...
索引可以存储在磁盘上,也可以选择内存中,取决于你的需求和资源限制。 完成索引构建后,你可以实现一个搜索方法。这个方法接收用户的查询字符串,使用`QueryParser`解析查询,并创建一个`Query`对象。接着,使用`...
1. **创建索引(Creating an Index)**: 首先,我们需要创建一个 Directory 对象,它是 Lucene 存储索引的位置,可以是文件系统、内存或者分布式存储。然后,使用 IndexWriter 创建索引,将文档添加到索引中。 2. *...
在"luceneDemo4.0"中,你将会看到以上概念的具体应用,包括创建索引、执行查询、高亮展示结果以及调整排序逻辑的示例代码。通过实践这个项目,你不仅可以了解Lucene的基本操作,还能学习到如何在实际项目中优化搜索...
压缩包中的"Demo"文件可能包含了完整的示例代码,包括索引生成、修改、查询和删除的完整流程。通过阅读和运行这些代码,你可以更深入地理解Lucene.NET 2.9.2的工作原理,并学习如何在实际项目中应用。 总结来说,...
2. 可扩展性:Lucene支持多线程索引和查询,可以方便地集成到分布式系统中,满足大数据量的处理需求。 3. 灵活性:Lucene提供了一套完整的API,开发者可以根据需要自定义分词器、评分策略等,实现个性化的全文检索...