您的位置:首页 > 编程语言 > Java开发

Lucene 入门之创建索引和搜索

2014-04-08 14:44 453 查看
本例使用Lucene3.5.0版本

Lucene由3部分组成,索引部分,分词部分,搜索部分,本文简单介绍索引部分和搜索部分。

创建索引可分为5步:

1、创建Directory来存储索引

2、创建Indexwriter来写索引

3、创建Document来存储信息

4、为Document创建Field

5、通过IndexWriter添加文档

创建搜索可分为8部分:

1、创建Directory来获取索引

2、创建IndexReader来读取索引

3、根据IndexReader来创建IndexSearcher

4、创建搜索的Query

5、根据Searcher搜索并返回TopDocs

6、根据topDocs返回scoreDocs

7、根据Searcher和scoreDocs获取Document

8、根据Document获取文档信息

代码如下:

package com.lkt.lucene;

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 HelloLucene2 {

/**
* 建立索引
*/
public void index(){
IndexWriter writer=null;
try {
//1.创建Directory,用来存储索引(FSDirectory,存储在硬盘中)
Directory dir = FSDirectory.open(new File("F:"+File.separator+"workspace"+File.separator+"lucene"));
//2.创建IndexWriter,用来写索引
//版本和分词器,此例用标准分词器
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
writer = new IndexWriter(dir, iwc);
//3.创建Document对象
Document doc =null;
//4.为Document添加Field
File file =new File("F:\\学习资料\\javascript\\workspace");
for (File f : file.listFiles()) {
doc = new Document();
doc.add(new Field("content", new FileReader(f)));
//存储文件名,是否将文件名存储到硬盘,是否分词
doc.add(new Field("filename", f.getName(),Field.Store.YES ,Field.Index.NOT_ANALYZED));
doc.add(new Field("filepath", f.getAbsolutePath(),Field.Store.YES ,Field.Index.NOT_ANALYZED));
//5.将文档添加到索引中
writer.addDocument(doc);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(writer!=null){
try {
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
/**
* 搜索
*/
public void searcher(){
IndexReader reader=null;
try {
//1.创建Directory
Directory dir = FSDirectory.open(new File("F:"+File.separator+"workspace"+File.separator+"lucene"));
//2.创建IndexReader,读取索引
reader = IndexReader.open(dir);
//3.根据IndexReader创建Indexsearcher
IndexSearcher searcher = new IndexSearcher(reader);
//4.创建搜索的Query
//创建QueryParser 来确认要搜索的内容,第二个参数要搜索的域
QueryParser queryParser = new QueryParser(Version.LUCENE_35, "content",new StandardAnalyzer(Version.LUCENE_35));
//创建Query,表示搜索域中包含Java的文件
Query query = queryParser.parse("javascript");
//5.根据Searcher搜索并且返回TopDocs
//搜索10条
TopDocs topDocs = searcher.search(query, 10);
//6.根据TopDocs获取ScoreDoc对象
ScoreDoc[] scoreDocs= topDocs.scoreDocs;
for (int i = 0; i < scoreDocs.length; i++) {
//7.根据searcher和ScoreDoc得到Document对象
Document d = searcher.doc(scoreDocs[i].doc);
//8.根据Document得到需要的值
System.out.println(d.get("filename")+"["+d.get("filepath")+"]");
}

} catch (Exception e) {
e.printStackTrace();
}finally{
if(reader!=null){
reader.clone();
}
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java lucene