knguyen 2005/05/31 15:32:50 CEST
Modified files:
core/src/java/org/jahia/services/search/lucene
AbstractLuceneSearchHandler.java
Added files:
core/src/java/org/jahia/services/search/lucene
LuceneContainerSearcher.java
Log:
- extending container search to allow passing lucene filters
Revision Changes Path
1.2 +11 -1
jahia/core/src/java/org/jahia/services/search/lucene/AbstractLuceneSearchHandler.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/search/lucene/AbstractLuceneSearchHandler.java.diff?r1=1.1&r2=1.2&f=h
1.1 +155 -0
jahia/core/src/java/org/jahia/services/search/lucene/LuceneContainerSearcher.java
(new)
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/search/lucene/LuceneContainerSearcher.java?rev=1.1&content-type=text/plain
Index: LuceneContainerSearcher.java
====================================================================
//
// ____.
// __/\ ______| |__/\. _______
// __ .____| | \ | +----+ \
// _______| /--| | | - \ _ | : - \_________
// \\______: :---| : : | : | \________>
// |__\---\_____________:______: :____|____:_____\
// /_____|
//
// . . . i n j a h i a w e t r u s t . . .
//
//
//
//
package org.jahia.services.search.lucene;
import org.jahia.data.search.JahiaSearchResult;
import org.jahia.exceptions.JahiaException;
import org.jahia.params.ParamBean;
import org.jahia.registries.ServicesRegistry;
import org.jahia.services.version.EntryLoadRequest;
import org.jahia.services.sites.JahiaSite;
import org.jahia.services.search.*;
import org.apache.xpath.operations.*;
import org.apache.lucene.search.Filter;
import java.util.*;
import java.lang.String;
/**
* Handle containers search.
* The result for this searcher is an instance of JahiaSearchResult
* with a vector of matching container ids.
*
* @author Khue Nguyen <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
*/
public class LuceneContainerSearcher extends ContainerSearcher {
private static org.apache.log4j.Logger logger =
org.apache.log4j.Logger.getLogger (LuceneContainerSearcher.class);
private Filter filter;
/**
* Constructor for one single container list search
* The expected result is a JahiaSearchResult object containing a vector
of matching containers.
* The vector contained in the JahiaSearchResult is a vector of matching
ctn ids, not the containers.
* No right check on container, only on field.
*
* @param ctnListID the container list id.
* @param ctnListID
* @param query a valid Lucene search query
* @param loadRequest
*/
public LuceneContainerSearcher (int ctnListID, String query,
EntryLoadRequest loadRequest) {
super(ctnListID, query, loadRequest);
}
/**
* Constructor for one single container list search
* The expected result is a JahiaSearchResult object containing a vector
of matching containers.
* The vector contained in the JahiaSearchResult is a vector of matching
ctn ids, not the containers.
* No right check on container, only on field.
*
* @param ctnListID
* @param containerLevel
* @param query
* @param loadRequest
*/
public LuceneContainerSearcher (int ctnListID, int containerLevel, String
query,
EntryLoadRequest loadRequest) {
super(ctnListID, containerLevel, query, loadRequest);
}
/**
* Constructor for a single container list
*
* @param containerListName
* @param params
* @param query
* @param loadRequest
*
* @throws org.jahia.exceptions.JahiaException
*/
public LuceneContainerSearcher (String containerListName, ParamBean
params, String query,
EntryLoadRequest loadRequest)
throws JahiaException {
super(containerListName, params, query, loadRequest);
}
/**
* Constructor for searching containers of one Site or all Sites,
* and of one definition or of any definition
* If siteId = -1 -> search on all sites
* If containerDefinitionName is null -> ignore container definition type
* The expected result is a JahiaSearchResult object containing a vector
of matching containers.
* The vector contained in the JahiaSearchResult is a vector of matching
ctn ids, not the containers.
* No right check on container, only on field.
*
* @param siteId
* @param containerDefinitionName
* @param query
* @param loadRequest
*/
public LuceneContainerSearcher (int siteId, String
containerDefinitionName,
String query, EntryLoadRequest loadRequest) {
super(siteId, containerDefinitionName, query, loadRequest);
}
public LuceneContainerSearcher (Integer[] siteIds, String
containerDefinitionName,
String query, EntryLoadRequest loadRequest) {
super(siteIds, containerDefinitionName, query, loadRequest);
}
/**
* Lucene implementation
*
* @param query
* @param searchHandlers
* @param jParams
* @return
* @throws JahiaException
*/
protected SearchResult doSearch(String query, String[] searchHandlers,
ParamBean jParams)
throws JahiaException {
SearchResult result = new SearchResultImpl();
ServicesRegistry sReg = ServicesRegistry.getInstance();
String name;
SearchHandler searchHandler = null;
for ( int i=0; i<searchHandlers.length; i++ ){
searchHandler = sReg.getJahiaSearchService().getSearchManager()
.getSearchHandler(searchHandlers[i]);
if ( searchHandler instanceof AbstractLuceneSearchHandler ){
((AbstractLuceneSearchHandler)searchHandler).search(query,
result,filter);
} else {
searchHandler.search(query,result);
}
}
return result;
}
public Filter getFilter() {
return filter;
}
public void setFilter(Filter filter) {
this.filter = filter;
}
}
Index: AbstractLuceneSearchHandler.java
===================================================================
RCS file:
/home/cvs/repository/jahia/core/src/java/org/jahia/services/search/lucene/AbstractLuceneSearchHandler.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AbstractLuceneSearchHandler.java 22 Apr 2005 13:11:04 -0000 1.1
+++ AbstractLuceneSearchHandler.java 31 May 2005 13:32:49 -0000 1.2
@@ -14,6 +14,7 @@
import java.io.IOException;
+
/**
* Created by IntelliJ IDEA.
* User: hollis
@@ -81,6 +82,10 @@
}
public void search(String query, SearchResult collector){
+ this.search(query,collector,null);
+ }
+
+ public void search(String query, SearchResult collector, Filter filter){
SearchResult result = null;
IndexReader reader = null;
try {
@@ -89,7 +94,12 @@
Query q = QueryParser.parse(query,
IndexableDocument.DEFAULT_FULLTEXT_SEARCH_FIELD,
this.analyzer);
- Hits hits = searcher.search (q);
+ Hits hits = null;
+ if ( filter != null ){
+ searcher.search(q, filter);
+ } else {
+ searcher.search(q);
+ }
result = getSearchResult(hits);
collector.results().addAll(result.results());
} catch ( Throwable t ){