You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by an...@apache.org on 2004/11/17 03:19:16 UTC
svn commit: rev 76097 - in cocoon/trunk: . src/blocks/lucene/java/org/apache/cocoon/components/search src/blocks/lucene/java/org/apache/cocoon/generation
Author: antonio
Date: Tue Nov 16 18:19:12 2004
New Revision: 76097
Modified:
cocoon/trunk/src/blocks/lucene/java/org/apache/cocoon/components/search/LuceneCocoonPager.java
cocoon/trunk/src/blocks/lucene/java/org/apache/cocoon/generation/SearchGenerator.java
cocoon/trunk/status.xml
Log:
Fix bug #23118: Lucene SearchGenerator incorrectly counts previous-index
Modified: cocoon/trunk/src/blocks/lucene/java/org/apache/cocoon/components/search/LuceneCocoonPager.java
==============================================================================
--- cocoon/trunk/src/blocks/lucene/java/org/apache/cocoon/components/search/LuceneCocoonPager.java (original)
+++ cocoon/trunk/src/blocks/lucene/java/org/apache/cocoon/components/search/LuceneCocoonPager.java Tue Nov 16 18:19:12 2004
@@ -1,12 +1,12 @@
/*
* Copyright 1999-2004 The Apache Software Foundation.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -27,7 +27,7 @@
* This class should help you to manage paging of hits.
*
* @author <a href="mailto:berni_huber@a1.net">Bernhard Huber</a>
- * @version CVS $Id: LuceneCocoonPager.java,v 1.4 2004/03/05 13:01:59 bdelacretaz Exp $
+ * @version CVS $Id$
*/
public class LuceneCocoonPager implements ListIterator
{
@@ -176,7 +176,7 @@
* @return Description of the Returned Value
*/
public boolean hasNext() {
- return hitsIndex < hits.length();
+ return hitsIndex + countOfHitsPerPage < hits.length();
}
/**
@@ -197,19 +197,16 @@
public Object next() {
ArrayList hitsPerPageList = new ArrayList();
int endIndex = Math.min(hits.length(), hitsIndex + countOfHitsPerPage);
- if (hitsIndex < endIndex) {
- while (hitsIndex < endIndex) {
- try {
- HitWrapper hit = new HitWrapper(hits.score(hitsIndex),
- hits.doc(hitsIndex));
- hitsPerPageList.add(hit);
- } catch (IOException ioe) {
- throw new NoSuchElementException("no more hits: " + ioe.getMessage());
- }
- hitsIndex++;
+ //do not increment the actual hitsindex
+ int hits_copy = hitsIndex;
+ while (hits_copy < endIndex) {
+ try {
+ HitWrapper hit = new HitWrapper(hits.score(hits_copy), hits.doc(hits_copy));
+ hitsPerPageList.add(hit);
+ } catch (IOException ioe) {
+ throw new NoSuchElementException("no more hits: " + ioe.getMessage());
}
- } else {
- throw new NoSuchElementException();
+ hits_copy++;
}
return hitsPerPageList;
}
@@ -221,7 +218,7 @@
* @return Description of the Returned Value
*/
public int nextIndex() {
- return Math.min(hitsIndex, hits.length());
+ return Math.min(hitsIndex + countOfHitsPerPage, hits.length() - 1);
}
/**
@@ -232,7 +229,7 @@
public Object previous() {
ArrayList hitsPerPageList = new ArrayList();
- int startIndex = Math.max(0, hitsIndex - 2 * countOfHitsPerPage);
+ int startIndex = Math.max(0, hitsIndex - countOfHitsPerPage);
int endIndex = Math.min(hits.length() - 1, hitsIndex - countOfHitsPerPage);
if (startIndex < endIndex) {
@@ -260,7 +257,7 @@
* @return Description of the Returned Value
*/
public int previousIndex() {
- return Math.max(0, hitsIndex - 2 * countOfHitsPerPage);
+ return Math.max(0, hitsIndex - countOfHitsPerPage);
}
/**
@@ -275,7 +272,7 @@
* A helper class encapsulating found document, and its score
*
* @author <a href="mailto:berni_huber@a1.net">Bernhard Huber</a>
- * @version CVS $Id: LuceneCocoonPager.java,v 1.4 2004/03/05 13:01:59 bdelacretaz Exp $
+ * @version CVS $Id$
*/
public static class HitWrapper {
float score;
Modified: cocoon/trunk/src/blocks/lucene/java/org/apache/cocoon/generation/SearchGenerator.java
==============================================================================
--- cocoon/trunk/src/blocks/lucene/java/org/apache/cocoon/generation/SearchGenerator.java (original)
+++ cocoon/trunk/src/blocks/lucene/java/org/apache/cocoon/generation/SearchGenerator.java Tue Nov 16 18:19:12 2004
@@ -1,12 +1,12 @@
/*
* Copyright 1999-2004 The Apache Software Foundation.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -15,7 +15,6 @@
*/
package org.apache.cocoon.generation;
-import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
@@ -26,10 +25,10 @@
import org.apache.cocoon.Constants;
import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.components.search.LuceneCocoonHelper;
+import org.apache.cocoon.components.search.LuceneCocoonPager;
import org.apache.cocoon.components.search.LuceneCocoonSearcher;
import org.apache.cocoon.components.search.LuceneXMLIndexer;
-import org.apache.cocoon.components.search.LuceneCocoonPager;
-import org.apache.cocoon.components.search.LuceneCocoonHelper;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.SourceResolver;
@@ -45,10 +44,10 @@
import java.io.File;
import java.io.IOException;
+import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Enumeration;
/**
* Generates an XML representation of a search result.
@@ -97,7 +96,7 @@
* @version CVS $Id$
*/
public class SearchGenerator extends ServiceableGenerator
- implements Contextualizable, Initializable, Disposable
+ implements Contextualizable, Disposable
{
/**
@@ -160,7 +159,7 @@
* Attribute <code>name</code> of <code>hit</code> element.
*/
protected final static String NAME_ATTRIBUTE = "name";
-
+
/**
* Child element of generated xml content, ie <code>hits</code>.
* This element describes all hits.
@@ -416,7 +415,6 @@
*/
public void service(ServiceManager manager) throws ServiceException {
super.service(manager);
-// lcs = (LuceneCocoonSearcher) this.manager.lookup(LuceneCocoonSearcher.ROLE);
}
/**
@@ -428,13 +426,15 @@
throws ProcessingException, SAXException, IOException {
super.setup(resolver, objectModel, src, par);
+ try {
+ lcs = (LuceneCocoonSearcher) this.manager.lookup(LuceneCocoonSearcher.ROLE);
+ } catch (ServiceException e) {
+ throw new ProcessingException("Unable to lookup " + LuceneCocoonSearcher.ROLE, e);
+ }
+
String param_name;
Request request = ObjectModelHelper.getRequest(objectModel);
- // get the analyzer
-// Analyzer analyzer = LuceneCocoonHelper.getAnalyzer("org.apache.lucene.analysis.standard.StandardAnalyzer");
-// lcs.setAnalyzer(analyzer);
-
String index_file_name = par.getParameter(INDEX_PARAM, INDEX_PARAM_DEFAULT);
if (request.getParameter(INDEX_PARAM) != null) {
index_file_name = request.getParameter(INDEX_PARAM);
@@ -447,9 +447,9 @@
}
// try getting the queryString from the generator sitemap params
-
+
queryString = par.getParameter(QUERY_PARAM, "");
-
+
// try getting the queryString from the request params
if (queryString.equals("")) {
param_name = par.getParameter(QUERY_STRING_PARAM, QUERY_STRING_PARAM_DEFAULT);
@@ -504,12 +504,6 @@
workDir = (File) context.get(Constants.CONTEXT_WORK_DIR);
}
- public void initialize() throws IOException {
- // get the directory where the index resides
-// Directory directory = LuceneCocoonHelper.getDirectory(new File(workDir, "index"), false);
-// lcs.setDirectory(directory);
- }
-
/**
* Generate xml content describing search results.
* Entry point of the ComposerGenerator.
@@ -613,7 +607,7 @@
* @throws SAXException when there is a problem creating the output SAX events.
*/
private void generateHits(LuceneCocoonPager pager) throws SAXException {
- if (pager != null && pager.hasNext()) {
+ if (pager != null) {
atts.clear();
atts.addAttribute("", TOTAL_COUNT_ATTRIBUTE, TOTAL_COUNT_ATTRIBUTE,
CDATA, String.valueOf(pager.getCountOfHits()));
@@ -726,9 +720,7 @@
if (queryString != null && queryString.length() != 0) {
Hits hits = null;
- // TODO (VG): Move parts into compose/initialize/recycle
try {
- lcs = (LuceneCocoonSearcher) this.manager.lookup(LuceneCocoonSearcher.ROLE);
Analyzer analyzer = LuceneCocoonHelper.getAnalyzer("org.apache.lucene.analysis.standard.StandardAnalyzer");
lcs.setAnalyzer(analyzer);
// get the directory where the index resides
@@ -737,13 +729,6 @@
hits = lcs.search(queryString, LuceneXMLIndexer.BODY_FIELD);
} catch (IOException ioe) {
throw new ProcessingException("IOException in search", ioe);
- } catch (ServiceException ce) {
- throw new ProcessingException("ServiceException in search", ce);
- } finally {
- if (lcs != null) {
- this.manager.release(lcs);
- lcs = null;
- }
}
// wrap the hits by an pager help object for accessing only a range of hits
@@ -778,6 +763,9 @@
*/
public void recycle() {
super.recycle();
+ if (lcs != null) {
+ this.manager.release(lcs);
+ }
this.queryString = null;
this.startIndex = null;
this.pageLength = null;
@@ -785,10 +773,6 @@
}
public void dispose() {
-// if (lcs != null) {
-// this.manager.release(lcs);
-// lcs = null;
-// }
super.dispose();
}
}
Modified: cocoon/trunk/status.xml
==============================================================================
--- cocoon/trunk/status.xml (original)
+++ cocoon/trunk/status.xml Tue Nov 16 18:19:12 2004
@@ -368,6 +368,9 @@
</action>
</release>
<release version="2.1.6" date="TBD">
+ <action dev="AG" type="fix" fixes-bug="23118" due-to="Jorg Heymans" due-to-email="jh@domek.be">
+ Lucene: SearchGenerator incorrectly counts previous-index. Reported by: Tomasz Nowak (tnowak-p@netventure.pl)
+ </action>
<action dev="AG" type="update">
Updated iText to 1.1.
</action>