mirror of https://github.com/apache/lucene.git
Bugzilla #20081 - added Bryan LaPlante's patch
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@150889 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
36893fb9a6
commit
f3858ea831
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* Created on May 18, 2003
|
||||
*
|
||||
*/
|
||||
package com.netwebapps.taglib.search;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import javax.servlet.jsp.JspException;
|
||||
import javax.servlet.jsp.tagext.TagSupport;
|
||||
;
|
||||
|
||||
/**
|
||||
* @author blaplante
|
||||
*
|
||||
*/
|
||||
public class CollectionTag extends TagSupport{
|
||||
String directory = "";
|
||||
/* (non-Javadoc)
|
||||
* @see javax.servlet.jsp.tagext.Tag#doStartTag()
|
||||
*/
|
||||
public int doStartTag() throws JspException {
|
||||
Object parent = getParent();
|
||||
if(parent != null){
|
||||
try{
|
||||
Method call = parent.getClass().getMethod("addCollection", new Class[] {Class.forName("java.lang.String")});
|
||||
call.invoke(parent, new String[] {directory});
|
||||
}
|
||||
catch(Exception e){
|
||||
throw new JspException("An error occured while trying to add a new collection path: " + e.getCause());
|
||||
}
|
||||
}
|
||||
return SKIP_BODY;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see javax.servlet.jsp.tagext.Tag#release()
|
||||
*/
|
||||
public void release() {
|
||||
directory = null;
|
||||
}
|
||||
/**
|
||||
* @param string
|
||||
*/
|
||||
public void setDirectory(String dir) {
|
||||
this.directory = dir;
|
||||
}
|
||||
|
||||
}
|
|
@ -5,6 +5,7 @@ import javax.servlet.jsp.*;
|
|||
import javax.servlet.jsp.tagext.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.io.*;
|
||||
|
||||
import org.apache.lucene.analysis.*;
|
||||
import org.apache.lucene.document.*;
|
||||
import org.apache.lucene.index.*;
|
||||
|
@ -29,26 +30,34 @@ public class SearchTag extends BodyTagSupport{
|
|||
private String criteria = "";
|
||||
private Iterator searchItr = null;
|
||||
private Enumeration fields = null;
|
||||
private HashMap aField = null;
|
||||
private HashMap aField = new HashMap();
|
||||
private int ROWCOUNT = 0;
|
||||
private int PAGECOUNT = 1;
|
||||
private int HITCOUNT = 0;
|
||||
private boolean abort = false;
|
||||
private Analyzer analyzer = null;
|
||||
|
||||
public int startRow = 0;
|
||||
public int maxRows = 50;
|
||||
public String rowCount = "";
|
||||
public String rowCount = "0";
|
||||
public String pageCount = "1";
|
||||
public String hitCount = "";
|
||||
public String hitCount = "0";
|
||||
public String firstPage = "";
|
||||
public String nextPage = "";
|
||||
public String previousPage = "";
|
||||
public String lastPage = "";
|
||||
public LinkedList pageList = null;
|
||||
public LinkedList pageList = new LinkedList();
|
||||
public boolean throwOnException = false;
|
||||
|
||||
|
||||
public int doStartTag() throws JspException{
|
||||
|
||||
doSearch();
|
||||
if(abort){
|
||||
rowCount = new Integer(startRow + ROWCOUNT).toString();
|
||||
pageContext.setAttribute(getId(),this,PageContext.PAGE_SCOPE);
|
||||
return SKIP_BODY;
|
||||
}
|
||||
searchItr = hitArray.iterator();
|
||||
if(searchItr.hasNext()){
|
||||
aField = (HashMap) searchItr.next();
|
||||
|
@ -60,6 +69,7 @@ public class SearchTag extends BodyTagSupport{
|
|||
}
|
||||
|
||||
public void doInitBody() throws JspException{
|
||||
if(!abort){
|
||||
doSearch();
|
||||
searchItr = hitArray.iterator();
|
||||
if(searchItr.hasNext()){
|
||||
|
@ -68,8 +78,16 @@ public class SearchTag extends BodyTagSupport{
|
|||
pageContext.setAttribute(getId(),this,PageContext.PAGE_SCOPE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int doAfterBody() throws JspException{
|
||||
|
||||
if(abort){
|
||||
rowCount = new Integer(startRow + ROWCOUNT).toString();
|
||||
pageContext.setAttribute(getId(),this,PageContext.PAGE_SCOPE);
|
||||
return SKIP_BODY;
|
||||
}
|
||||
|
||||
try{
|
||||
getBodyContent().writeOut(getPreviousOut());
|
||||
getBodyContent().clearBody();
|
||||
|
@ -88,6 +106,11 @@ public class SearchTag extends BodyTagSupport{
|
|||
}
|
||||
|
||||
public int doEndTag() throws JspException{
|
||||
|
||||
if(abort){
|
||||
return EVAL_PAGE;
|
||||
}
|
||||
|
||||
try{
|
||||
HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
|
||||
String relativePath = req.getRequestURI();
|
||||
|
@ -124,19 +147,41 @@ public class SearchTag extends BodyTagSupport{
|
|||
}
|
||||
|
||||
public Set getFields(){
|
||||
if(aField != null){
|
||||
return aField.keySet();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void doSearch() throws JspException{
|
||||
|
||||
try {
|
||||
searcher = new IndexSearcher(IndexReader.open(collection));
|
||||
Analyzer analyzer = new StopAnalyzer();
|
||||
} catch (IOException e) {
|
||||
if(throwOnException){
|
||||
throw new JspException("IndexSearcher(IndexReader.open(collection)): " + e);
|
||||
}
|
||||
abort = true;
|
||||
}
|
||||
if(!abort){
|
||||
analyzer = new StopAnalyzer();
|
||||
|
||||
try {
|
||||
query = QueryParser.parse(criteria, "contents", analyzer);
|
||||
} catch (ParseException e) {
|
||||
if(throwOnException){
|
||||
throw new JspException("QueryParser.parse(criteria,contents,analyzer): " + e);
|
||||
}
|
||||
abort = true;
|
||||
}
|
||||
if(!abort){
|
||||
try {
|
||||
hits = searcher.search(query);
|
||||
} catch (IOException e) {
|
||||
if(throwOnException){
|
||||
throw new JspException("searcher.search(query): " + e);
|
||||
}
|
||||
abort = true;
|
||||
}
|
||||
|
||||
if(!abort){
|
||||
hitCount = new Integer(hits.length()).toString();
|
||||
HITCOUNT = hits.length();
|
||||
PAGECOUNT = PAGECOUNT = (int) (( (double) startRow) / maxRows );
|
||||
|
@ -148,8 +193,25 @@ public class SearchTag extends BodyTagSupport{
|
|||
hitArray = new ArrayList();
|
||||
for (int i = startRow; i < (thispage + startRow); i++) {
|
||||
hitMap = new HashMap();
|
||||
Document doc = hits.doc(i);
|
||||
Document doc = null;
|
||||
try {
|
||||
doc = hits.doc(i);
|
||||
} catch (IOException e) {
|
||||
if(throwOnException){
|
||||
throw new JspException("hits.doc(i) : " + e);
|
||||
}
|
||||
abort = true;
|
||||
}
|
||||
if(!abort){
|
||||
try {
|
||||
hitMap.put("score",new Float(hits.score(i)).toString());
|
||||
} catch (IOException e) {
|
||||
if(throwOnException){
|
||||
throw new JspException("hitMap.put(score,new Float(hits.score(i)).toString()); : " + e);
|
||||
}
|
||||
abort = true;
|
||||
}
|
||||
if(!abort){
|
||||
fields = doc.fields();
|
||||
while(fields.hasMoreElements()){
|
||||
Field field = (Field) fields.nextElement();
|
||||
|
@ -159,12 +221,9 @@ public class SearchTag extends BodyTagSupport{
|
|||
hitArray.add(hitMap);
|
||||
}
|
||||
}
|
||||
catch (Exception e){
|
||||
throw new JspException("An error occurred while parsing the index : " + e.toString());
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw new JspException("An error occurred while trying to open the search index: " + e.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -206,6 +265,10 @@ public class SearchTag extends BodyTagSupport{
|
|||
this.collection = collection;
|
||||
}
|
||||
|
||||
public void setThrowOnException(String bool){
|
||||
this.throwOnException = new Boolean(bool).booleanValue();
|
||||
}
|
||||
|
||||
/* getters */
|
||||
|
||||
public int getStartRow(){
|
||||
|
|
|
@ -22,6 +22,11 @@
|
|||
<required>true</required>
|
||||
<rtexprvalue>true</rtexprvalue>
|
||||
</attribute>
|
||||
<attribute>
|
||||
<name>throwOnException</name>
|
||||
<required>false</required>
|
||||
<rtexprvalue>true</rtexprvalue>
|
||||
</attribute>
|
||||
<attribute>
|
||||
<name>criteria</name>
|
||||
<required>true</required>
|
||||
|
@ -29,7 +34,7 @@
|
|||
</attribute>
|
||||
<attribute>
|
||||
<name>collection</name>
|
||||
<required>true</required>
|
||||
<required>false</required>
|
||||
<rtexprvalue>true</rtexprvalue>
|
||||
</attribute>
|
||||
<attribute>
|
||||
|
@ -43,4 +48,16 @@
|
|||
<rtexprvalue>true</rtexprvalue>
|
||||
</attribute>
|
||||
</tag>
|
||||
<tag>
|
||||
<name>Collection</name>
|
||||
<tagclass>com.netwebapps.taglib.search.CollectionTag</tagclass>
|
||||
<info>
|
||||
Adds an additional collection to the search tag.
|
||||
</info>
|
||||
<attribute>
|
||||
<name>directory</name>
|
||||
<required>true</required>
|
||||
<rtexprvalue>true</rtexprvalue>
|
||||
</attribute>
|
||||
</tag>
|
||||
</taglib>
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Hello World</title>
|
||||
</head>
|
||||
<body>
|
||||
Hello World
|
||||
</body>
|
||||
</html>
|
|
@ -1,3 +1,10 @@
|
|||
|
||||
<%
|
||||
response.setHeader("Pragma", "No-cache");
|
||||
response.setDateHeader("Expires", 0);
|
||||
response.setHeader("Cache-Control", "no-cache");
|
||||
response.setHeader("Cache-Control", "private");
|
||||
%>
|
||||
<%@include file="header.jsp"%>
|
||||
<% /* Author: Andrew C. Oliver (acoliver2@users.sourceforge.net) */ %>
|
||||
<center>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
|
||||
<%@ taglib uri="/WEB-INF/lucene-taglib.tld" prefix="JSP"%>
|
||||
<%@ include file="header.jsp"%>
|
||||
<%@ page import="java.util.*"%>
|
||||
|
@ -15,14 +14,16 @@
|
|||
catch(Exception e){
|
||||
}
|
||||
%>
|
||||
|
||||
<table border=3>
|
||||
|
||||
|
||||
<JSP:Search id="rs" collection="E:/opt/lucene/index" criteria="<%= query %>" startRow="<%= startRow %>" maxRows="<%= maxRows %>">
|
||||
<JSP:Search throwOnException="false" id="rs" collection="E:/opt/lucene/index" criteria="<%= query %>" startRow="<%= startRow %>" maxRows="<%= maxRows %>">
|
||||
<%
|
||||
|
||||
Set allFields = rs.getFields();
|
||||
int fieldSize = allFields.size();
|
||||
Iterator fieldIter = allFields.iterator();
|
||||
|
||||
while(fieldIter.hasNext()){
|
||||
String nextField = (String) fieldIter.next();
|
||||
if(!nextField.equalsIgnoreCase("summary")){
|
||||
|
@ -31,18 +32,25 @@
|
|||
<%
|
||||
}else{
|
||||
%>
|
||||
<tr><td colspan="2"><b><%= nextField %></b></td></tr>
|
||||
<tr><td colspan="2"><b><%= rs.hitCount %>|<%= nextField %></b></td></tr>
|
||||
<tr><td colspan="2"><%= rs.getField(nextField) %></td></tr>
|
||||
<%
|
||||
}
|
||||
}
|
||||
|
||||
%>
|
||||
</JSP:Search>
|
||||
<%
|
||||
if(new Integer(rs.hitCount).intValue() <= 0){
|
||||
int count = 0;
|
||||
try{
|
||||
count = new Integer(rs.hitCount).intValue();
|
||||
}catch(Exception e){
|
||||
out.print(e);
|
||||
}
|
||||
if(count <= 0){
|
||||
%>
|
||||
<tr>
|
||||
<td colspan=2>No results were found</td>
|
||||
<td colspan=2>No results have been found</td>
|
||||
</tr>
|
||||
<%
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue