Lucene学习笔记

来源:互联网 发布:cnc宏程序编程格式 编辑:程序博客网 时间:2024/05/28 15:38

         Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包。Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。实战 Lucene,第 1 部分: 初识 Lucene

          目前已经有很多应用程序的搜索功能是基于 Lucene 的,比如 Eclipse 的帮助系统的搜索功能。Lucene 能够为文本类型的数据建立索引,所以你只要能把你要索引的数据格式转化的文本的,Lucene 就能对你的文档进行索引和搜索。比如你要对一些 HTML 文档,PDF 文档进行索引的话你就首先需要把 HTML 文档和 PDF 文档转化成文本格式的,然后将转化后的内容交给 Lucene 进行索引,然后把创建好的索引文件保存到磁盘或者内存中,最后根据用户输入的查询条件在索引文件上进行查询。不指定要索引的

   1.下载使用Lucene工具依赖的jar包lucene-core-3.0.0.jar,以及demo示例 lucene-demos-3.0.0.jar。

   2.新建一个普通的Java工程,并且引入1中下载的jar包。

   3.新建一个Java类TestLucene.java.

   

package cn.com.lucen;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;import java.io.Reader;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.index.IndexWriter;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.TopScoreDocCollector;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.util.Version;public class TestLucene {/** * @param args */public static void main(String[] args) throws Exception{// TODO Auto-generated method stub//testLucene();//建立文件索引testSearch();//根据关键字进行查询资源}public static void testSearch() throws Exception{String indexDir = "E:/lee/index";String fieldName = "content";String keyWords = "Exception";//1 .得到一个search对象IndexSearcher indexSearcher = new IndexSearcher(FSDirectory.open(new File(indexDir)),true);//2.查询语句QueryParser queryParser = new QueryParser(Version.LUCENE_CURRENT, fieldName,new StandardAnalyzer(Version.LUCENE_CURRENT));//2.1获取query对象Query query = queryParser.parse(keyWords);//2.2得到resultsTopScoreDocCollector results = TopScoreDocCollector.create(10, false);//取前10条记录//3.执行查询indexSearcher.search(query, results);//4.打印结果ScoreDoc[] scoreDocs = results.topDocs().scoreDocs;for (int i = 0; i < scoreDocs.length; i++) {Document doc = indexSearcher.doc(scoreDocs[i].doc);Field fileNameField = doc.getField("fileName");System.out.println("您要查找的'"+keyWords+"'在:"+fileNameField);}}public static void testLucene() throws Exception{String indexDir = "E:/lee/index";String sourceDir = "E:/lee/source";IndexWriter indexWriter = new IndexWriter(FSDirectory.open(new File(indexDir)),new StandardAnalyzer(Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.LIMITED);/* * fileName(包含目录) 文件名 * content文件内容 * field(name,value) * indexWriter.addDocument(doc); * */File file = new File(sourceDir);File[] files = file.listFiles();if (files != null) {Document doc = null;for (int i = 0; i < files.length; i++) {String fileName = files[i].getAbsolutePath();String fileContent = readFile(files[i]);Field fileNameField = new Field("fileName", fileName, Field.Store.YES, Field.Index.ANALYZED);Field fileContentField = new Field("content", fileContent, Field.Store.YES, Field.Index.ANALYZED);doc = new Document();doc.add(fileNameField);doc.add(fileContentField);indexWriter.addDocument(doc);}}indexWriter.optimize();indexWriter.close();System.out.println("搜索文件优化完毕。。。");}private static String readFile(File file) throws Exception{StringBuffer strBuffer = new StringBuffer(); Reader reader = null;try {reader = new InputStreamReader(new FileInputStream(file));char[] ch = new char[1024];int count = -1;while ((count = reader.read(ch)) != -1) {strBuffer.append(ch,0,count);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{reader.close();}return strBuffer.toString();}}

小结:通过写demo,对于Lucene工具包的使用有了大致的了解,为后续项目使用奠定了一点点小小的基础。         





0 0
原创粉丝点击