您的位置:首页 > 其它

lucene源码分析---1

2016-07-11 11:05 399 查看

lucene源码分析—实例

本章开始分析lucene的源码,版本为目前最新的6.1.0,下面先看一段常见的lucene建立索引和进行搜索的实例,

建立索引实例:

String filePath = ...//文件路径
String indexPath = ...//索引路径
File fileDir = new File(filePath);
Directory dir = FSDirectory.open(Paths.get(indexPath));

Analyzer luceneAnalyzer = new StandardAnalyzer();
IndexWriterConfig iwc = new IndexWriterConfig(luceneAnalyzer);
iwc.setOpenMode(OpenMode.CREATE);
IndexWriter indexWriter = new IndexWriter(dir,iwc);
File[] textFiles = fileDir.listFiles();

for (int i = 0; i < textFiles.length; i++) {
if (textFiles[i].isFile()) {
String temp = FileReaderAll(textFiles[i].getCanonicalPath(),
"GBK");
Document document = new Document();
Field FieldPath = new StringField("path", textFiles[i].getPath(), Field.Store.YES);
Field FieldBody = new TextField("body", temp, Field.Store.YES);
document.add(FieldPath);
document.add(FieldBody);
indexWriter.addDocument(document);
}
}
indexWriter.close();


其中,FileReaderAll函数用来从文件中读取字符串。

搜索实例:

String indexPath=...//索引路径
IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(indexPath)));
IndexSearcher searcher=new IndexSearcher(reader);
ScoreDoc[] hits=null;
String queryString=...//关键字符串
Query query=null;
Analyzer analyzer= new StandardAnalyzer();
try {
QueryParser qp=new QueryParser("body",analyzer);
query=qp.parse(queryString);
} catch (ParseException e) {

}
if (searcher!=null) {
TopDocs results=searcher.search(query, 10);
hits=results.scoreDocs;
Document document=null;
for (int i = 0; i < hits.length; i++) {
document=searcher.doc(hits[i].doc);
String body=document.get("body");
String path=document.get("path");
String modifiedtime=document.get("modifiField");
}
reader.close();
}


后面的章节就会开始分析这两个实例究竟做了哪些工作,以及探究lucene背后的原理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: