`

lucene入门实例三 (index索引)

阅读更多

copy《lucene in action》的一个索引的例子:

 

 

package com.s.lucene.LIA.index;

import java.io.IOException;

import junit.framework.TestCase;

import org.apache.lucene.analysis.WhitespaceAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;

public class IndexingTest extends TestCase {
	protected String[] ids = { "1", "2" };
	protected String[] unindexed = { "Netherlands", "Italy" };
	protected String[] unstored = { "Amsterdam has lots of bridges",
			"Venice has lots of canals" };

	protected String[] text = { "Amsterdam", "Venice" };

	private Directory directory;

	protected void setUp() throws Exception {
		directory = new RAMDirectory();

		IndexWriter writer = getWriter();
		//Field.Store.YES 可以retrieved找到值
		//Field.Index.ANALYZED 保存为index,可以被检索到
		for (int i = 0; i < ids.length; i++) {
			Document doc = new Document();
			doc.add(new Field("id", ids[i], Field.Store.YES,
					Field.Index.NOT_ANALYZED));
			doc.add(new Field("country", unindexed[i], Field.Store.YES,
					Field.Index.NO));
			doc.add(new Field("contents", unstored[i], Field.Store.NO,
					Field.Index.ANALYZED));
			doc.add(new Field("city", text[i],
					Field.Store.YES,
					Field.Index.ANALYZED));
			writer.addDocument(doc);
		}

		writer.close();
	}

	private IndexWriter getWriter() throws Exception {
		return new IndexWriter(directory, new WhitespaceAnalyzer(),
				IndexWriter.MaxFieldLength.UNLIMITED);
	}

	protected int getHitCount(String fieldName, String searchString)
			throws IOException {
		IndexSearcher search = new IndexSearcher(directory);
		Term t = new Term(fieldName, searchString);
		Query query = new TermQuery(t);
		int hitcount = search.search(query, 1).totalHits;
		search.close();
		return hitcount;
	}

	public void testIndexWriter() throws Exception {
		IndexWriter writer = getWriter();
		assertEquals(ids.length, writer.numDocs());
		writer.close();
	}

	public void testIndexReader() throws IOException {
		IndexReader reader = IndexReader.open(directory);
		assertEquals(ids.length, reader.maxDoc());
		assertEquals(ids.length, reader.numDocs());
		reader.close();
	}

	public void testDeleteBeforeOptimize() throws Exception {
		IndexWriter writer = getWriter();
		assertEquals(2, writer.numDocs());
		writer.deleteDocuments(new Term("id", "1"));
		writer.commit();
		assertTrue(writer.hasDeletions());
		assertEquals(2, writer.maxDoc());
		assertEquals(1, writer.numDocs());
		writer.close();
	}

	public void testDeleteAfterOptimize() throws Exception {
		IndexWriter writer = getWriter();
		assertEquals(2, writer.numDocs());
		writer.deleteDocuments(new Term("id", "1"));
		writer.optimize();
		writer.commit();
		assertFalse(writer.hasDeletions());
		assertEquals(1, writer.maxDoc());
		assertEquals(1, writer.numDocs());
		writer.close();
	}

	public void testUpdate() throws Exception {
		assertEquals(1, getHitCount("city", "Amsterdam"));
		IndexWriter writer = getWriter();
		Document doc = new Document();
		doc.add(new Field("id", "1", Field.Store.YES, Field.Index.NOT_ANALYZED));
		doc.add(new Field("country", "Netherlands", Field.Store.YES,
				Field.Index.NO));
		doc.add(new Field("contents", "Den Haag has a lot of museums",
				Field.Store.NO, Field.Index.ANALYZED));
		doc.add(new Field("city", "Den Haag", Field.Store.YES,
				Field.Index.ANALYZED));
		writer.updateDocument(new Term("id", "1"), doc);
		writer.close();
		assertEquals(0, getHitCount("city", "Amsterdam"));
		assertEquals(1, getHitCount("city", "Den Haag"));//有空格,无法找到TODO
	}

}
分享到:
评论

相关推荐

    lucene 3.0 入门实例

    doc.add(new Field("title", "Lucene入门", Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("content", "这是Lucene 3.0的实例", Field.Store.YES, Field.Index.ANALYZED)); ``` 3. **查询...

    lucene入门实例

    通过这个入门实例,我们可以了解到 Lucene 的基础操作流程,包括创建索引、执行查询以及处理结果。然而,实际应用中还需要考虑更复杂的需求,如多字段查询、布尔查询、评分排序、高亮显示、近实时搜索等。这些都需要...

    Lucene 的入门 实例 代码

    1. **导入必要的包**:使用Lucene时,需要导入如analysis、document、index、queryParser、search、store、util等包。 2. **建立索引**:通过`IndexWriter`类创建索引,指定索引路径和分析器(如`StandardAnalyzer`...

    Lucene简单实例记录

    ### Lucene的入门实例 #### 建立索引 1. **包导入**:首先,需要导入Lucene相关的包,包括`java.io`用于文件操作,`org.apache.lucene.analysis`用于文本分析,`org.apache.lucene.document`用于创建文档对象,...

    Lucene索引搜索简介以及入门实例源码.rar

    3. **索引(Index)**:Lucene通过建立索引来提高搜索速度。索引是一个结构化的数据存储,包含了文档的关键信息,便于快速查找。 4. **分析器(Analyzer)**:在建立索引前,Lucene会使用分析器对文本进行处理,如...

    lucene 入门

    `lucene入门小实例.txt` 文件中可能包含了一个简单的Lucene使用示例,例如: 1. 创建 `Directory` 对象,比如使用 `FSDirectory.open()` 打开一个文件系统的目录来存储索引。 2. 实例化 `Analyzer`,如使用 `...

    Apache Lucene3.0 入门实例介绍

    这个入门实例将引导我们了解如何使用Lucene 3.0版本进行基本的索引和搜索操作。以下是对Lucene 3.0关键知识点的详细讲解: 1. **Lucene的架构**: Lucene的核心组件包括文档(Document)、字段(Field)、索引...

    lucene3.0全文检索入门实例

    **Lucene 3.0 全文检索入门实例** Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发。它提供了一个高级、灵活的搜索功能框架,允许开发者在自己的应用中轻松地集成全文检索功能。本文将重点介绍如何使用 ...

    lucene3.6的入门案例

    **Lucene 3.6 入门案例** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。它提供了完整的搜索功能,包括索引、查询、评分等,广泛应用于各种项目和产品中。在这个入门案例中,我们将深入理解如何...

    Lucene入门demo

    这个“Lucene入门demo”将帮助我们理解如何使用 Lucene 进行基本的索引和搜索操作。 **一、Lucene 的核心概念** 1. **索引(Indexing)**: 在 Lucene 中,索引是文档内容的预处理结果,类似于数据库中的索引。通过...

    全文搜索引擎lucene入门

    ### 三、Lucene入门实践 1. **安装和配置**:首先,你需要在项目中添加Lucene的依赖,可以通过Maven或Gradle等构建工具来实现。 2. **创建索引**: - 创建`Directory`对象,如使用`FSDirectory`来指定索引存储...

    lucene入门基础教程

    ### Lucene 入门基础教程知识点详解 #### 一、Lucene简介 - **定义**:Lucene是一款高性能、全功能的文本搜索引擎库,由Java编写而成,属于Apache项目的一部分。 - **适用场景**:适合于任何需要进行全文检索的应用...

    Lucene入门[参照].pdf

    创建索引的基本步骤涉及创建一个IndexWriter实例,指定索引目录、Analyzer和是否覆盖现有索引。接着,创建Document对象并添加Field,如以下代码所示: ```java IndexWriter writer = new IndexWriter(" /data/index/...

    Lucene入门示例

    以上就是一个基础的Lucene入门示例,展示了如何使用Lucene创建索引、添加文档以及执行搜索。当然,实际应用中,Lucene的功能远不止这些,还包括更复杂的查询表达式、评分机制、多字段索引、倒排索引优化、近实时搜索...

    lucene3.0入门

    2. 索引(Index):Lucene 将文本数据转化为倒排索引,使得快速查找匹配关键词的文档成为可能。索引过程包括分析(Analyzer)和分词(Tokenization)等步骤。 3. 分析器(Analyzer):负责将输入文本拆分成关键词...

    lucene搜索的简单入门例子源代码

    首先,我们要知道Lucene的核心组件包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。在Lucene中,信息是以文档的形式存储,每个文档由多个字段组成,比如标题、内容等。索引是Lucene处理的关键...

    Lucene快速入门

    ### Lucene快速入门知识点 #### 1. Lucene简介 ##### 1.1 Lucene的历史 - **创始人**: Lucene由一位资深的全文索引/检索专家开发。 - **开源历程**: 最初发布在其个人主页上,2001年10月捐赠给Apache基金会,成为...

    apache下的lucene教程

    - **书籍推荐**:《Lucene in Action》是一本非常优秀的Lucene入门书籍,详细介绍了Lucene的核心概念和技术细节。 通过上述内容的学习,读者能够系统地掌握Lucene的基本原理、核心技术及应用场景,为进一步开发基于...

Global site tag (gtag.js) - Google Analytics