lucene3.5建立索引和查询

<span style="font-size:14px;">import java.io.File;
import java.io.FileReader;
import java.io.IOException;

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.util.Version;


public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Test test = new Test();
		test.searchIndex();
	}

	public void createIndex(){
		IndexWriter writer = null;

		try {
			//1.创建一个索引目录
			Directory dir = FSDirectory.open(new File("F:\\tt\\index"));
			//2.创建一个indexWriter
			IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
			writer = new IndexWriter(dir, iwc);
			//3.创建一个document
			Document document = null;
			for(File f:new File("F:\\tt\\file").listFiles()){
				document = new Document();
				document.add(new Field("content",new FileReader(f)));
				document.add(new Field("path",f.getAbsolutePath(),Field.Store.YES,Field.Index.NOT_ANALYZED));
				document.add(new Field("name",f.getName(),Field.Store.YES,Field.Index.NOT_ANALYZED));
			}
			//4.利用indexWriter将索引写入到目录中
			writer.addDocument(document);

		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(writer!=null){
				try {
					writer.close();
				} catch (CorruptIndexException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}


	}

	public void searchIndex(){
		Directory dir;
		try {
			//1.创建一个目录
			dir = FSDirectory.open(new File("F:\\tt\\index"));//建立在硬盘上
			//2.创建一个indexReader
			IndexReader reader = IndexReader.open(dir);
			//3.创建一个indexSearcher
			IndexSearcher searcher = new IndexSearcher(reader);
			//4.创建一个queryParser(第二个参数为要搜索的域,即条件)
			QueryParser parser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
			//5.创建一个query(参数为要搜索的指,即content=“中华”)
			Query query = parser.parse("可以实现该功能。");  
			//6.根据searcher搜索并返回一个TopDocs
			TopDocs docs = searcher.search(query, 10); //搜索前10条记录
			//7.根据TopDocs获取一个ScoreDoc数组对象
			ScoreDoc[] sds = docs.scoreDocs;
			Document document ;
			for(ScoreDoc sd : sds){
				//8.创建一个document
				document = searcher.doc(sd.doc);  //根据编号为sd.doc查找
				System.out.println("path:"+document.get("path")+"--------   name:"+document.get("name"));
			}
			//9.关闭流
			searcher.close();
			reader.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}

}
</span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值