热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Lucene4.5索引的创建与搜索

最近再看Lucene,在网上也看了不少的例子,现在把我做的拿出来。1、首先去http:mirrors.cnnic.cnapachelucenejava4.5.0下载lucen

最近再看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、执行结果:




推荐阅读
author-avatar
小新没蜡笔775
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有