1 25 26 package com.j2biz.blogunity.web.actions.blog; 27 28 import java.io.File ; 29 import java.util.ArrayList ; 30 import java.util.Collections ; 31 32 import javax.servlet.http.HttpServletRequest ; 33 import javax.servlet.http.HttpServletResponse ; 34 35 import org.apache.commons.lang.StringUtils; 36 import org.apache.lucene.analysis.standard.StandardAnalyzer; 37 import org.apache.lucene.document.Document; 38 import org.apache.lucene.queryParser.QueryParser; 39 import org.apache.lucene.search.BooleanQuery; 40 import org.apache.lucene.search.Hits; 41 import org.apache.lucene.search.IndexSearcher; 42 import org.apache.lucene.search.Query; 43 import org.apache.lucene.store.Directory; 44 import org.apache.lucene.store.FSDirectory; 45 46 import com.j2biz.blogunity.exception.BlogunityException; 47 import com.j2biz.blogunity.pojo.Blog; 48 import com.j2biz.blogunity.util.LuceneSearchResult; 49 import com.j2biz.blogunity.web.ActionResultFactory; 50 import com.j2biz.blogunity.web.IActionResult; 51 import com.j2biz.blogunity.web.actions.AbstractAction; 52 53 public class SearchAction extends AbstractAction { 54 55 private static final IActionResult SEARCH_FORWARD = ActionResultFactory 56 .buildForward("/searchView.vm"); 57 58 private Blog blog; 59 60 public SearchAction(Blog blog) { 61 this.blog = blog; 62 } 63 64 70 public IActionResult execute(HttpServletRequest request, HttpServletResponse response) 71 throws BlogunityException { 72 73 String query = request.getParameter("query"); 74 75 if (StringUtils.isEmpty(query)) { 76 request.setAttribute("hits", "0"); 77 request.setAttribute("results", Collections.EMPTY_LIST); 78 return SEARCH_FORWARD; 79 } 80 81 File indexDir = blog.getIndexesDirectory(); 82 83 try { 84 Directory fsDir = FSDirectory.getDirectory(indexDir, false); 85 IndexSearcher is = new IndexSearcher(fsDir); 86 87 StandardAnalyzer analyzer = new StandardAnalyzer(); 88 Query q1 = QueryParser.parse(query, "body", analyzer); 89 Query q2 = QueryParser.parse(query, "excerpt", analyzer); 90 Query q3 = QueryParser.parse(query, "title", analyzer); 91 Query q4 = QueryParser.parse(query, "author", analyzer); 92 93 BooleanQuery q = new BooleanQuery(); 94 q.add(q1, false, false); 95 q.add(q2, false, false); 96 q.add(q3, false, false); 97 q.add(q4, false, false); 98 99 Hits hits = is.search(q); 100 101 request.setAttribute("hits", "" + hits.length()); 102 ArrayList results = new ArrayList (); 103 104 for (int i = 0; i < hits.length(); i++) { 105 Document doc = hits.doc(i); 106 LuceneSearchResult result = new LuceneSearchResult(doc.get("title"), doc 107 .get("permalink"), doc.get("author"), doc.get("createTime")); 108 results.add(result); 109 } 110 111 request.setAttribute("results", results); 112 113 } catch (Throwable t) { 114 request.setAttribute("hits", "0"); 115 request.setAttribute("results", Collections.EMPTY_LIST); 116 } 117 118 request.setAttribute("query", query); 119 120 return SEARCH_FORWARD; 121 122 } 123 124 } | Popular Tags |