Lucene3.4结合IKAnalyzer3.2 搜索功能的实现

来源:互联网 发布:涉密网络 编辑:程序博客网 时间:2024/05/21 01:48
package com.cheea.lucene;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.apache.lucene.document.Document;import org.apache.lucene.index.CorruptIndexException;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.store.LockObtainFailedException;import org.wltea.analyzer.lucene.IKQueryParser;import org.wltea.analyzer.lucene.IKSimilarity;import com.cheea.entity.Doc;public class FileSearcher {private File indexDir = new File("F:\\indexDir");;public List search(String fieldName, String keyword) {Directory directory = null;IndexSearcher is = null;TopDocs topDocs=null;        List<Doc> list=new ArrayList();try {// 实例化搜索器directory = FSDirectory.open(indexDir);is = new IndexSearcher(directory, true);is.setSimilarity(new IKSimilarity()); // 在索引器中使用IKSimilarity相似度评估器Query query = IKQueryParser.parse(fieldName, keyword);  // 使用IKQueryParser查询分析器构造Query对象topDocs = is.search(query,100);  // 搜索相似度最高的100条记录//System.out.println("一共找到:"+topDocs.totalHits+"个结果");// 输出结果ScoreDoc[] scoreDocs = topDocs.scoreDocs;for (int i = 0; i < topDocs.totalHits; i++) {Document targetDoc = is.doc(scoreDocs[i].doc);//System.out.println("相关性评分:" + scoreDocs[i].score + "\t位置:" + targetDoc.toString());    Doc doc=new Doc();doc.setHits(topDocs.totalHits);doc.setScore(scoreDocs[i].score);String pa=targetDoc.toString();int st=pa.lastIndexOf("\\")+1;int ed=pa.length()-2;String path=(String) pa.subSequence(st, ed);doc.setPath(path);list.add(doc);}} catch (CorruptIndexException e) {e.printStackTrace();} catch (LockObtainFailedException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}if (directory != null) {try {directory.close();} catch (IOException e) {e.printStackTrace();}}}return list;}/*public static void main(String[] args) {Searcher search = new Searcher();search.search("text", "我");}*/}

原创粉丝点击