`
df274119386
  • 浏览: 54108 次
  • 性别: 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入门例子,有创建索引和检索。详情:http://blog.csdn.net/authorzhh/article/details/7869806

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

    我自己写的一个lucene搜索引擎的简单入门例子源代码 对照lucene,相当的易懂。api我这也有,含JE分词器。

    Lucene5.2.1 入门学习例子

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

    Lucene 2.4 入门例子

    Luene2.4版本在以前的基础上进行了不少的改动,性能上也提升了不少,这里边学习边写了一个简单的例子,给初学者行个方便!

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

    Lucene的功能请打,方法众多。主要介绍了Lucene的功能模块及其调用代码,实际使用中可以具体修改。最后还有一个常见的Lucene实例与解析。

    lucene3.6的入门案例

    说明: 例子是根据lucene3.6写的,也可以说是直接copy别人的。 包括参考文章的代码,以及修改部分之后的代码

    lucene_demo例子

    可用lucene demo 已经有入门级pdf学习

    Lucene 例子

    Lucene 例子,此例子简单易懂,而且注释详细,可以作为一个入门的例子。

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

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

    lucene入门实例

    根据lucene demo 写的一个入门小例子,很小,希望对你有所帮助,不好别骂!

    lucene3 例子

    这是我本人学习时的笔记整理,是入门级的好教材,解释非常的详细!欢迎大家和我一起学习,讨论lucene,这个javaeye的制作的电子文档,有什么不明白去我的空间留言!

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

    开发自己的搜索引擎《lucene2.0+heritrix》一书对应的源码资料,总共有30M,只上传了几个例子. ch2-lucene入门小例子 myReserch-可用的网络搜索引擎

    lucene 3.6

    lucene 3.6 的入门例子 代码简洁 注释清晰 是入门只必备啊 附带了ik中文分词器 支持 停用词 扩展词等

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

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

    基于lucene和nutch的开源搜索引擎资料集合

    一个例子学懂搜索引擎(lucene).doc 中文搜索引擎技术揭密.doc 九大开源搜索引擎介绍.txt 基于Nutch的搜索引擎技术.pdf 基于开源工具搭建小型搜索引擎.pdf 整合开源工具的小型搜索引擎构建.pdf 用_Hadoop_进行分布式...

    面向对象的全文搜索引擎hibernate-search入门例子

    hibernate-search小例子,myeclipse工程文件,有jar包,只要有mysql和myeclipse就可以直接运行。文章在http://blog.csdn.net/hortond。对文件索引和数据库感兴趣的可以下来看看,lucene是个很强大的全文搜索引擎。

    关于lucene3.5的使用

    这个为一个lucene3.5所写的程序例子,有助于刚入门的学习lucene的人,更快的的进入到lucene的学习中去。

    Lucene初级教程

    Lucene初级教程(入门经典资源,内附使用例子)

    Luncene3.0从入门到精通

    Lucene3.0从入门到精通,适合所有想做全文检索,垂直搜索方面的开发人员。从简单到深入,各种例子,各种注释很齐全。

Global site tag (gtag.js) - Google Analytics