search.jsp revision 7cbf6a20cb1925bd734d2c6664ba739e6e82c8e3
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteCDDL HEADER START
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteThe contents of this file are subject to the terms of the
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteCommon Development and Distribution License (the "License").
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteYou may not use this file except in compliance with the License.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteSee LICENSE.txt included in this distribution for the specific
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Fortelanguage governing permissions and limitations under the License.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteWhen distributing Covered Code, include this CDDL HEADER in each
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Fortefile and include the License file at LICENSE.txt.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteIf applicable, add the following below this CDDL HEADER, with the
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Fortefields enclosed by brackets "[]" replaced with your own identifying
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteinformation: Portions Copyright [yyyy] [name of copyright owner]
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteCDDL HEADER END
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteCopyright 2005 Sun Microsystems, Inc. All rights reserved.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteUse is subject to license terms.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteident "%Z%%M% %I% %E% SMI"
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte--%><%@ page import = "javax.servlet.*,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte%><%@ page session="false" %><%@ page errorPage="error.jsp" %><%
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteDate starttime = new Date();
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteString defs = request.getParameter("defs");
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteString refs = request.getParameter("refs");
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteString hist = request.getParameter("hist");
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteString path = request.getParameter("path");
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte<%@ include file="projects.jspf" %>
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn ForteString sort = null;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Fortefinal String LASTMODTIME = "lastmodtime";
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Fortefinal String RELEVANCY = "relevancy";
Cookie[] cookies = request.getCookies();
sort = cookie.getValue();
String sortParam = request.getParameter("sort");
if (LASTMODTIME.equals(sortParam)) {
} else if (RELEVANCY.equals(sortParam)) {
Cookie cookie = new Cookie("OpenGrok/sorting", sort);
response.addCookie(cookie);
if( q!= null && q.equals("")) q = null;
if( defs != null && defs.equals("")) defs = null;
if( refs != null && refs.equals("")) refs = null;
if( hist != null && hist.equals("")) hist = null;
if( path != null && path.equals("")) path = null;
if (project != null && project.equals("")) project = null;
Searcher searcher = null; //the searcher used to open/search the index
IndexReader ireader = null; //the reader used to open/search the index
int thispage = 0; //used for the for/next either max or
String DATA_ROOT = env.getDataRootPath();
if(DATA_ROOT.equals("")) {
throw new Exception("DATA_ROOT parameter is not configured in web.xml!");
if(!data_root.isDirectory()) {
throw new Exception("DATA_ROOT parameter in web.xml does not exist or is not a directory!");
ireader = IndexReader.open(DATA_ROOT + "/index");
//String date = request.getParameter("date");
sb.append(q);
sb.append(" defs:(");
sb.append(defs);
sb.append(")");
sb.append(" refs:(");
sb.append(refs);
sb.append(")");
sb.append(" path:(");
sb.append(path);
sb.append(")");
sb.append(" hist:(");
sb.append(hist);
sb.append(")");
sb.append(" (");
for (String s : project.split(" ")) {
sb.append(" OR ");
sb.append("project:(");
sb.append(s);
sb.append(")");
sb.append(")");
qstr = sb.toString();
query = qparser.parse(qstr); //parse the
hits = searcher.search(query, new Sort("date", true));
hits = searcher.search(query);
} catch (BooleanQuery.TooManyClauses e) {
if (hits != null && hits.length() == 1 && request.getServletPath().equals("/s") && (query != null && query instanceof TermQuery)) {
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<table border="0" width="100%"><tr><td><a href="<%=context%>" id="home">Home</a></td><td align="right"><%
StringBuffer url = request.getRequestURL();
url.append('?');
String querys = request.getQueryString();
int idx = querys.indexOf("sort=");
url.append(querys);
url.append('&');
url.append("sort=");
if (sort == null || RELEVANCY.equals(sort)) {
url.append(LASTMODTIME);
%><b>Sort by relevance</b> <a href="<%=url.toString()%>">Sort by last modified time</a><%
url.append(RELEVANCY);
%><a href="<%=url.toString()%>">Sort by relevance</a> <b>Sort by last modified time</b><%
<%@ include file="menu.jspf"%>
} else if (hits.length() == 0) {
File spellIndex = new File(env.getDataRootPath(), "spellIndex");
if (spellIndex.exists()) {
FSDirectory spellDirectory = FSDirectory.getDirectory(spellIndex);
toks = q.split("[\t ]+");
for(int j=0; j<toks.length; j++) {
String[] ret = checker.suggestSimilar(toks[j].toLowerCase(), 3);
for(int i = 0;i < ret.length; i++) {
toks = refs.split("[\t ]+");
for(int j=0; j<toks.length; j++) {
String[] ret = checker.suggestSimilar(toks[j].toLowerCase(), 3);
for(int i = 0;i < ret.length; i++) {
toks = defs.split("[\t ]+");
for(int j=0; j<toks.length; j++) {
String[] ret = checker.suggestSimilar(toks[j].toLowerCase(), 3);
for(int i = 0;i < ret.length; i++) {
%><p> Your search <b><%=query.toString()%></b> did not match any files.
if ( max < hits.length()) {
if((start + max) < hits.length()) {
thispage = hits.length() - start;
String url = (q == null ? "" : "&q=" + Util.URIEncode(q) ) +
(defs == null ? "" : "&defs=" + Util.URIEncode(defs)) +
(refs == null ? "" : "&refs=" + Util.URIEncode(refs)) +
(path == null ? "" : "&path=" + Util.URIEncode(path)) +
(hist == null ? "" : "&hist=" + Util.URIEncode(hist)) +
(sort == null ? "" : "&sort=" + Util.URIEncode(sort));
labelStart = sstart/max + 1;
for(int i=sstart; i<hits.length() && label <= labelEnd; i+= max) {
slider.append("<span class=\"sel\">" + label + "</span>");
} else if(label == labelEnd && i < hits.length()) {
arr = label < 10 ? " " + label : String.valueOf(label);
slider.append("<a class=\"more\" href=\"search?n=" + max + "&start=" + i + url + "\">"+
thispage = hits.length() - start; // set the max index to max or last
%> Searched <b><%=query.toString()%></b> (Results <b><%=start+1%> -
<%=thispage+start%></b> of <b><%=hits.length()%></b>) sorted by <%=sort%> <p><%=slider != null ?
slider.toString(): ""%></p>
Results.prettyPrintHTML(hits, start, start+thispage,
ef.close();
<b> Completed in <%=(new Date()).getTime() - starttime.getTime()%> milliseconds </b> <br/>
%><br/></div><%@include file="foot.jspf"%><%