Lucene——入门案例

今天开始学习lucene

在lib里面导入两个包 junit.jar lucene-core-3.50.jar

六步

首先建立索引Directory、IndexWriter两个前提

创建Document

为Dcument增加Field

用Writer写入Document

关闭writer

九步

首先建立Directory、IndexReader两个前提

其次用IndexReader获取IndexSearcher

QueryParse

Query

TopDocs

ScoreDocs

Document

关闭reader

 

创建在哪个域中搜索什么内容的query

最终目的还是得到Document

关闭reader

HelloLucene.java

package org.itat.test;

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

import org.apache.commons.io.FileUtils;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
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.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;

public class HelloLucene {

	/**
	 * 建立是索引
	 */
	public void index() {

		IndexWriter writer = null;
		try {
			// 1,创建索引Directory
			// Directory directory = new RAMDirectory();放在内存中
			Directory directory = FSDirectory.open(new File(
					"e:/lucene/index_01"));// 放在硬盘中
			// 2,创建IndexWriter
			IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35,
					new StandardAnalyzer(Version.LUCENE_35));
			writer = new IndexWriter(directory, iwc);
			// 3,创建文档Document
			Document document = null;
			// 4,为Document添加域Field
			File file = new File("e:/lucene/example");
			for (File f : file.listFiles()) {
				document = new Document();
				//String content=FileUtils.readFileToString(f);
				//System.out.println(content);
				//commons-io-2.1.jar这个包很好用
				//1.txt和2.txt合二为一了最后
				document.add(new Field("content", new FileReader(f)));
				document.add(new Field("filename", f.getName(),Field.Store.YES, Field.Index.NOT_ANALYZED));
				document.add(new Field("path", f.getAbsolutePath(),Field.Store.YES, Field.Index.NOT_ANALYZED));
				// 5,通过indexWriter吧文档添加到索引directory中
				writer.addDocument(document);
			}
		} catch (CorruptIndexException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (LockObtainFailedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {

			if (writer != null)
				try {
					writer.close();
				} catch (CorruptIndexException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

		}
	}

	/**
	 * 搜索
	 */

	public void search() {
		try {
			// 1.创建Directory
			Directory directory = FSDirectory.open(new File(
					"e:/lucene/index_01"));

			// 2.创建IndexReader
			IndexReader reader = IndexReader.open(directory);

			// 3.根据IndexReader创建IndexSercher
			IndexSearcher searcher = new IndexSearcher(reader);

			// 4.创建搜索的Query
			// 创建parse来确定搜索文件的内容,第二个参数是搜索的域
			QueryParser parser = new QueryParser(Version.LUCENE_35, "content",new StandardAnalyzer(Version.LUCENE_35));
			// 创建query,表示搜索域为content包含的内容
			Query query = parser.parse("java");

			// 5.根据sercher搜索并返回TopDocs
			TopDocs tds = searcher.search(query, 10);

			// 6.根据TopDocs获取ScoreDoc对象
			ScoreDoc sds[] = tds.scoreDocs;
			for (ScoreDoc sd : sds) {
				// 7.根据sercher对象和Scoredoc对象获取Document对象
				Document d = searcher.doc(sd.doc);
				// 8.根据Document对象获取需要的值
				System.out.println(d.get("filename") + "[" + d.get("path")+ "]");
			}
			// 9.关闭reader
			reader.close();
		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
		}

	}

}


 

TestLucene.java


 

package org.itat.test;

import org.junit.Test;

public class TestLucene {

	@Test
	public void testIndex()
	{
		 HelloLucene helloLucene=new HelloLucene();
		 helloLucene.index();
	}
	
	@Test
	public void testSearch()
	{
		 HelloLucene helloLucene=new HelloLucene();
		 helloLucene.search();
	}
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值