最近再看Lucene,在网上也看了不少的例子,现在把我做的拿出来。
1、首先去http://mirrors.cnnic.cn/apache/lucene/java/4.5.0/下载lucene4.5的jar包。解压出来
2、在MyEclipse里面新建一个JAVA项目,将以下jar包拷入项目,其中junit-4.11.jar是测试单元的jar包
3、在I盘创建文件夹lucene,在里面创建连个文件夹,一个index(放要创建的文件),一个indexed(放保存索引),在index文件夹里面放待创建索引的文件
4、新建一个创建索引的Index类,如下
- package www.lucene.com;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import org.apache.lucene.analysis.standard.StandardAnalyzer;
- import org.apache.lucene.document.Document;
- import org.apache.lucene.document.Field;
- import org.apache.lucene.document.StringField;
- import org.apache.lucene.document.TextField;
- import org.apache.lucene.index.IndexWriter;
- import org.apache.lucene.index.IndexWriterConfig;
- import org.apache.lucene.store.Directory;
- import org.apache.lucene.store.FSDirectory;
- import org.apache.lucene.util.Version;
- public class Index {
- /**
- * @ 创建索引
- */
- public void createIndex(){
- IndexWriter writer = null ;
- try {
- //1、创建Directory对象
- Directory dir = FSDirectory.open(new File("I:/lucene/indexed"));
- //2、创建indexWrite
- writer = new IndexWriter(dir, new IndexWriterConfig(Version.LUCENE_45, new StandardAnalyzer(Version.LUCENE_45))) ;
- //3、创建document对象
- Document document = null ;
- //4、将要索引的文件已Field形式添加到document
- File files = new File("I:/lucene/index") ;
- for(File file:files.listFiles()){
- document = new Document();
- document.add(new StringField("fileName",file.getName(),Field.Store.YES)) ; //为文件名创建索引,存储
- document.add(new StringField("filePath",file.getAbsolutePath(),Field.Store.YES)) ; //为文件路径创建索引,存储
- document.add(new TextField("content",new BufferedReader(
- new InputStreamReader(
- new FileInputStream(file), "UTF-8")))) ; //为内容创建索引,但不存储
- writer.addDocument(document) ;
- }
- } catch (IOException e) {
- e.printStackTrace();
- }finally{
- if(writer != null){
- try {
- writer.close() ;
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
5、创建查询索引的类,如下:
- package www.lucene.com;
- import java.io.File;
- import java.io.IOException;
- import org.apache.lucene.analysis.standard.StandardAnalyzer;
- import org.apache.lucene.document.Document;
- import org.apache.lucene.index.DirectoryReader;
- import org.apache.lucene.index.IndexReader;
- import org.apache.lucene.queryparser.classic.ParseException;
- import org.apache.lucene.queryparser.classic.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 Searcher {
- /**
- * @ 搜索
- */
- public void searchIndex(){
- try {
- //1.创建Directory
- Directory dir = FSDirectory.open(new File("i:/lucene/indexed"));
- //2.创建IndexReader
- IndexReader reader = DirectoryReader.open(dir) ;
- //3.根据IndexReader创建IndexSearcher
- IndexSearcher searcher = new IndexSearcher(reader) ;
- //4.创建搜索的Query
- //创建parser来确定搜索的内容,第二个参数表示搜索的域
- QueryParser parser = new QueryParser(Version.LUCENE_45,"content", new StandardAnalyzer(Version.LUCENE_45)) ;
- //创建query,表示搜索域中包含'Directory'的文档
- Query query = parser.parse("Directory") ;
- //5.根据search搜索返回TopDocs,要设置返回条数
- TopDocs docs = searcher.search(query, 10) ;
- //6.根据TopDocs获取ScoreDoc
- for(ScoreDoc doc: docs.scoreDocs){
- //7.根据searcher和scoredoc获取具体的Document对象
- Document document = searcher.doc(doc.doc) ;
- //8.根据Document对象获取需要的内容
- System.out.println(document.get("fileName")+"["+document.get("filePath")+"]");
- }
- //9.关闭reader
- reader.close();
- } catch (IOException e) {
- e.printStackTrace();
- }catch (ParseException e) {
- e.printStackTrace();
- }
- }
- }
6、新建一个测试类,来测试这两个,不过先要执行创建索引的,然后查询,如下:
- package www.lucene.com;
- public class TestLucene {
- public static void main(String[] args) {
- Index index = new Index() ;
- index.createIndex() ;
- Searcher searcher = new Searcher() ;
- searcher.searchIndex() ;
- }
- }
7、执行结果:
(本文转自http://blog.csdn.net/yu_han_23/article/details/12348285)