查了很多lucene资料,就纳闷为啥不能分享个简单的例子,我在这里自己写了一个
lucene实现其实很简单,先建立索引,在进行搜索,easy!
C:\\source
C:\\indexsource 中建立txt文件,输入你想要测试搜索的String类型内容。
package com.ch.lucene; import java.io.File; import java.io.FileReader; 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; import com.ch.util.FileUtil; public class TextFileIndexer { @SuppressWarnings("deprecation") public static void main(String[] args) throws Exception { File fileDir = new File("C:\\source"); File fileIndex = new File("C:\\index"); Directory dir = FSDirectory.open(fileIndex); Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_45); IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_45, luceneAnalyzer); iwc.setOpenMode(OpenMode.CREATE); IndexWriter iw = new IndexWriter(dir, iwc); File[] textFiles = fileDir.listFiles(); long startTime = new Date().getTime(); // 增加document到索引去 for (File file : textFiles) { if (file.isFile() && file.getName().endsWith(".txt")) { System.out .println("文件:" + file.getCanonicalPath() + "正在被索引操作。"); String temp = FileUtil.readTxtFile(file.getPath()); System.out.println(temp); Document document = new Document(); @SuppressWarnings("unused") Field filepath = new Field("path", file.getPath(), Field.Store.YES, Field.Index.NO); Field FieldBody = new Field("body", temp, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS); document.add(filepath); document.add(FieldBody); iw.addDocument(document); } } iw.close(); // 测试一下索引的时间 long endTime = new Date().getTime(); System.out.println("这花费了" + (endTime - startTime) + " 毫秒来把文档增加到索引里面去" + fileDir.getPath()); } }
package com.ch.lucene; import java.io.File; import java.io.IOException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; 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.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version; public class Query { public static void main(String[] args) throws IOException, ParseException { String index = "C:\\index"; @SuppressWarnings("deprecation") IndexReader reader = IndexReader .open(FSDirectory.open(new File(index))); IndexSearcher searcher = new IndexSearcher(reader); ScoreDoc[] hits = null; String queryString = "关键词"; // 搜索的关键词 Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_45); QueryParser qp = new QueryParser(Version.LUCENE_45, "body", analyzer); org.apache.lucene.search.Query query = qp.parse(queryString); if (searcher != null) { TopDocs results = searcher.search(query, 10); hits = results.scoreDocs; if (hits.length > 0) { System.out.println("找到:" + hits.length); } } } }
lucene 例子,lucene demo, lucene 教程
原文地址:http://blog.csdn.net/dannor2010/article/details/41348507