search.jsp

来自「Lucene+nuctch一书的全部源码 测试源码 和几个简单的项目」· JSP 代码 · 共 264 行

JSP
264
字号
<%@ page 
  session="false"
  contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"
  import="java.io.*"
  import="java.util.*"
  import="java.net.*"
  import="org.apache.nutch.html.Entities"
  import="org.apache.nutch.metadata.Nutch"
  import="org.apache.nutch.searcher.*"
  import="org.apache.nutch.plugin.*"
  import="org.apache.nutch.clustering.*"
  import="org.apache.hadoop.conf.*"
  import="org.apache.nutch.util.NutchConfiguration"
%>
<% Configuration nutchConf = NutchConfiguration.get(application);
  // 结果或者聚类的数量
 int HITS_TO_CLUSTER = nutchConf.getInt("extension.clustering.hits-to-cluster", 100);
  OnlineClusterer clusterer = null; // 聚类扩展
  try {
    clusterer = new OnlineClustererFactory(nutchConf).getOnlineClusterer();
  } catch (PluginRuntimeException e) {
  }
%>
<%--
<%@ include file="./refine-query-init.jsp" %>
--%>
<%
  NutchBean bean = NutchBean.get(application, nutchConf);
  request.setCharacterEncoding("UTF-8");           // 设定字符集
  bean.LOG.info("query request from " + request.getRemoteAddr());
  String queryString = request.getParameter("query");  // 根据输入构造查询参数
  if (queryString == null)
    queryString = "";
  String htmlQueryString = Entities.encode(queryString);
  boolean clusteringAvailable = (clusterer != null);
  String clustering = "";
  if (clusteringAvailable && "yes".equals(request.getParameter("clustering")))
    clustering = "yes";
  int start = 0;                  // 最先匹配结果
  String startString = request.getParameter("start");
  if (startString != null)
    start = Integer.parseInt(startString);
  int hitsPerPage = 10;          // 每页显示数量
  String hitsString = request.getParameter("hitsPerPage");
  if (hitsString != null)
    hitsPerPage = Integer.parseInt(hitsString);
  int hitsPerSite = 2;           // 每网站每页最大匹配数
  String hitsPerSiteString = request.getParameter("hitsPerSite");
  if (hitsPerSiteString != null)
    hitsPerSite = Integer.parseInt(hitsPerSiteString);
  String sort = request.getParameter("sort");
  boolean reverse =
    sort!=null && "true".equals(request.getParameter("reverse"));
  String params = "&hitsPerPage="+hitsPerPage
     +(sort==null ? "" : "&sort="+sort+(reverse?"&reverse=true":""));

  int hitsToCluster = HITS_TO_CLUSTER;            // 结果集中用于聚类的个数
  String queryLang = request.getParameter("lang");      // 提取请求中的lang参数
  if (queryLang == null) { queryLang = ""; } 
  Query query = Query.parse(queryString, queryLang, nutchConf);
  bean.LOG.info("query: " + queryString);
  bean.LOG.info("lang: " + queryLang);
  String language =
    ResourceBundle.getBundle("org.nutch.jsp.search", request.getLocale())
    .getLocale().getLanguage();
  String requestURI = HttpUtils.getRequestURL(request).toString();
  String base = requestURI.substring(0, requestURI.lastIndexOf('/'));
  String rss = "../opensearch?query="+htmlQueryString
    +"&hitsPerSite="+hitsPerSite+"&lang="+queryLang+params;
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
  out.flush();
%>
<%@ taglib uri="http://jakarta.apache.org/taglibs/i18n" prefix="i18n" %>
<i18n:bundle baseName="org.nutch.jsp.search"/>
<html lang="<%= language %>">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<head>
<title>Nutch: <i18n:message key="title"/></title>
<link rel="icon" href="img/favicon.ico" type="image/x-icon"/>
<link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon"/>
<link rel="alternate" type="application/rss+xml" title="RSS" href="<%=rss%>"/>
<jsp:include page="include/style.html"/>
<base href="<%= base  + "/" + language %>/">
<script type="text/javascript">
</script>
</head>
<body onLoad="queryfocus();">
<jsp:include page="<%= language + "/include/header.html"%>"/>
<form name="search" action="../search.jsp" method="get">
 <input name="query" size=44 value="<%=htmlQueryString%>">
 <input type="hidden" name="hitsPerPage" value="<%=hitsPerPage%>">
 <input type="hidden" name="lang" value="<%=language%>">
 <input type="submit" value="<i18n:message key="search"/>">
 <% if (clusteringAvailable) { %>
   <input id="clustbox" type="checkbox" name="clustering" value="yes" 
<% if (clustering.equals("yes")) { %>CHECKED<% } %>>
    <label for="clustbox"><i18n:message key="clustering"/></label>
 <% } %>
 <a href="help.html">help</a>
 </form>
<%--
<%@ include file="./refine-query.jsp" %>
--%>
<%
   int hitsToRetrieve = (clusteringAvailable && clustering.equals("yes") ? hitsToCluster : hitsPerPage);
   if (clusteringAvailable && clustering.equals("yes")) {
     bean.LOG.info("Clustering is on, hits to retrieve: " + hitsToRetrieve);
   }
   Hits hits;
   try{
     hits = bean.search(query, start + hitsToRetrieve, hitsPerSite, "site",
                        sort, reverse);
   } catch (IOException e){
     hits = new Hits(0,new Hit[0]);	
   }
   int end = (int)Math.min(hits.getLength(), start + hitsPerPage);
   int length = end-start;
   int realEnd = (int)Math.min(hits.getLength(), start + hitsToRetrieve);
   Hit[] show = hits.getHits(start, realEnd-start);
   HitDetails[] details = bean.getDetails(show);
   Summary[] summaries = bean.getSummary(details, query);
   bean.LOG.info("total hits: " + hits.getTotal());
%>
<i18n:message key="hits">
  <i18n:messageArg value="<%=new Long((end==0)?0:(start+1))%>"/>
  <i18n:messageArg value="<%=new Long(end)%>"/>
  <i18n:messageArg value="<%=new Long(hits.getTotal())%>"/>
