search.jsp revision 97
bcda26cc21a8e84cadc73a08f1468b344c240727Peter Major<%--
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill CunningtonCDDL HEADER START
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill CunningtonThe contents of this file are subject to the terms of the
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill CunningtonCommon Development and Distribution License (the "License").
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill CunningtonYou may not use this file except in compliance with the License.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill CunningtonSee LICENSE.txt included in this distribution for the specific
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonlanguage governing permissions and limitations under the License.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill CunningtonWhen distributing Covered Code, include this CDDL HEADER in each
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonfile and include the License file at LICENSE.txt.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill CunningtonIf applicable, add the following below this CDDL HEADER, with the
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonfields enclosed by brackets "[]" replaced with your own identifying
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtoninformation: Portions Copyright [yyyy] [name of copyright owner]
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill CunningtonCDDL HEADER END
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill CunningtonCopyright 2005 Sun Microsystems, Inc. All rights reserved.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill CunningtonUse is subject to license terms.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonident "%Z%%M% %I% %E% SMI"
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington--%><%@ page import = "javax.servlet.*,
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonjava.lang.Integer,
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonjavax.servlet.http.*,
c83c89a37d75a9e4f1576952c931f520357552c5Quentin CASTELjava.util.Hashtable,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterjava.util.Vector,
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonjava.util.Date,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterjava.util.ArrayList,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterjava.util.List,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterjava.lang.*,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterjava.io.*,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterjava.io.StringReader,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterorg.opensolaris.opengrok.analysis.*,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterorg.opensolaris.opengrok.search.*,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterorg.opensolaris.opengrok.web.*,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterorg.opensolaris.opengrok.web.*,
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamfordorg.opensolaris.opengrok.search.context.*,
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamfordorg.opensolaris.opengrok.configuration.*,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterorg.apache.lucene.spell.*,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterorg.apache.lucene.analysis.*,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterorg.apache.lucene.document.*,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterorg.apache.lucene.index.*,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterorg.apache.lucene.search.*,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterorg.apache.lucene.queryParser.*"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster%><%@ page session="false" %><%@ page errorPage="error.jsp" %><%
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterDate starttime = new Date();
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterString q = request.getParameter("q");
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterString defs = request.getParameter("defs");
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterString refs = request.getParameter("refs");
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterString hist = request.getParameter("hist");
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterString path = request.getParameter("path");
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterString sort = request.getParameter("sort");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster%>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster<%@ include file="projects.jspf" %>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster<%
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterHits hits = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterString errorMsg = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterString context = request.getContextPath();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterif( q!= null && q.equals("")) q = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterif( defs != null && defs.equals("")) defs = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterif( refs != null && refs.equals("")) refs = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterif( hist != null && hist.equals("")) hist = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterif( path != null && path.equals("")) path = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterif( sort != null && sort.equals("")) sort = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterif (project != null && project.equals("")) project = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonif (q != null || defs != null || refs != null || hist != null || path != null) {
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamford Searcher searcher = null; //the searcher used to open/search the index
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna IndexReader ireader = null; //the reader used to open/search the index
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna Query query = null, defQuery = null; //the Query created by the QueryParser
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamford int start = 0; //the first index displayed on this page
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int max = 25; //the maximum items displayed on this page
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamford int thispage = 0; //used for the for/next either max or
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamford String moreUrl = null;
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamford CompatibleAnalyser analyzer = new CompatibleAnalyser();
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamford String qstr = "";
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamford String result = "";
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamford try {
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamford String DATA_ROOT = env.getDataRootPath();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(DATA_ROOT.equals("")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throw new Exception("DATA_ROOT parameter is not configured in web.xml!");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster File data_root = new File(DATA_ROOT);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(!data_root.isDirectory()) {
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major throw new Exception("DATA_ROOT parameter in web.xml does not exist or is not a directory!");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ireader = IndexReader.open(DATA_ROOT + "/index");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster searcher = new IndexSearcher(ireader);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster //String date = request.getParameter("date");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster start = Integer.parseInt(request.getParameter("start")); //parse the max results first
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster max = Integer.parseInt(request.getParameter("n")); //then the start index
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(max < 0 || (max % 10 != 0) || max > 50) max = 25;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(start < 0 ) start = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (Exception e) { }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster StringBuilder sb = new StringBuilder();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (q != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append(q);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (defs != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append(" defs:(");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append(defs);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append(")");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (refs != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append(" refs:(");
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major sb.append(refs);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append(")");
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna }
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna if (path != null) {
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna sb.append(" path:(");
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna sb.append(path);
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna sb.append(")");
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna }
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna if (hist != null) {
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna sb.append(" hist:(");
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna sb.append(hist);
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna sb.append(")");
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (project != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append(" (");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster boolean first = true;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (String s : project.split(" ")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (first) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster first = false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append(" OR ");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append("project:(");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append(s);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append(")");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append(")");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster qstr = sb.toString();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster QueryParser qparser = new QueryParser("full", analyzer);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster qparser.setOperator(QueryParser.DEFAULT_OPERATOR_AND);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster query = qparser.parse(qstr); //parse the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (sort == null || sort.equals("relevancy")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster hits = searcher.search(query);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster else if (sort.equals("lastmodtime")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster hits = searcher.search(query, new Sort("date", true));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster hits = searcher.search(query);
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major }
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major thispage = max;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (BooleanQuery.TooManyClauses e) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster errorMsg = "<b>Error:</b> Too many results for wildcard!";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (ParseException e) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster errorMsg = "<b>Error:</b><br/>" + Util.Htmlize(qstr) + "<br/>" + Util.Htmlize(e.getMessage());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (FileNotFoundException e) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster errorMsg = "<b>Error:</b> Index database not found";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (Exception e) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster errorMsg = "<b>Error:</b> " + Util.Htmlize(e.getMessage());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (hits != null && hits.length() == 1 && request.getServletPath().equals("/s")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (query != null && query instanceof TermQuery) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster response.sendRedirect(context + "/xref" + hits.doc(0).get("path")
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster + "#" + ((TermQuery)query).getTerm().text());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster response.sendRedirect(context + "/xref" + hits.doc(0).get("path"));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster %><?xml version="1.0" encoding="iso-8859-1"?>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster<head>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <meta name="robots" content="noindex,nofollow">
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <link rel="icon" href="img/icon.png" type="image/png"/>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <link rel="stylesheet" type="text/css" href="style.css"/>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <link rel="stylesheet" type="text/css" href="print.css" media="print" />
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <link rel="alternate stylesheet" type="text/css" media="all" title="Paper White" href="print.css"/>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <title>Search</title>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster</head>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster<body>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster<div id="page">
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <div id="header">
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <%= getServletContext().getInitParameter("HEADER") %>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster </div>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster<div id="Masthead"></div>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster<div id="bar">
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <%@ include file="menu.jspf"%>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster<!-- table cellpadding="0" cellspacing="0" border="0" width="100%">
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <tr>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <td valign="top"><br /> &nbsp;</td>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <td align="left" valign="middle">
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <br/><form action="search" name="sbox">
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <table cellpadding="2" border="0" cellspacing="0">
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <tr valign="top">
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <td>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <table cellpadding="2" border="0" cellspacing="0">
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <tr><td align="right"> Full&nbsp;Search </td><td><input class="q" name="q" size="45" style="width: 300px" value="<%=Util.formQuoteEscape(q)%>"/></td></tr>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <tr><td align="right"> Definition </td><td><input class="q" name="defs" size="25" style="width: 300px" value="<%=Util.formQuoteEscape(defs)%>"/></td></tr>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <tr><td align="right"> Symbol </td><td><input class="q" name="refs" size="25" style="width: 300px" value="<%=Util.formQuoteEscape(refs)%>"/></td></tr>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <tr><td align="right"> File&nbsp;Path </td><td><input class="q" name="path" size="25" style="width: 300px" value="<%=Util.formQuoteEscape(path)%>"/></td></tr>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <tr><td align="right"> History </td><td><input class="q" name="hist" size="25" style="width: 300px" value="<%=Util.formQuoteEscape(hist)%>"/></td></tr>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster<% if (sort == null || sort.equals("relevancy")) { %>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <tr><td align="right"> sort by </td><td><select class="q" name="sort"><option value="relevancy" selected>relevancy</option><option value="lastmodtime">last modified time</option></select></td></tr>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster<%
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster else if (sort.equals("lastmodtime")) { %>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <tr><td align="right"> sort by </td><td><select class="q" name="sort"><option value="relevancy">relevancy</option><option value="lastmodtime" selected>last modified time</option></select></td></tr>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster<%
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamford else { %>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <tr><td align="right"> sort by </td><td><select class="q" name="sort"><option value="relevancy" selected>relevancy</option><option value="lastmodtime">last modified time</option></select></td></tr>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster<%
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster%>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster </table>
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamford </td>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <% if (hasProjects) { %>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <td>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Project:<br>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <select class="q" name="project" size="6" multiple="true" style="width: 300px">
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <% for (Project p : env.getProjects()) {
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major %><option value="<%=Util.formQuoteEscape(p.getPath())%>"<%=p.getPath().equals(project) ? " selected" : ""%>><%=Util.formQuoteEscape(p.getDescription())%></option><%
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major } %>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster </select>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster </td>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <% } %>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster </tr>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <tr><td></td><td> &nbsp; <input class="submit" type="submit" value="Search"/> | <input class="submit"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster onClick="document.sbox.q.value='';document.sbox.defs.value='';document.sbox.refs.value='';document.sbox.path.value='';document.sbox.hist.value='';" type="button" value=" Clear "
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /> | <a href="help.html">Help</a></td></tr>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster </table></form>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster </td>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <td valign="top" align="right"></td></tr>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster</table -->
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster</div>
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major<div id="results">
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major<%
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterif( hits == null || errorMsg != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster %><%=errorMsg%><%
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (hits.length() == 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
6340439720654d76109888406a64026599d7142fSachiko Wallace String ngramIndex = env.getDataRootPath() + "/spellIndex";
6340439720654d76109888406a64026599d7142fSachiko Wallace if (ngramIndex != null && (new
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major File(ngramIndex+"/segments")).exists()) {
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major Date sstart = new Date();
6340439720654d76109888406a64026599d7142fSachiko Wallace IndexReader spellReader = IndexReader.open(ngramIndex);
6340439720654d76109888406a64026599d7142fSachiko Wallace IndexSearcher spellSearcher = new IndexSearcher(spellReader);
6340439720654d76109888406a64026599d7142fSachiko Wallace
6340439720654d76109888406a64026599d7142fSachiko Wallace %><p><font color="#cc0000">Did you mean</font>:<%
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] toks;
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamford if(q != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster toks = q.split("[\t ]+");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(toks != null){
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for(int j=0; j<toks.length; j++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(toks[j].length() > 3) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] ret = NGramSpeller.suggestUsingNGrams(spellSearcher,toks[j].toLowerCase(), 3, 4, 3, 5, 3, 2, 0, null, false);
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington for(int i = 0;i < ret.length; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster %> <a href=search?q=<%=ret[i]%>><%=ret[i]%></a> &nbsp; <%
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(refs != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster toks = refs.split("[\t ]+");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(toks != null){
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for(int j=0; j<toks.length; j++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(toks[j].length() > 3) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] ret = NGramSpeller.suggestUsingNGrams(spellSearcher,toks[j].toLowerCase(),3, 4, 3, 5, 3, 2, 0, null, false);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for(int i = 0;i < ret.length; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster %> <a href=search?q=<%=ret[i]%>><%=ret[i]%></a> &nbsp; <%
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major }
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(defs != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster toks = defs.split("[\t ]+");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(toks != null){
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for(int j=0; j<toks.length; j++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(toks[j].length() > 3) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] ret = NGramSpeller.suggestUsingNGrams(spellSearcher,toks[j].toLowerCase(),3, 4, 3, 5, 3, 2, 0, null, false);
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major for(int i = 0;i < ret.length; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster %> <a href=search?q=<%=ret[i]%>><%=ret[i]%></a> &nbsp; <%
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster spellSearcher.close();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster spellReader.close();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster %></p><%
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster %><p> Your search <b><%=query.toString()%></b> did not match any files.
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major <br />
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Suggestions:<br/><blockquote>- Make sure all terms are spelled correctly.<br/>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster - Try different keywords.<br/>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster - Try more general keywords.<br/>
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamford - Use 'wil*' cards if you are looking for partial match.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster </blockquote>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster </p><%
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else { // We have a lots of results to show
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major StringBuilder slider = null;
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major if ( max < hits.length()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if((start + max) < hits.length()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster thispage = max;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster thispage = hits.length() - start;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String url = (q == null ? "" : "&amp;q=" + Util.URIEncode(q) ) +
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major (defs == null ? "" : "&amp;defs=" + Util.URIEncode(defs)) +
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major (refs == null ? "" : "&amp;refs=" + Util.URIEncode(refs)) +
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster (path == null ? "" : "&amp;path=" + Util.URIEncode(path)) +
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster (hist == null ? "" : "&amp;hist=" + Util.URIEncode(hist)) +
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster (sort == null ? "" : "&amp;sort=" + Util.URIEncode(sort));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster slider = new StringBuilder();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int labelStart =1;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int sstart = start - max* (start / max % 10 + 1) ;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(sstart < 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sstart = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster labelStart = 1;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster labelStart = sstart/max + 1;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int label = labelStart;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int labelEnd = label + 11;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String arr;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for(int i=sstart; i<hits.length() && label <= labelEnd; i+= max) {
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major if (i <= start && start < i+ max) {
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major slider.append("<span class=\"sel\">" + label + "</span>");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(label == labelStart && label != 1) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster arr = "&lt;&lt";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if(label == labelEnd && i < hits.length()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster arr = "&gt;&gt;";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster arr = label < 10 ? " " + label : String.valueOf(label);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster slider.append("<a class=\"more\" href=\"search?n=" + max + "&amp;start=" + i + url + "\">"+
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster arr + "</a>");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster label++;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster thispage = hits.length() - start; // set the max index to max or last
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster %>&nbsp; &nbsp; Searched <b><%=query.toString()%></b> (Results <b><%=start+1%> -
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <%=thispage+start%></b> of <b><%=hits.length()%></b>) sorted by <%=sort%> <p><%=slider != null ?
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster slider.toString(): ""%></p>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <table width="100%" cellpadding="3" cellspacing="0" border="0"><%
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Context sourceContext = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Summarizer summer = null;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington if (query != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try{
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sourceContext = new Context(query);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(sourceContext != null)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster summer = new Summarizer(query, analyzer);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (Exception e) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster HistoryContext historyContext = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster historyContext = new HistoryContext(query);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (Exception e) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster EftarFileReader ef = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try{
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ef = new EftarFileReader(env.getDataRootPath() + "/index/dtags.eftar");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (Exception e) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Results.prettyPrintHTML(hits, start, start+thispage,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster out,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sourceContext, historyContext, summer,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster context + "/xref",
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster context + "/more",
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster env.getSourceRootPath(),
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster env.getDataRootPath(),
ecb73e63056eb80738d8460818f1a742f515de1cPeter Major ef);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(ef != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try{
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ef.close();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (IOException e) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster %></table><br/>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <b> Completed in <%=(new Date()).getTime() - starttime.getTime()%> milliseconds </b> <br/>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster <%=slider != null ? "<p>" + slider + "</p>" : ""%>
5314bbbc73e908a2aa4073bf86be752ffe5baa53David Luna <%
5314bbbc73e908a2aa4073bf86be752ffe5baa53David Luna }
5314bbbc73e908a2aa4073bf86be752ffe5baa53David Luna %><br/></div><%@include file="foot.jspf"%><%
5314bbbc73e908a2aa4073bf86be752ffe5baa53David Luna }
c42550c0e86e2c3f821f5e754ea8ba52d8bb5427Tony Bamford if (ireader != null)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ireader.close();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster} else { // Entry page show the map
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster response.sendRedirect(context + "/index.jsp");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster%>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster