关于lucene全文搜索引擎
jsp吧
全部回复
仅看楼主
level 1
花缘梦 楼主
我现在正在学怎么样在网站中加入全文搜索引擎,等学会了给大家共享啊!!
2007年03月09日 00点03分 1
level 1
花缘梦 楼主
//2007 年 3月 15日package com.ecenter.lucene;import java.io.IOException;import java.util.Calendar;import java.util.Date;import java.util.List;import org.apache.lucene.document.Document;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.index.Term;import org.apache.lucene.queryParser.ParseException;import org.apache.lucene.queryParser.QueryParser;import org.apache.lucene.search.BooleanClause;import org.apache.lucene.search.BooleanQuery;import org.apache.lucene.search.Hits;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;import org.apache.lucene.search.RangeQuery;import org.apache.lucene.search.Searcher;import org.apache.lucene.search.Sort;import org.apache.lucene.search.TermQuery;import org.apache.lucene.search.highlight.Fragmenter;import org.apache.lucene.search.highlight.Highlighter;import org.apache.lucene.search.highlight.QueryScorer;import org.apache.lucene.search.highlight.SimpleFragmenter;import org.apache.lucene.search.highlight.SimpleHTMLFormatter;import com.ecenter.lucene.LuceneProperties;public class SearcchController extends HttpServlet {public String pagrurl = "";// 分页字符串public String searchTime = "";// 搜索时间private String searchWord;private String title;private String catagory;private String content;private String p_time;private String s_time;private String curretpage = "";// 当前页是多少private String choicename = "";// 选择是按照标题还是内容来搜索private String currgroup = "";Highlighter highlighter = null;public void doPost(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException {// 这里处理得到的搜索条件// 得到今天的时间searchWord = request.getParameter("keyword");curretpage = request.getParameter("currpage");currgroup = request.getParameter("currgroup");if (curretpage == null || curretpage.equals("")) {curretpage = "1";}if (currgroup != null || currgroup.equals("")) {currgroup = "1";}searchWord = new String(searchWord.getBytes("ISO8859-1"), "GBK").trim();searchWord = StringUtil.escapeString(searchWord);searchWord = StringUtil.escapeHTML(searchWord);System.out.print(searchWord);choicename = request.getParameter("choicename").trim();catagory = request.getParameter("catagory").trim();p_time = request.getParameter("p_time");Query que = null;QueryParser qp = null;qp = new QueryParser(choicename, new StandardAnalyzer());pagrurl = "search?keyword=" + searchWord + "&choicename=" + choicename+ "&catagory=" + catagory + "&p_time=" + p_time;try {BooleanQuery bool = new BooleanQuery();Query query = qp.parse(searchWord);BooleanClause booleanclause = new BooleanClause(query,
2007年03月16日 09点03分 2
level 1
花缘梦 楼主
BooleanClause.Occur.MUST);bool.add(booleanclause);if (catagory != null && !catagory.equals("")) {que = new TermQuery(new Term("catagory", catagory));BooleanClause catagoryclause = new BooleanClause(que,BooleanClause.Occur.MUST);bool.add(catagoryclause);}if (p_time.equals("0")) {} else {// 这里加入时间范围的分析Date dt = new Date();Calendar a = Calendar.getInstance();java.text.DateFormat df1 = new java.text.SimpleDateFormat("yyyy-MM-dd");String time1 = df1.format(dt);dataUtil du = new dataUtil(a);if (p_time.equals("1")) {s_time = du.getbeforeDay(7);} else if (p_time.equals("2")) {s_time = du.getbeforemonth(1);} else if (p_time.equals("3")) {s_time = du.getbeforeyear(1);}RangeQuery rquery = new RangeQuery(new Term("p_time", s_time),new Term("p_time", time1), true);BooleanClause timegoryclause = new BooleanClause(rquery,BooleanClause.Occur.MUST);bool.add(timegoryclause);}// 这个地方加入时间的范围判断Searcher searcher = new IndexSearcher(LuceneProperties.getValue("lucene.htmlindex"));Date start = new Date();Hits hits = searcher.search(bool, new Sort("p_time", true));Date end = new Date();Long counttime = end.getTime() - start.getTime();// 搜索总时间setHighter(bool);String st = counttime.toString();SearResult searresult = new SearResult();if (hits.length() == 0) {RequestDispatcher dispatcher = request.getRequestDispatcher("/unibit/search.jsp");request.setAttribute("searchResult", "对不起,没有您查询的结果!");dispatcher.forward(request, response);} else {Document doc = hits.doc(0);int curg = new Integer(currgroup).intValue();List ls = searresult.getResult(hits, curretpage, pagrurl, curg,getHighter());String urlPage = searresult.getPageinfo();RequestDispatcher dispatcher = request.getRequestDispatcher("/unibit/search.jsp");request.setAttribute("searchResult", ls);request.setAttribute("urlPage", urlPage);request.setAttribute("counttime", st);request.setAttribute("sword", searchWord);dispatcher.forward(request, response);}} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}// System.out.println(searchWord);}private void setHighter(BooleanQuery bool) {Fragmenter frament = new SimpleFragmenter(50);SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("
", "");highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(bool));highlighter.setTextFragmenter(frament);}public Highlighter getHighter() {return this.highlighter;}public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException {doPost(request, response);}}
2007年03月16日 09点03分 3
level 1
花缘梦 楼主
竟然没有人回! 太可惜了!
2007年03月20日 06点03分 4
level 0
呵呵 顶
2007年04月20日 09点04分 5
level 1
07 年就写这个啦,,,,,,,牛b
2013年02月23日 12点02分 6
level 13
我擦,老帖,不过还是支持一下。。。
2013年02月23日 16点02分 7
level 9
挖坟啊、、、[啊!]
2013年02月24日 10点02分 8
level 1
感觉蛮有用的~~~谢啦~~待我试过再来[乖]
2014年12月21日 16点12分 9
1