01-lucene简介和索引创建以及搜索

1.lucene是为了解决like中查询效率,准确性等问题而出现的。
2.lucene中创建索引的步骤
①.创建Directory(索引目录)
②.创建IndexWriter
③.创建Document对象
④.为Document添加Field
⑤.通过IndexWriter添加文档到索引中
⑥.关闭IndexWriter
3.lucene中搜索的步骤
①创建Directory
②创建IndexReader
③根据IndexReader创建IndexSearcher
④创建搜索的Query
⑤根据searcher搜索并返回TopDocs
⑥根据TopDocs获取ScoreDoc对象
⑦根据seacher和ScoreDoc对象获取具体的Document对象
⑧根据Document对象获取需要的值
⑨关闭IndexReader


具体的实现代码: 


package org.itat.test;

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

import org.apache.lucene.analysis.standard.StandardAnalyzer;
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.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.util.Version;

public class HelloLucene {
	/** 建立索引 */
	public void index() {
		IndexWriter writer = null;
		try {
			// 1.创建Directory(索引目录)
			/** 内存索引 */
			// Directory directory = new RAMDirectory();//索引是建立在内存中的
			Directory directory = FSDirectory
					.open(new File("d:/lucene/index01"));// 创建在硬盘上
			// 2.创建IndexWriter(写索引)
			IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35,
					new StandardAnalyzer(Version.LUCENE_35));
			writer = new IndexWriter(directory, iwc);
			// 3.创建Document对象
			Document doc = new Document();
			// 4.为Document添加Field(为Document的子元素)
			File f = new File("d:/lucene/example");
			for (File file : f.listFiles()) {
				doc = new Document();
				doc.add(new Field("content", new FileReader(file)));
				doc.add(new Field("filename", file.getName(), Field.Store.YES,
						Field.Index.NOT_ANALYZED));
				doc.add(new Field("path", file.getAbsolutePath(),
						Field.Store.YES, Field.Index.NOT_ANALYZED));
			}
			// 5.通过IndexWriter添加文档到索引中
			writer.addDocument(doc);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (writer != null) {
				try {
					writer.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}

	/** 搜索 */
	public void searcher() {
		try {
			// 1.创建Directory
			Directory directory = FSDirectory
					.open(new File("d:/lucene/index01"));// 创建在硬盘上
			// 2.创建IndexReader
			IndexReader reader = IndexReader.open(directory);
			// 3.根据IndexReader创建IndexSearcher
			IndexSearcher searcher = new IndexSearcher(reader);
			// 4.创建搜索的Query
			// 创建parser来确定要搜索文件的内容,第二个参数表示搜索的域
			QueryParser parser = new QueryParser(Version.LUCENE_35, "content",
					new StandardAnalyzer(Version.LUCENE_35));
			// 创建Query,表示搜索域为content中包含java的文档
			Query query = parser.parse("浏览器");
			// 5.根据seacher搜索并且返回TopDocs
			TopDocs tds = searcher.search(query, 10);// 后面参数表示搜索的条数
			// 6.根据TopDocs获取ScoreDoc对象
			ScoreDoc[] sds = tds.scoreDocs;
			for (ScoreDoc sd : sds) {
				// 7.根据seacher和ScordDoc对象获取具体的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();
		}
	}
}

 
package org.itat.test;

import org.junit.Test;

public class TestLucene {
	//测试索引的创建
	@Test
	public void testIndex(){
		HelloLucene hl=new HelloLucene();
		hl.index();
	}
	//测试搜索
	@Test
	public void testSearch(){
		HelloLucene hl=new HelloLucene();
		hl.searcher();
	}
}


需要导入的Jar包

junit-4.7.jar
lucene-core-3.5.0.jar

可以在src中创建一个lib目录,然后将这俩个jar包复制进去,然后在build path,  然后add to build path




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会编程的阿强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值