package com.cqu.news.dao; import java.io.File; import java.io.IOException; import java.sql.SQLException; import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.ParseException; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import com.cqu.news.model.NewsDetailModel; import com.cqu.news.util.Constant; import com.cqu.news.util.LuceneUtil; import com.cqu.news.util.NewsToDocument; /** * @author xiongxianren * @desciption TODO */ public class SearchDao { /** * @decription:创建索引 * @parm:@param news * @return:void * @throws:IOException */ public void createIndex(NewsDetailModel news) throws IOException{ IndexWriter indexWriter = LuceneUtil.getIndexWriter(); Document document = NewsToDocument.newsToDocument(news); indexWriter.addDocument(document); indexWriter.close(); } /** * @decription:根据关键词查询 * @parm:@param keywords * @return:TopDocs * @throws:IOException * @throws:ParseException */ public TopDocs searcher(String keywords) throws IOException, ParseException { Directory directory = FSDirectory.open(new File(Constant.INDEXDIR)); TopDocs topDocs =null; IndexReader indexReader = DirectoryReader.open(directory); IndexSearcher indexSearcher = new IndexSearcher(indexReader); Query query = new TermQuery(new Term("title", keywords)); // 检索符合query条件的前n条记录 topDocs = indexSearcher.search(query, 10); System.out.println("返回总记录数" + topDocs.totalHits); ScoreDoc scoreDocs[] = topDocs.scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) { int docID = scoreDoc.doc; // 根据id检索document Document document = indexSearcher.doc(docID); System.out.println("标题:"+document.get("title")); System.out.println("内容:"+document.get("content")); System.out.println("-----------------------------------------------------"); } return topDocs; } /** * @decription:测试 * @parm:@param args * @return:void * @throws:IOException */ public static void main(String[] args) throws IOException { SearchDao test = new SearchDao(); try { System.out.println(test.searcher("虎溪校区举行辅导员座谈会")); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }