lucene3.6.1 经典案例 入门教程
http://liqita.iteye.com/blog/1676664 参考地址,原始的代码复制有点不人情哎。
第一步:下载lucene的核心包
lucene-core-3.6.1-javadoc.jar (3.5 MB)
lucene-core-3.6.1.jar (1.5 MB)
拷贝到项目的lib 文件夹里
第二步:
在C盘下建立source文件夹 (C:\source)
source文件夹存放待索引的文件,例如,建立两个文件,名称为 test1.txt test2.txt 。
test1.txt文件内容为:欢迎来到绝对秋香的博客。
test2.txt文件内容为:绝对秋香引领你走向潮流。
在C盘下再建立index文件夹,存放索引文件 (C:\index)
第三步,建立索引类 TextFileIndexer ,并运行主函数
Java代码
package lucene; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.Date; import org.apache.lucene.analysis.Analyzer; 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.index.IndexWriterConfig; import org.apache.lucene.index.IndexWriterConfig.OpenMode; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version; public class TextFileIndexer { public static void main(String[] args) throws Exception { /* 指明要索引文件夹的位置,这里是C盘的source文件夹下 */ File fileDir = new File("c:\\source"); /* 这里放索引文件的位置 */ File indexDir = new File("c:\\index"); Directory dir = FSDirectory.open(indexDir); Analyzer lunAnalyzer = new StandardAnalyzer(Version.LUCENE_36); IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_36, lunAnalyzer); iwc.setOpenMode(OpenMode.CREATE); IndexWriter indexWriter = new IndexWriter(dir, iwc); File[] textFiles = fileDir.listFiles(); //开始时间 long startTime = new Date().getTime(); //增加document到索引去 for(int i=0; i<textFiles.length; i++){ if(textFiles[i].isFile() && textFiles[i].getName().endsWith(".txt")){ System.out.println("File:"+textFiles[i].getCanonicalPath()+" 正在被索引...."); //读取文件内容 String tmp = FileReaderAll(textFiles[i].getCanonicalPath(), "GBK"); System.out.println("文件内容:"); System.out.println(tmp); System.out.println("文件内容结束"); Document document = new Document(); Field FieldPath = new Field("path", textFiles[i].getPath(), Field.Store.YES, Field.Index.NO); Field FieldBody = new Field("body", tmp, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS); document.add(FieldPath); document.add(FieldBody); indexWriter.addDocument(document); } } indexWriter.close(); //测试索引时间 long endTime = new Date().getTime(); System.out.println("建立索引总花费了:"+(endTime-startTime)+"毫秒值"); } //读取文件内容 public static String FileReaderAll(String FileName, String charset) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader( new FileInputStream(FileName), charset)); String line = new String(); String temp = new String(); while ((line = reader.readLine()) != null) { temp += line; } reader.close(); return temp; } }
输出结果为:
File:C:\source\test1.txt 正在被索引....
文件内容:
欢迎来到绝对秋香的博客。
文件内容结束
File:C:\source\test2.txt 正在被索引....
文件内容:
绝对秋香引领你走向潮流。
文件内容结束
建立索引总花费了:406毫秒值
第四步,建立测试类TestQuery,并运行主函数,输出测试结果,查找索引值
package lucene; import java.io.File; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.index.IndexReader; 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.FSDirectory; import org.apache.lucene.util.Version; public class TestQuery { public static void main(String[] args) throws Exception{ //搜索的索引路径 String index = "c:\\index"; IndexReader indexReader = IndexReader.open(FSDirectory.open(new File(index))); IndexSearcher searcher = new IndexSearcher(indexReader); ScoreDoc[] hits = null; //搜索的关键字 String queryString = "绝对"; Query query = null; Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36); try { QueryParser qp = new QueryParser(Version.LUCENE_36, "body", analyzer); query = qp.parse(queryString); } catch (Exception e) { // TODO: handle exception } if(searcher != null){ //返回最多10条记录 TopDocs results = searcher.search(query, 10); hits = results.scoreDocs; if(hits.length > 0){ System.out.println("找到"+hits.length+"个结果!"); System.out.println(hits[0].toString()); } searcher.close(); } } }
结果:
找到2个结果!
doc=0 score=0.21019982 shardIndex=-1
给个参加网站:
http://special.chinaitlab.com/Lucene/index.html 一系列的lucene学习。