`

Lucene_demo05_内存索引和文件索引

阅读更多
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_demo"这个压缩包中,很可能包含了一些示例代码或者项目,用于演示如何使用Lucene进行实际的文本搜索开发。这些示例通常会涵盖以下几个关键知识点: 1. **安装与配置**:Lucene的下载、构建环境的搭建,...

    luceneDemo_pure1aa_DEMO_clucene_

    将提供的“luceneDemo”文件加入到项目中,这是DEMO的主要代码。这个DEMO将展示如何使用Clucene的基本操作,包括创建索引、搜索索引等关键步骤。 五、理解DEMO代码 DEMO代码通常包含以下几个部分: 1. **索引创建...

    Lucene5写的全文搜索的demo,包括创建索引和搜索

    总结,Lucene5 全文搜索 demo 展示了如何利用 Lucene 的核心组件创建和搜索索引。从索引的构建到查询的执行,每个步骤都涉及到对 Lucene API 的深入理解。通过学习这个示例,开发者可以进一步了解 Lucene 的工作原理...

    Lucene-Demo.rar Lucene分词的demo

    `Lucene-Demo`文件可能是项目源代码或配置文件的压缩包,里面可能包含了一个完整的Java项目结构,包括`src/main/java`(源代码)、`src/main/resources`(资源文件)和`pom.xml`(Maven项目对象模型文件)。...

    简单的lucene demo

    4. **Lucene的简单demo**:这个项目包含两个关键文件——`TestLuceneSearch.java`和`TestLuceneIndex.java`,分别代表了Lucene的索引创建和搜索功能的示例代码。通过这两个文件,我们可以了解如何初始化索引器、添加...

    Lucene简单Demo(附带Jar)

    "luceneDemo1"和"lucene"可能是两个不同的文件或文件夹,它们可能包含了运行Lucene的示例代码或者已经构建好的索引。"luceneDemo1"可能是一个包含Lucene应用示例的Java项目,包含了必要的类和方法,展示了如何使用...

    Lucene常用的Demo

    本篇文章将深入探讨Lucene的几个常见示例,包括`LuceneDemo`、`LuceneZJ`、`Lucene_HelloWorld`,帮助初学者快速理解Lucene的基本操作。 1. **Lucene_HelloWorld** 这个示例是入门Lucene的首选,它展示了如何创建...

    Lucene3.3.0学习Demo

    这个"Lucene3.3.0学习Demo"是针对这一版本进行的实践教学资源,旨在帮助开发者更好地理解和使用Lucene。 首先,我们来看看Lucene的基本工作流程: 1. **分词**:Lucene通过Analyzer处理输入的文本,将其分解为一...

    lucene 4.7.2 Demo

    《Lucene 4.7.2 Demo:Java全文搜索引擎的核心技术探索》 Lucene,作为Apache软件基金会的一个开源项目,是Java平台上的一个全文搜索引擎库。它的主要功能是提供高效、可扩展的文本检索和分析能力。在4.7.2这个版本...

    lucene简单demo

    在"LuceneDemo"这个项目中,你可以期待看到一个简单的Java程序,它将演示上述过程,可能包括创建一个或多个包含文本数据的Document,使用默认的StandardAnalyzer建立索引,然后执行一个基本的文本查询,展示搜索结果...

    Lucene初探,一个初级的LuceneDemo

    通过学习和实践这个LuceneDemo,你可以对Lucene有一个初步的认识,了解如何创建、索引和搜索文档。随着深入学习,你会发现Lucene的强大之处在于其高度定制化的能力,可以满足各种复杂的搜索需求。在实际项目中,结合...

    lucene.net demo

    5. **性能优化**:考虑到桌面搜索可能涉及大量小文件,需要关注内存管理和索引效率,如使用内存映射文件、控制段合并策略等。 通过以上步骤,你可以构建出一个功能完善的桌面搜索应用,利用Lucene.Net的强大功能,...

    Lucene.NET全文索引搜索Demo项目

    这个"Lucene.NET全文索引搜索Demo项目"是一个实际应用示例,展示了如何在.NET环境中使用Lucene.NET进行全文索引和搜索操作。 首先,我们要理解什么是全文索引。全文索引是一种特殊的数据库索引,它允许用户通过输入...

    luceneDemo

    **Lucene 概述** Lucene 是一个高性能、全文本搜索库...实际的 "luceneDemo" 可能包含更丰富的功能,例如支持多字段查询、高亮显示搜索结果、分页显示等。学习和理解 Lucene,可以帮助开发者构建强大的全文检索系统。

    lucene Demo(paoding)

    通过分析【压缩包子文件的文件名称列表】中的"LuceneTest",我们可以推测这可能包含了测试类或者测试用例,用于验证Lucene和Paoding的整合效果,包括创建索引、执行搜索、性能测试等功能的实现代码。 综上所述,...

    全文搜索技术Lucene Demo

    索引可以存储在磁盘上,也可以选择内存中,取决于你的需求和资源限制。 完成索引构建后,你可以实现一个搜索方法。这个方法接收用户的查询字符串,使用`QueryParser`解析查询,并创建一个`Query`对象。接着,使用`...

    Lucene入门demo

    1. **创建索引(Creating an Index)**: 首先,我们需要创建一个 Directory 对象,它是 Lucene 存储索引的位置,可以是文件系统、内存或者分布式存储。然后,使用 IndexWriter 创建索引,将文档添加到索引中。 2. *...

    luceneDemo(完整代码)

    在"luceneDemo4.0"中,你将会看到以上概念的具体应用,包括创建索引、执行查询、高亮展示结果以及调整排序逻辑的示例代码。通过实践这个项目,你不仅可以了解Lucene的基本操作,还能学习到如何在实际项目中优化搜索...

    lucene.net 2.9.2 实现索引生成,修改,查询,删除实例

    压缩包中的"Demo"文件可能包含了完整的示例代码,包括索引生成、修改、查询和删除的完整流程。通过阅读和运行这些代码,你可以更深入地理解Lucene.NET 2.9.2的工作原理,并学习如何在实际项目中应用。 总结来说,...

    LuceneDemo

    2. 可扩展性:Lucene支持多线程索引和查询,可以方便地集成到分布式系统中,满足大数据量的处理需求。 3. 灵活性:Lucene提供了一套完整的API,开发者可以根据需要自定义分词器、评分策略等,实现个性化的全文检索...

Global site tag (gtag.js) - Google Analytics