检索数据库中的数据简单示例
1、检索实体类
package com.dxcollector.search;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.index.CorruptIndexException;import org.apache.lucene.queryParser.MultiFieldQueryParser;import org.apache.lucene.queryParser.ParseException;import org.apache.lucene.queryParser.QueryParser;import org.apache.lucene.search.BooleanClause;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.util.Version;import com.dxcollector.entity.DxNovel;/** * 搜索管理器 * * @author 忧里修斯 * */public class SearchMgr {//索引文件存放的位置private String index_store_path = "C:/index/";public SearchMgr(String index_store_path){this.index_store_path = index_store_path;}/** * 搜索小说 * * @param searchType 搜索类型,对应小说标题NTitle等 * @param keyword 关键字 * @return List<DxNovel> */public List<DxNovel> search(String searchType,String keyword){List<DxNovel> novelList = null;try {novelList = new ArrayList<DxNovel>();Directory directory = FSDirectory.open(new File(index_store_path));IndexSearcher indexSearcher = new IndexSearcher(directory,true);Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29);//建立搜索单元Query query = null;QueryParser queryParser = new QueryParser(Version.LUCENE_29,searchType,analyzer); query = queryParser.parse(keyword);//多域搜索if(searchType.equals("")){queryParser.setDefaultOperator(QueryParser.OR_OPERATOR);String[] fields = {"NTitle", "NAuthor", "NDesc","NType"};BooleanClause.Occur[] flags = {BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD};try {query = MultiFieldQueryParser.parse(Version.LUCENE_29,keyword, fields, flags, analyzer);} catch (ParseException e) {e.printStackTrace();}}//检索TopDocs topDocs = indexSearcher.search(query,100);ScoreDoc[] hits = topDocs.scoreDocs;System.out.println("结果集大小:"+hits.length);for (int i = 0; i < hits.length; i++) {int docId = hits[i].doc;Document doc = indexSearcher.doc(docId);DxNovel novel = new DxNovel();novel.setNTitle(doc.get("NTitle"));novel.setNAuthor(doc.get("NAuthor"));novel.setNDesc(doc.get("NDesc"));novel.setNType(doc.get("NType"));novelList.add(novel);}} catch (CorruptIndexException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (ParseException e) {e.printStackTrace();}return novelList;}public static void main(String[] args) {SearchMgr searcher = new SearchMgr("C:/index/");List<DxNovel> novelList = new ArrayList<DxNovel>();novelList = searcher.search("NTitle", "my");for (DxNovel dxNovel : novelList) {System.out.println("标题:"+dxNovel.getNTitle());System.out.println("作者:"+dxNovel.getNAuthor());System.out.println("类型:"+dxNovel.getNType());System.out.println("简介:"+dxNovel.getNDesc());}}}