lucene4.6的helloword

package luceneDemo;


import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.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;
import org.junit.Test;

import domain.Person;
@SuppressWarnings("deprecation")
public class Demo1 {
	@Test
	public void hello() throws Exception{
		Person p = new Person();
		p.setId(1);
		p.setName("jia贾宝玉");
		p.setDesc("我是天生大王,不能得罪");

		/**把对象的每个属性转换成字段(field)
		 * 第一个参数:保存在内容中的名称
		 * 第二个参数:要保存在内容的值
		 * 第三个参数:是否保存在内容中
		 * 				yes是保存,no就是不用保存.
		 * 第四个参数:是否保存在目录中
		 * 				index.no:不保存目录
		 * 				index.not_analyzed:保存目录,但是不分词
		 * 				index.analyzed:保存目录并且分词
		 */
		Field fieldId = new Field("id",p.getId().toString(),Store.YES,Index.NOT_ANALYZED);
		Field fieldName = new Field("name",p.getName(),Store.YES,Index.ANALYZED);
		Field fielddesc = new Field("desc",p.getDesc(),Store.YES,Index.ANALYZED);
		//创建document对象,用于保存field
		Document document = new Document();
		document.add(fieldId);
		document.add(fieldName);
		document.add(fielddesc);
		//创建检录内容和检索目录的保存位置
		Directory directory = FSDirectory.open(new File("./indexDir"));
		//创建检索器
		Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_46);
 		IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_46, analyzer);
 		//创建一个IndexWriter,把检录内容和检索目录保存到指定的位置(directory)
 		IndexWriter writer = new IndexWriter(directory, config);
		writer.addDocument(document);
		writer.close();
	}
	
	
	/*
	 * 创建搜索
	 * */
	@Test
	public void search() throws Exception{
		//指定文件搜索的位置
		Directory directory = FSDirectory.open(new File("./indexDir"));
		IndexReader indexReader = IndexReader.open(directory);
		//创建一个搜索器
		IndexSearcher searcher = new IndexSearcher(indexReader);
		Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_46);
		//指定要搜索的field的名称
		QueryParser queryparser = new QueryParser(Version.LUCENE_46,"name",analyzer);
		//搜索的关键字
		Query query = queryparser.parse("jia");
		//搜索出的内容,前1条记录
		TopDocs topdocs = searcher.search(query, 1);
		//搜索的总记录条数
		int conut = topdocs.totalHits;
		//搜索的总条数,其中是一个数组scoredoc
		ScoreDoc[] scoredocs = topdocs.scoreDocs;
		List<Person> list = new ArrayList<Person>();
		for (ScoreDoc scoredoc : scoredocs) {
			//每一个条数的角标
			int index = scoredoc.doc;
			//通过角标找到搜索的document
			Document document = searcher.doc(index);
			//保存person对象
			Person person = new Person();
			person.setId(Integer.parseInt(document.get("id")));
			person.setName(document.get("name"));
			person.setDesc(document.get("desc"));
			list.add(person);
		}
	for (Person person : list) {
		System.out.println(person.getId());
		System.out.println(person.getName());
		System.out.println(person.getDesc());
	}	
	}
}

你可能感兴趣的:(Lucene)