search.jsp revision 151
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinCDDL HEADER START
932d8cdf9e85a610ad4391af5f0195ff9ed7d286rpluemThe contents of this file are subject to the terms of the
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinCommon Development and Distribution License (the "License").
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinYou may not use this file except in compliance with the License.
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinSee LICENSE.txt included in this distribution for the specific
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinlanguage governing permissions and limitations under the License.
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinWhen distributing Covered Code, include this CDDL HEADER in each
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinfile and include the License file at LICENSE.txt.
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinIf applicable, add the following below this CDDL HEADER, with the
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinfields enclosed by brackets "[]" replaced with your own identifying
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrininformation: Portions Copyright [yyyy] [name of copyright owner]
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinCDDL HEADER END
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinCopyright 2005 Sun Microsystems, Inc. All rights reserved.
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinUse is subject to license terms.
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinident "%Z%%M% %I% %E% SMI"
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrin--%><%@ page import = "javax.servlet.*,
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrin%><%@ page session="false" %><%@ page errorPage="error.jsp" %><%
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinDate starttime = new Date();
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinString q = request.getParameter("q");
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinString defs = request.getParameter("defs");
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinString refs = request.getParameter("refs");
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinString hist = request.getParameter("hist");
663cbde3169bcfadb51937e7c3af75307c5af91cniqString path = request.getParameter("path");
d84dc356814b255affe3abe2ad93ce17f98e632chumbedooh<%@ include file="projects.jspf" %>
d84dc356814b255affe3abe2ad93ce17f98e632chumbedoohString sort = null;
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinfinal String LASTMODTIME = "lastmodtime";
1a424cec18130f184e414d99445fa419fa6835e2minfrinfinal String RELEVANCY = "relevancy";
1a424cec18130f184e414d99445fa419fa6835e2minfrinCookie[] cookies = request.getCookies();
1a424cec18130f184e414d99445fa419fa6835e2minfrinif (cookies != null) {
1a424cec18130f184e414d99445fa419fa6835e2minfrin for (Cookie cookie : cookies) {
860b4efe27e7c1c9a2bf5c872b29c90f76849b51jim if (!LASTMODTIME.equals(sort) && !RELEVANCY.equals(sort)) {
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrin sort = null;
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinString sortParam = request.getParameter("sort");
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinif (sortParam != null) {
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrin if (LASTMODTIME.equals(sortParam)) {
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrin sort = LASTMODTIME;
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrin } else if (RELEVANCY.equals(sortParam)) {
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrin sort = RELEVANCY;
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrin if (sort != null) {
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrin Cookie cookie = new Cookie("OpenGrok/sorting", sort);
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinHits hits = null;
edaefb8bf78debc86ef7de441c7983d8b05517e1minfrinString errorMsg = null;
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)) {
File file = new File(hits.doc(0).get("path"));
String parent = file.getParent();
url.append("/xref");
url.append('/');
sb.append("#");
sb.append(((TermQuery)query).getTerm().text());;
RuntimeEnvironment environment = RuntimeEnvironment.getInstance();
%><%@ include file="httpheader.jspf" %>
<div id="header"><%@ include file="pageheader.jspf" %></div>
<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"%><%