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