lucene 例子,lucene demo, lucene 教程
查了很多lucene资料,就纳闷为啥不能分享个简单的例子,我在这里自己写了一个
lucene实现其实很简单,先建立索引,在进行搜索,easy!
下载jar包,链接在这里:http://download.csdn.net/detail/dannor2010/8183641 项目中导入lib即可,不多说了。
前期:创建两个txt文件,C:\\source
C:\\index
source 中建立txt文件,输入你想要测试搜索的String类型内容。
1、建立索引,代码如下
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()); } }
2、进行搜索,代码如下
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); } } } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。