lucene练习

package lucene.mine;

import java.io.File;

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.Fieldable;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
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.RAMDirectory;
import org.apache.lucene.util.Version;

public class MyLuceneTestClass {
	static IndexWriter writer = null; 
	
	public static void main(String[] args) throws Exception {
		
		Analyzer analyzer=new StandardAnalyzer(Version.LUCENE_35);//分词器
		IndexWriterConfig conf=new IndexWriterConfig(Version.LUCENE_35, analyzer);//索引写入器配置
		conf.setOpenMode(OpenMode.CREATE);
		
		//Directory directory = new RAMDirectory();//使用内存文件夹
		
		File ff=new File("E:\\TestLucene\\mine");
		Directory directory = FSDirectory.open(ff);//使用文件夹
		
		writer=new IndexWriter(directory, conf);//到这里真正创建索引写入器
		
//		Document doc = new Document(); //创建文档
//		String s1="indexname";
//		String s2="这是一段需要创建索引的文本。";
//		Fieldable field=new Field(s1, s2, Field.Store.YES, Field.Index.ANALYZED);
//		doc.add(field);
		
		Document doc = new Document(); //创建文档
		File ifile=new File("E:\\TestLucene\\mine\\aa.txt");
		//E:\\TestLucene\\mine\\aa.txt的内容,这里我就直接写了:
		String tobeIndexedContent="这是一段文本,来测试索引的创建。";
		Field field=new Field("indexmark", tobeIndexedContent,
				Field.Store.YES, Field.Index.ANALYZED);
		doc.add(field);
		writer.addDocument(doc);
		
		writer.close();
		
		//索引创建到此完成,下面开始利用索引检索。
		
		Query query = null;
		//索引读取器的创建
		IndexReader reader = IndexReader.open(
				FSDirectory.open(new File("E:\\TestLucene\\mine")), true);// read-only
		IndexSearcher searcher = new IndexSearcher(reader);//索引搜索器
		
		
		String queryString="试索";//被检索的内容关键字
		String fields = "indexmark";//被检索的关键字标识 
		
		QueryParser qp = new QueryParser(Version.LUCENE_35, fields,
				new StandardAnalyzer(Version.LUCENE_35));
		query = qp.parse(queryString);
		
		if (searcher != null) {
			TopDocs topDocs = searcher.search(query, 100);// 100是显示队列的Size
			ScoreDoc[] hits = topDocs.scoreDocs;
			System.out.println("共有" + searcher.maxDoc() + "条索引,命中"
					+ hits.length + "条");
			for(int i=0;i<hits.length;i++){
				System.out.println(hits[i].toString());
			}
			
		}
		
	}

}


控制台打印:

共有1条索引,命中1条
doc=0 score=0.10848885

 

在E:\TestLucene\mine内文件:

刚开始只有 aa.txt,

每运行一遍该例子,序号增一,运行6遍后:

 aa.txt

segments.gen

_6.fdt

_6.fdx

_6.fnm

_6.frq

_6.nrm

_6.prx

_6.tii

_6.tis

segments_7

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值