</i18n:message>
<%
out.flush();
%>
<br><br>
<% if (clustering.equals("yes") && length != 0) { %>
<table border=0 cellspacing="3" cellpadding="0">
<tr>
<td valign="top">
<% } %>
<%
  for (int i = 0; i < length; i++) {      // display the hits
    Hit hit = show[i];
    HitDetails detail = details[i];
    String title = detail.getValue("title");
    String url = detail.getValue("url");
    String id = "idx=" + hit.getIndexNo() + "&id=" + hit.getIndexDocNo();
    String summary = summaries[i].toHtml(true);
    String caching = detail.getValue("cache");
    boolean showSummary = true;
    boolean showCached = true;
    if (caching != null) {
      showSummary = !caching.equals(Nutch.CACHING_FORBIDDEN_ALL);
      showCached = !caching.equals(Nutch.CACHING_FORBIDDEN_NONE);
    }
    if (title == null || title.equals("")) {      // use url for docs w/o title
      title = url;
    }
    %>
    <b><a href="<%=url%>"><%=Entities.encode(title)%></a></b>
    <%@ include file="more.jsp" %>
    <% if (!"".equals(summary) && showSummary) { %>
    <br><%=summary%>
    <% } %>
    <br>
    <span class="url"><%=Entities.encode(url)%></span>
    <%
      if (showCached) {
        %>(<a href="../cached.jsp?<%=id%>"><i18n:message key="cached"/></a>) <%
    }
    %>
    (<a href="../explain.jsp?<%=id%>&query=<%=URLEncoder.encode(queryString, "UTF-8")%>&lang=<%=queryLang%>"><i18n:message key="explain"/></a>)
    (<a href="../anchors.jsp?<%=id%>"><i18n:message key="anchors"/></a>)
    <% if (hit.moreFromDupExcluded()) {
    String more =
    "query="+URLEncoder.encode("site:"+hit.getDedupValue()+" "+queryString, "UTF8")
    +params+"&hitsPerSite="+0
    +"&lang="+queryLang
    +"&clustering="+clustering;%>
    (<a href="../search.jsp?<%=more%>"><i18n:message key="moreFrom"/>
     <%=hit.getDedupValue()%></a>)
    <% } %>
    <br><br>
<% } %>
<% if (clustering.equals("yes") && length != 0) { %>
</td>
<!-- clusters -->
<td style="border-right: 1px dotted gray;" />&#160;</td>
<td align="left" valign="top" width="25%">
<%@ include file="cluster.jsp" %>
</td>
</tr>
</table>
<% } %>
<table align="center">
<tr>
<td>
    <%
        if (start >= hitsPerPage)   // 显示后续结果页面,向前翻页
        {                           // 准备参数
    %>
    <form name="pre" action="../search.jsp" method="get">  
        <input type="hidden" name="query" value="<%=htmlQueryString%>">
        <input type="hidden" name="lang" value="<%=queryLang%>">
        <input type="hidden" name="start" value="<%=start - hitsPerPage%>">
        <input type="hidden" name="hitsPerPage" value="<%=hitsPerPage%>">
        <input type="hidden" name="hitsPerSite" value="<%=hitsPerSite%>">
        <input type="hidden" name="clustering" value="<%=clustering%>">
        <input type="submit" value="prev">
        <%} %>
    </form>
    <%
    int startnum=1;                  // 设置起始页面编号,每屏共10页
    if((int)(start/hitsPerPage)>=5)  // 计算起始页面编号新编号
        startnum=(int)(start/hitsPerPage)-4;
    for(int i=hitsPerPage*(startnum-1),j=0;i<=hits.getTotal()&&j<=10;)
    {                                // 循环构造翻页访问地址
     %>
     <td>
     <form name="next" action="../search.jsp" method="get">
        <input type="hidden" name="query" value="<%=htmlQueryString%>">
        <input type="hidden" name="lang" value="<%=queryLang%>">
        <input type="hidden" name="start" value="<%=i%>">
        <input type="hidden" name="hitsPerPage" value="<%=hitsPerPage%>">
        <input type="hidden" name="hitsPerSite" value="<%=hitsPerSite%>">
        <input type="hidden" name="clustering" value="<%=clustering%>">
        <a href="../search.jsp?query=<%=URLEncoder.encode(queryString, "UTF-8")%>&lang=zh&start=<%=i%>&hitsPerPage=<%=hitsPerPage%>&hitsPerSite=<%=hitsPerSite%>&&clustering="> <%=i/hitsPerPage + 1 %>
    </form>
    </td>
    <%
    i=i+10;
    j++;
    }
     %>
<td>
    <%
if ((hits.totalIsExact() && end < hits.getTotal()) // 向后翻页
                || (!hits.totalIsExact() && (hits.getLength() > start + hitsPerPage))) {  // 
    %>
    
    <form name="next" action="../search.jsp" method="get">
        <input type="hidden" name="query" value="<%=htmlQueryString%>">
        <input type="hidden" name="lang" value="<%=queryLang%>">
        <input type="hidden" name="start" value="<%=end%>">
        <input type="hidden" name="hitsPerPage" value="<%=hitsPerPage%>">
        <input type="hidden" name="hitsPerSite" value="<%=hitsPerSite%>">
        <input type="hidden" name="clustering" value="<%=clustering%>">
        <input type="submit" value="<i18n:message key="next"/>">
    </form>
    <%} %>
    </td>
  </tr>
    </table>
<table bgcolor="3333ff" align="right">
<tr><td bgcolor="ff9900"><a href="<%=rss%>"><font color="ffffff"><b>RSS</b>
</font></a></td></tr>
</table>
<p>
<a href="http://wiki.apache.org/nutch/FAQ">
<img border="0" src="../img/poweredbynutch_01.gif">
</a>
<jsp:include page="/include/footer.html"/>
</body>
</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?