`
df274119386
  • 浏览: 55828 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

lucene入门 例子

阅读更多
一个lucene的例子 ,   其它的就不多说了

package com.fei.lucene;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Date;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.DateTools;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;

/**
 * test lucene
 * 
 * @author
 * 
 */
public class TxtFileIndexer {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws IOException {

		// 保存索引文件的地方
		String indexDir = "E:\\indexDir";

		// 将要搜索TXT文件的地方
		String dataDir = "E:\\dataDir";

		TxtFileIndexer ifi = new TxtFileIndexer();
		ifi.createIndex(indexDir, dataDir);
		try {
			ifi.searchIndex(indexDir);
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 通过索引查找
	 * 
	 * @throws IOException
	 * @throws ParseException
	 */
	public void searchIndex(String indexDir) throws IOException, ParseException {

		// 得到保存索引的Directory
		Directory dir = new SimpleFSDirectory(new File(indexDir));
		
		// IndexSearcher对象
		IndexSearcher indexSearch = new IndexSearcher(dir);
		StandardAnalyzer sa = new StandardAnalyzer(Version.LUCENE_31);
		
		// 创建QueryParser对象,第二个表示搜索Field的字段
		String[] fields = new String[] { "contents", "filename" };
		QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_31,
				fields, sa);

		// QueryParser queryParser = new QueryParser(Version.LUCENE_31,
		// "filename", sa);

		// 生成Query对象
		Query query = queryParser.parse("森");

		// 搜索结果 TopDocs里面有scoreDocs[]数组,里面保存着索引值
		TopDocs hits = indexSearch.search(query, 10);

		// hits.totalHits表示一共搜到多少个
		System.out.println("找到了" + hits.totalHits + "个");

		// 循环hits.scoreDocs数据,并使用indexSearch.doc方法把Document还原
		
		
		ScoreDoc[] scoreDocs = hits.scoreDocs;
		
		int lenScoreDoc =  scoreDocs.length;
		
		for (int i = 0; i < lenScoreDoc; i++) {

			ScoreDoc sdoc = scoreDocs[i];
			Document doc = indexSearch.doc(sdoc.doc);
			
			System.out.println(doc.get("filename"));
			
			//不清楚这里怎么从doc里面拿出contents, 不过这里有文件文件名,  还有路径, 就可读取出文件的内容
			System.out.println(doc.get("contents"));
			Field ff = doc.getField("contents");
		}
		indexSearch.close();

	}

	/**
	 * 建索引
	 * 
	 * @throws IOException
	 */
	public void createIndex(String indexDir, String dataDir) throws IOException {

		IndexWriter indexWriter = null;

		// 创建Directory对象
		Directory dir = new SimpleFSDirectory(new File(indexDir));

		// 创建IndexWriter对象, 第二个是分词器, 第三个表示是否是创建,false
		// 为在此基础上面修改, 第四表示表示分词的最大值,比如说new MaxFieldLength(2), 就表示两个字一分,
		// 一般用indexWriter.MaxFieldLength.LIMITED
		indexWriter = new IndexWriter(dir, new StandardAnalyzer(
				Version.LUCENE_31), true, IndexWriter.MaxFieldLength.UNLIMITED);

		File[] files = new File(dataDir).listFiles();

		for (int i = 0; i < files.length; i++) {
			Document doc = new Document();
			// 创建Field对象, 并放入doc对象中
			doc.add(new Field("contents", new FileReader(files[i])));

			// Field.Index.ANALYZED 建立index标识符通过分词器()
			doc.add(new Field("filename", files[i].getName(), Field.Store.YES,
					Field.Index.ANALYZED));

			doc.add(new Field("indexDate", DateTools.dateToString(new Date(),
					DateTools.Resolution.DAY), Field.Store.YES,
					Field.Index.NOT_ANALYZED));

			indexWriter.addDocument(doc);

		}
		System.out.println("numDocs:" + indexWriter.numDocs());

		indexWriter.close();

	}

}




分享到:
评论

相关推荐

    lucene入门小例子

    这个“lucene入门小例子”很可能是为了帮助初学者理解并掌握Lucene的基本用法而设计的一系列示例代码。 Lucene的核心概念包括索引、文档、字段和查询。首先,你需要理解索引的概念,它类似于传统数据库中的索引,但...

    lucene例子

    lucene入门例子,有创建索引和检索。详情:http://blog.csdn.net/authorzhh/article/details/7869806

    Lucene 2.4 入门例子

    **Lucene 2.4 入门例子** Lucene 是一个高性能、全文本搜索库,由Apache软件基金会开发。它提供了强大的搜索功能,被广泛应用于各种应用中的信息检索。在这个入门例子中,我们将探讨Lucene 2.4版本的一些关键特性和...

    一个经典Lucene入门模块及例子解析

    在这个经典Lucene入门模块中,我们将深入理解如何使用Lucene进行索引创建和搜索操作。 首先,我们来看Lucene如何建立数据的索引。这通常涉及以下几个步骤: 1. **索引创建**:使用 `IndexWriter` 对象来创建或更新...

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

    本篇将通过一个简单的入门例子,带你了解如何使用Lucene进行搜索。 首先,我们要知道Lucene的核心组件包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。在Lucene中,信息是以文档的形式存储,...

    Lucene5.2.1 入门学习例子

    Lucene5.2.1 入门学习例子. 这是别人的例子源码。可以参考。内有使用说明。

    lucene_demo例子

    《Lucene实战(第2版) PDF高清中文版.pdf》这本书是关于Apache Lucene的一本经典教程,适合初学者入门。Lucene是一个全文搜索引擎库,它提供了强大的文本搜索功能,被广泛应用于各种信息检索系统中。这本书详细介绍了...

    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是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它是Java语言实现的,但提供了多种语言的接口,包括Python、C#等。本示例将帮助初学者理解Lucene的基本用法,以及如何在实际...

    【大搜集:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    lucene入门实战.txt Lucene 的学习 .txt Lucene-2.0学习文档 .txt Lucene入门与使用 .txt lucene性能.txt 大富翁全文索引和查询的例子程序.txt 关于lucene2.0的创建、检索和删除功能的完整实现.doc web...

    Lucene4.7+IK Analyzer中文分词入门教程

    这里提供了一个简单的例子,包括一个`DataFactory`类,用于模拟存储药品信息,以及一个`LuceneIKUtil`类,用于实现Lucene索引和搜索功能。`DataFactory`包含了一个`List&lt;Medicine&gt;`,每个`Medicine`对象包含了药品ID...

    solr_开发入门例子

    本文将基于"solr_开发入门例子"这一主题,详细解释Solr的基础知识,包括其核心概念、安装配置、索引创建与查询,以及相关的开发工具。 1. **Solr核心概念** - **索引**: Solr通过建立倒排索引来实现快速全文检索。...

    luncene入门例子

    这个压缩包提供的"lucene第一天"是一系列入门教程,旨在帮助初学者快速理解并掌握Lucene的核心概念和基本操作。 首先,让我们了解一下Lucene的基本组件和工作原理。Lucene的核心功能是索引和搜索文本数据。它将非...

    Lucene常用的Demo

    这个示例是入门Lucene的首选,它展示了如何创建一个新的索引并执行基本的搜索。首先,你需要定义一个`Document`对象,包含要索引的字段,如标题、内容等。然后使用`Directory`(如`FSDirectory`)打开存储索引的...

    开发自己的搜索引擎《lucene2.0+heritrix》一书对应的源码资料

    在《开发自己的搜索引擎》一书中,通过`ch2-lucene入门小例子`,读者可以了解到如何使用Lucene 2.0创建简单的搜索引擎,例如建立索引、执行搜索等基本操作。而`myReserch-可用的网络搜索引擎`可能包含一个完整的搜索...

    Lucene in action 2nd edition

    《Lucene in Action》第二版是一本不可多得的Lucene学习宝典,它不仅内容丰富、实用性强,而且涵盖了从入门到精通的各个阶段。无论是作为个人学习资料还是作为专业开发者的参考书,本书都能够提供有价值的指导和支持...

    lucene实例(包括分页、中文检索等)

    lucene实例是一个比较详细的例子,包括lucene的入门到高级实例,代码里有比较详细的实例,所有的实例都是通过junit来测试的。实例包括各种搜索:如通配符查询、模糊查询、查询结果的分页、中文分词器、自定义分词器...

Global site tag (gtag.js) - Google Analytics