Author: ryan
Date: Fri Dec 7 23:27:49 2007
New Revision: 602341
URL: http://svn.apache.org/viewvc?rev=602341&view=rev
Log:
SOLR-281 -- building a SearchComponent registry with components initialized via
the standard plugin utils method.
Added:
lucene/solr/trunk/src/test/org/apache/solr/handler/SearchHandlerTest.java
(with props)
Modified:
lucene/solr/trunk/example/solr/conf/solrconfig.xml
lucene/solr/trunk/src/java/org/apache/solr/core/Config.java
lucene/solr/trunk/src/java/org/apache/solr/core/SolrCore.java
lucene/solr/trunk/src/java/org/apache/solr/handler/SearchHandler.java
lucene/solr/trunk/src/java/org/apache/solr/handler/StandardRequestHandler.java
lucene/solr/trunk/src/java/org/apache/solr/handler/component/DebugComponent.java
lucene/solr/trunk/src/java/org/apache/solr/handler/component/FacetComponent.java
lucene/solr/trunk/src/java/org/apache/solr/handler/component/HighlightComponent.java
lucene/solr/trunk/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java
lucene/solr/trunk/src/java/org/apache/solr/handler/component/QueryComponent.java
lucene/solr/trunk/src/java/org/apache/solr/handler/component/ResponseBuilder.java
lucene/solr/trunk/src/java/org/apache/solr/handler/component/SearchComponent.java
lucene/solr/trunk/src/java/org/apache/solr/search/SortSpec.java
Modified: lucene/solr/trunk/example/solr/conf/solrconfig.xml
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/example/solr/conf/solrconfig.xml?rev=602341&r1=602340&r2=602341&view=diff
==============================================================================
--- lucene/solr/trunk/example/solr/conf/solrconfig.xml (original)
+++ lucene/solr/trunk/example/solr/conf/solrconfig.xml Fri Dec 7 23:27:49 2007
@@ -288,19 +288,6 @@
</requestHandler>
- <requestHandler name="/search" class="solr.SearchHandler">
- <lst name="defaults">
- <str name="echoParams">explicit</str>
- </lst>
- <arr name="components">
- <str>org.apache.solr.handler.component.QueryComponent</str>
- <str>org.apache.solr.handler.component.FacetComponent</str>
- <str>org.apache.solr.handler.component.MoreLikeThisComponent</str>
- <str>org.apache.solr.handler.component.HighlightComponent</str>
- <str>org.apache.solr.handler.component.DebugComponent</str>
- </arr>
- </requestHandler>
-
<!-- DisMaxRequestHandler allows easy searching across multiple fields
for simple user-entered phrases.
see http://wiki.apache.org/solr/DisMaxRequestHandler
@@ -438,6 +425,52 @@
<int name="mlt.mindf">1</int>
</lst>
</requestHandler>
+
+
+ <!--
+
+ Search components are registered to SolrCore and used by Search Handlers
+
+ By default, the following components are avaliable:
+
+ <searchComponent name="query"
class="org.apache.solr.handler.component.QueryComponent" />
+ <searchComponent name="facet"
class="org.apache.solr.handler.component.FacetComponent" />
+ <searchComponent name="mlt"
class="org.apache.solr.handler.component.MoreLikeThisComponent" />
+ <searchComponent name="highlight"
class="org.apache.solr.handler.component.HighlightComponent" />
+ <searchComponent name="debug"
class="org.apache.solr.handler.component.DebugComponent" />
+
+ If you register a searchComponent to one of the standard names, that will
be used instead.
+
+ -->
+
+ <requestHandler name="/search" class="solr.SearchHandler">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ </lst>
+ <!--
+ By default, this will register the following components:
+
+ <arr name="components">
+ <str>query</str>
+ <str>facet</str>
+ <str>mlt</str>
+ <str>highlight</str>
+ <str>debug</str>
+ </arr>
+
+ To insert handlers before or after the 'standard' components, use:
+
+ <arr name="first-components">
+ <str>first</str>
+ </arr>
+
+ <arr name="last-components">
+ <str>last</str>
+ </arr>
+
+ -->
+ </requestHandler>
+
<!-- Update request handler.
Modified: lucene/solr/trunk/src/java/org/apache/solr/core/Config.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/core/Config.java?rev=602341&r1=602340&r2=602341&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/core/Config.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/core/Config.java Fri Dec 7
23:27:49 2007
@@ -51,13 +51,16 @@
this( null, name, is, prefix );
}
- public Config(String instanceDir, String name) throws
ParserConfigurationException, IOException, SAXException
+ public Config(SolrResourceLoader loader, String name) throws
ParserConfigurationException, IOException, SAXException
{
- this( new SolrResourceLoader( instanceDir ), name, null, null );
+ this( loader, name, null, null );
}
public Config(SolrResourceLoader loader, String name, InputStream is, String
prefix) throws ParserConfigurationException, IOException, SAXException
{
+ if( loader == null ) {
+ loader = new SolrResourceLoader( null );
+ }
this.loader = loader;
this.name = name;
this.prefix = prefix;
Modified: lucene/solr/trunk/src/java/org/apache/solr/core/SolrCore.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/core/SolrCore.java?rev=602341&r1=602340&r2=602341&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/core/SolrCore.java Fri Dec 7
23:27:49 2007
@@ -44,6 +44,12 @@
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.handler.PingRequestHandler;
+import org.apache.solr.handler.component.DebugComponent;
+import org.apache.solr.handler.component.FacetComponent;
+import org.apache.solr.handler.component.HighlightComponent;
+import org.apache.solr.handler.component.MoreLikeThisComponent;
+import org.apache.solr.handler.component.QueryComponent;
+import org.apache.solr.handler.component.SearchComponent;
import org.apache.solr.highlight.SolrHighlighter;
import org.apache.solr.request.JSONResponseWriter;
import org.apache.solr.request.PythonResponseWriter;
@@ -86,6 +92,7 @@
private final long startTime;
private final RequestHandlers reqHandlers;
private final SolrHighlighter highlighter;
+ private final Map<String,SearchComponent> searchComponents;
private final Map<String,UpdateRequestProcessorFactory> updateProcessors;
private final Map<String,SolrInfoMBean> infoRegistry = new
java.util.HashMap<String,SolrInfoMBean>();
@@ -309,6 +316,8 @@
initWriters();
initQParsers();
+
+ this.searchComponents = loadSearchComponents( config );
// Processors initialized before the handlers
updateProcessors = loadUpdateProcessors();
@@ -465,6 +474,37 @@
return reqHandlers.register(handlerName,handler);
}
+ /**
+ * Register the default search components
+ */
+ private static Map<String, SearchComponent> loadSearchComponents( SolrConfig
config )
+ {
+ Map<String, SearchComponent> components = new HashMap<String,
SearchComponent>();
+ components.put( QueryComponent.COMPONENT_NAME, new QueryComponent()
);
+ components.put( FacetComponent.COMPONENT_NAME, new FacetComponent()
);
+ components.put( MoreLikeThisComponent.COMPONENT_NAME, new
MoreLikeThisComponent() );
+ components.put( HighlightComponent.COMPONENT_NAME, new
HighlightComponent() );
+ components.put( DebugComponent.COMPONENT_NAME, new DebugComponent()
);
+
+ String xpath = "searchComponent";
+ NamedListPluginLoader<SearchComponent> loader = new
NamedListPluginLoader<SearchComponent>( xpath, components );
+ loader.load( config.getResourceLoader(), (NodeList)config.evaluate( xpath,
XPathConstants.NODESET ) );
+
+ return components;
+ }
+
+ /**
+ * @return a Search Component registered to a given name. Throw an
exception if the component is undefined
+ */
+ public SearchComponent getSearchComponent( String name )
+ {
+ SearchComponent component = searchComponents.get( name );
+ if( component == null ) {
+ throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,
+ "Unknown Search Component: "+name );
+ }
+ return component;
+ }
////////////////////////////////////////////////////////////////////////////////
// Update Handler
Modified: lucene/solr/trunk/src/java/org/apache/solr/handler/SearchHandler.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/SearchHandler.java?rev=602341&r1=602340&r2=602341&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/handler/SearchHandler.java
(original)
+++ lucene/solr/trunk/src/java/org/apache/solr/handler/SearchHandler.java Fri
Dec 7 23:27:49 2007
@@ -18,18 +18,25 @@
package org.apache.solr.handler;
import org.apache.lucene.queryParser.ParseException;
+import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.RTimer;
import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.handler.component.DebugComponent;
+import org.apache.solr.handler.component.FacetComponent;
+import org.apache.solr.handler.component.HighlightComponent;
+import org.apache.solr.handler.component.MoreLikeThisComponent;
+import org.apache.solr.handler.component.QueryComponent;
import org.apache.solr.handler.component.ResponseBuilder;
import org.apache.solr.handler.component.SearchComponent;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.util.plugin.SolrCoreAware;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
import java.util.logging.Logger;
@@ -37,56 +44,106 @@
*
* Refer SOLR-281
*
+ * @since solr 1.3
*/
-public class SearchHandler extends RequestHandlerBase
+public class SearchHandler extends RequestHandlerBase implements SolrCoreAware
{
- private static final String RESPONSE_BUILDER_CONTEXT_KEY = "ResponseBuilder";
+ static final String RESPONSE_BUILDER_CONTEXT_KEY = "ResponseBuilder";
+
+ static final String INIT_COMPONENTS = "components";
+ static final String INIT_FISRT_COMPONENTS = "first-components";
+ static final String INIT_LAST_COMPONENTS = "last-components";
protected static Logger log =
Logger.getLogger(SearchHandler.class.getName());
- protected Collection<SearchComponent> components;
+ protected List<SearchComponent> components = null;
+ protected NamedList initArgs = null;
@Override
public void init(NamedList args) {
super.init( args );
- initComponents(args);
+ initArgs = args;
}
-
- // TODO: should there be a way to append components from solrconfig w/o
having to
- // know the complete standard list (which may expand over time?)
- protected void initComponents(NamedList args){
- if( args != null ) {
- try {
- Object declaredComponents = args.get("components");
- if (declaredComponents != null && declaredComponents instanceof List) {
- List list = (List) declaredComponents;
- components = new ArrayList<SearchComponent>(list.size());
- for(Object c : list){
- // TODO: an init() with args for components?
- SearchComponent comp = (SearchComponent) Class.forName((String)
c).newInstance();
- components.add(comp);
- log.info("Adding component:"+comp);
- }
- }
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
+
+ protected List<String> getDefaultComponets()
+ {
+ ArrayList<String> names = new ArrayList<String>(5);
+ names.add( QueryComponent.COMPONENT_NAME );
+ names.add( FacetComponent.COMPONENT_NAME );
+ names.add( MoreLikeThisComponent.COMPONENT_NAME );
+ names.add( HighlightComponent.COMPONENT_NAME );
+ names.add( DebugComponent.COMPONENT_NAME );
+ return names;
+ }
+
+ /**
+ * Initialize the components based on name
+ */
+ @SuppressWarnings("unchecked")
+ public void inform(SolrCore core)
+ {
+ Object declaredComponents = initArgs.get(INIT_COMPONENTS);
+ List<String> first = (List<String>) initArgs.get(INIT_FISRT_COMPONENTS);
+ List<String> last = (List<String>) initArgs.get(INIT_LAST_COMPONENTS);
+
+ List<String> list = null;
+ if( declaredComponents == null ) {
+ // Use the default component list
+ list = getDefaultComponets();
+
+ if( first != null ) {
+ List<String> clist = first;
+ clist.addAll( list );
+ list = clist;
+ }
+
+ if( last != null ) {
+ list.addAll( last );
+ }
+ }
+ else {
+ list = (List<String>)declaredComponents;
+ if( first != null || last != null ) {
+ throw new SolrException( SolrException.ErrorCode.SERVER_ERROR,
+ "First/Last components only valid if you do not declare
'components'");
+ }
+ }
+
+ // Build the component list
+ components = new ArrayList<SearchComponent>( list.size() );
+ for(String c : list){
+ SearchComponent comp = core.getSearchComponent( c );
+ components.add(comp);
+ log.info("Adding component:"+comp);
}
}
+ public List<SearchComponent> getComponents() {
+ return components;
+ }
+
public static ResponseBuilder getResponseBuilder(SolrQueryRequest req)
{
return (ResponseBuilder) req.getContext().get(
RESPONSE_BUILDER_CONTEXT_KEY );
}
+
//---------------------------------------------------------------------------------------
+ // SolrRequestHandler
+
//---------------------------------------------------------------------------------------
+
@Override
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp)
throws IOException, ParseException, InstantiationException,
IllegalAccessException
{
ResponseBuilder builder = new ResponseBuilder();
req.getContext().put( RESPONSE_BUILDER_CONTEXT_KEY, builder );
- // The semantics of debugging vs not debugging are different enough that
- // it makes sense to have two control loops
+ if( components == null ) {
+ throw new SolrException( SolrException.ErrorCode.SERVER_ERROR,
+ "SearchHandler not initialized properly. No components registered."
);
+ }
+
+ // The semantics of debugging vs not debugging are distinct enough
+ // to justify two control loops
if( !req.getParams().getBool( CommonParams.DEBUG_QUERY, false ) ) {
// Prepare
for( SearchComponent c : components ) {
@@ -122,15 +179,14 @@
timer.stop();
// add the timing info
- if( builder.getDebugInfo() == null ) {
- builder.setDebugInfo( new SimpleOrderedMap<Object>() );
- }
- builder.getDebugInfo().add( "timing", timer.asNamedList() );
+ builder.addDebugInfo( "timing", timer.asNamedList() );
}
}
- //////////////////////// SolrInfoMBeans methods //////////////////////
-
+
//---------------------------------------------------------------------------------------
+ // SolrInfoMBeans
+
//---------------------------------------------------------------------------------------
+
@Override
public String getDescription() {
StringBuilder sb = new StringBuilder();
Modified:
lucene/solr/trunk/src/java/org/apache/solr/handler/StandardRequestHandler.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/StandardRequestHandler.java?rev=602341&r1=602340&r2=602341&view=diff
==============================================================================
---
lucene/solr/trunk/src/java/org/apache/solr/handler/StandardRequestHandler.java
(original)
+++
lucene/solr/trunk/src/java/org/apache/solr/handler/StandardRequestHandler.java
Fri Dec 7 23:27:49 2007
@@ -19,15 +19,6 @@
import java.net.MalformedURLException;
import java.net.URL;
-import java.util.ArrayList;
-
-import org.apache.solr.common.util.NamedList;
-import org.apache.solr.handler.component.DebugComponent;
-import org.apache.solr.handler.component.FacetComponent;
-import org.apache.solr.handler.component.HighlightComponent;
-import org.apache.solr.handler.component.MoreLikeThisComponent;
-import org.apache.solr.handler.component.QueryComponent;
-import org.apache.solr.handler.component.SearchComponent;
/**
* @version $Id$
@@ -48,18 +39,8 @@
* </ul>
*
*/
-public class StandardRequestHandler extends SearchHandler {
-
- @Override
- protected void initComponents(NamedList args) {
- components = new ArrayList<SearchComponent>(5);
- components.add( new QueryComponent() );
- components.add( new FacetComponent() );
- components.add( new MoreLikeThisComponent() );
- components.add( new HighlightComponent() );
- components.add( new DebugComponent() );
- }
-
+public class StandardRequestHandler extends SearchHandler
+{
//////////////////////// SolrInfoMBeans methods //////////////////////
@Override
Modified:
lucene/solr/trunk/src/java/org/apache/solr/handler/component/DebugComponent.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/component/DebugComponent.java?rev=602341&r1=602340&r2=602341&view=diff
==============================================================================
---
lucene/solr/trunk/src/java/org/apache/solr/handler/component/DebugComponent.java
(original)
+++
lucene/solr/trunk/src/java/org/apache/solr/handler/component/DebugComponent.java
Fri Dec 7 23:27:49 2007
@@ -24,8 +24,8 @@
import java.util.ArrayList;
import java.util.List;
-import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Query;
+import org.apache.solr.common.util.NamedList;
import org.apache.solr.handler.SearchHandler;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrQueryResponse;
@@ -40,32 +40,44 @@
*/
public class DebugComponent extends SearchComponent
{
+ public static final String COMPONENT_NAME = "debug";
+
@Override
- public void prepare(SolrQueryRequest req, SolrQueryResponse rsp) throws
IOException, ParseException
+ public void prepare(SolrQueryRequest req, SolrQueryResponse rsp) throws
IOException
{
}
+ @SuppressWarnings("unchecked")
@Override
public void process(SolrQueryRequest req, SolrQueryResponse rsp) throws
IOException
{
ResponseBuilder builder = SearchHandler.getResponseBuilder( req );
if( builder.isDebug() ) {
- builder.setDebugInfo( SolrPluginUtils.doStandardDebug( req,
- builder.getQueryString(), builder.getQuery(),
builder.getResults().docList) );
-
+ NamedList stdinfo = SolrPluginUtils.doStandardDebug( req,
+ builder.getQueryString(), builder.getQuery(),
builder.getResults().docList);
+
+ NamedList info = builder.getDebugInfo();
+ if( info == null ) {
+ builder.setDebugInfo( stdinfo );
+ info = stdinfo;
+ }
+ else {
+ info.addAll( stdinfo );
+ }
+
if (builder.getQparser() != null) {
builder.getQparser().addDebugInfo(builder.getDebugInfo());
}
if (null != builder.getDebugInfo() ) {
if (null != builder.getFilters() ) {
-
builder.getDebugInfo().add("filter_queries",req.getParams().getParams(FQ));
+ info.add("filter_queries",req.getParams().getParams(FQ));
List<String> fqs = new
ArrayList<String>(builder.getFilters().size());
for (Query fq : builder.getFilters()) {
fqs.add(QueryParsing.toString(fq, req.getSchema()));
}
- builder.getDebugInfo().add("parsed_filter_queries",fqs);
+ info.add("parsed_filter_queries",fqs);
}
// Add this directly here?
Modified:
lucene/solr/trunk/src/java/org/apache/solr/handler/component/FacetComponent.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/component/FacetComponent.java?rev=602341&r1=602340&r2=602341&view=diff
==============================================================================
---
lucene/solr/trunk/src/java/org/apache/solr/handler/component/FacetComponent.java
(original)
+++
lucene/solr/trunk/src/java/org/apache/solr/handler/component/FacetComponent.java
Fri Dec 7 23:27:49 2007
@@ -20,7 +20,6 @@
import java.io.IOException;
import java.net.URL;
-import org.apache.lucene.queryParser.ParseException;
import org.apache.solr.common.params.FacetParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.handler.SearchHandler;
@@ -36,8 +35,10 @@
*/
public class FacetComponent extends SearchComponent
{
+ public static final String COMPONENT_NAME = "facet";
+
@Override
- public void prepare(SolrQueryRequest req, SolrQueryResponse rsp) throws
IOException, ParseException
+ public void prepare(SolrQueryRequest req, SolrQueryResponse rsp) throws
IOException
{
SolrParams params = req.getParams();
if (params.getBool(FacetParams.FACET,false)) {
Modified:
lucene/solr/trunk/src/java/org/apache/solr/handler/component/HighlightComponent.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/component/HighlightComponent.java?rev=602341&r1=602340&r2=602341&view=diff
==============================================================================
---
lucene/solr/trunk/src/java/org/apache/solr/handler/component/HighlightComponent.java
(original)
+++
lucene/solr/trunk/src/java/org/apache/solr/handler/component/HighlightComponent.java
Fri Dec 7 23:27:49 2007
@@ -17,7 +17,6 @@
package org.apache.solr.handler.component;
-import org.apache.lucene.queryParser.ParseException;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.SolrParams;
@@ -36,9 +35,13 @@
* @version $Id$
* @since solr 1.3
*/
-public class HighlightComponent extends SearchComponent {
+public class HighlightComponent extends SearchComponent
+{
+ public static final String COMPONENT_NAME = "highlight";
+
@Override
- public void prepare(SolrQueryRequest req, SolrQueryResponse rsp) throws
IOException, ParseException {
+ public void prepare(SolrQueryRequest req, SolrQueryResponse rsp)
+ {
}
Modified:
lucene/solr/trunk/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java?rev=602341&r1=602340&r2=602341&view=diff
==============================================================================
---
lucene/solr/trunk/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java
(original)
+++
lucene/solr/trunk/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java
Fri Dec 7 23:27:49 2007
@@ -20,7 +20,6 @@
import java.io.IOException;
import java.net.URL;
-import org.apache.lucene.queryParser.ParseException;
import org.apache.solr.common.params.MoreLikeThisParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
@@ -39,8 +38,10 @@
*/
public class MoreLikeThisComponent extends SearchComponent
{
+ public static final String COMPONENT_NAME = "mlt";
+
@Override
- public void prepare(SolrQueryRequest req, SolrQueryResponse rsp) throws
IOException, ParseException
+ public void prepare(SolrQueryRequest req, SolrQueryResponse rsp) throws
IOException
{
}
Modified:
lucene/solr/trunk/src/java/org/apache/solr/handler/component/QueryComponent.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/component/QueryComponent.java?rev=602341&r1=602340&r2=602341&view=diff
==============================================================================
---
lucene/solr/trunk/src/java/org/apache/solr/handler/component/QueryComponent.java
(original)
+++
lucene/solr/trunk/src/java/org/apache/solr/handler/component/QueryComponent.java
Fri Dec 7 23:27:49 2007
@@ -40,6 +40,8 @@
*/
public class QueryComponent extends SearchComponent
{
+ public static final String COMPONENT_NAME = "query";
+
@Override
public void prepare(SolrQueryRequest req, SolrQueryResponse rsp) throws
IOException, ParseException
{
Modified:
lucene/solr/trunk/src/java/org/apache/solr/handler/component/ResponseBuilder.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/component/ResponseBuilder.java?rev=602341&r1=602340&r2=602341&view=diff
==============================================================================
---
lucene/solr/trunk/src/java/org/apache/solr/handler/component/ResponseBuilder.java
(original)
+++
lucene/solr/trunk/src/java/org/apache/solr/handler/component/ResponseBuilder.java
Fri Dec 7 23:27:49 2007
@@ -20,6 +20,7 @@
import org.apache.lucene.search.Query;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.RTimer;
+import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.search.DocListAndSet;
import org.apache.solr.search.QParser;
import org.apache.solr.search.SortSpec;
@@ -50,7 +51,24 @@
private RTimer timer = null;
private Query highlightQuery = null;
+
+
+ //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+
+ /**
+ * Utility function to add debugging info. This will make sure a valid
+ * debugInfo exists before adding to it.
+ */
+ public void addDebugInfo( String name, Object val )
+ {
+ if( debugInfo == null ) {
+ debugInfo = new SimpleOrderedMap<Object>();
+ }
+ debugInfo.add( name, val );
+ }
+ //-------------------------------------------------------------------------
//-------------------------------------------------------------------------
public boolean isDebug() {
Modified:
lucene/solr/trunk/src/java/org/apache/solr/handler/component/SearchComponent.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/component/SearchComponent.java?rev=602341&r1=602340&r2=602341&view=diff
==============================================================================
---
lucene/solr/trunk/src/java/org/apache/solr/handler/component/SearchComponent.java
(original)
+++
lucene/solr/trunk/src/java/org/apache/solr/handler/component/SearchComponent.java
Fri Dec 7 23:27:49 2007
@@ -26,6 +26,7 @@
import org.apache.solr.core.SolrInfoMBean;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.util.plugin.NamedListInitializedPlugin;
/**
* TODO!
@@ -33,10 +34,17 @@
* @version $Id$
* @since solr 1.3
*/
-public abstract class SearchComponent implements SolrInfoMBean
+public abstract class SearchComponent implements SolrInfoMBean,
NamedListInitializedPlugin
{
public abstract void prepare( SolrQueryRequest req, SolrQueryResponse rsp )
throws IOException, ParseException;
public abstract void process( SolrQueryRequest req, SolrQueryResponse rsp )
throws IOException;
+
+ //////////////////////// NamedListInitializedPlugin methods
//////////////////////
+
+ public void init( NamedList args )
+ {
+ // By default do nothing
+ }
//////////////////////// SolrInfoMBeans methods //////////////////////
Modified: lucene/solr/trunk/src/java/org/apache/solr/search/SortSpec.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/search/SortSpec.java?rev=602341&r1=602340&r2=602341&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/search/SortSpec.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/search/SortSpec.java Fri Dec 7
23:27:49 2007
@@ -38,6 +38,11 @@
this.offset=offset;
this.num=num;
}
+
+ public void setSort( Sort s )
+ {
+ sort = s;
+ }
/**
* Gets the Lucene Sort object, or null for the default sort
Added: lucene/solr/trunk/src/test/org/apache/solr/handler/SearchHandlerTest.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/handler/SearchHandlerTest.java?rev=602341&view=auto
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/handler/SearchHandlerTest.java
(added)
+++ lucene/solr/trunk/src/test/org/apache/solr/handler/SearchHandlerTest.java
Fri Dec 7 23:27:49 2007
@@ -0,0 +1,77 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.handler;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.handler.component.FacetComponent;
+import org.apache.solr.handler.component.MoreLikeThisComponent;
+import org.apache.solr.handler.component.SearchComponent;
+import org.apache.solr.util.AbstractSolrTestCase;
+
+
+public class SearchHandlerTest extends AbstractSolrTestCase
+{
+ @Override public String getSchemaFile() { return "schema.xml"; }
+ @Override public String getSolrConfigFile() { return "solrconfig.xml"; }
+
+ @SuppressWarnings("unchecked")
+ public void testInitalization()
+ {
+ SolrCore core = h.getCore();
+
+ // Build an explicit list
+ //-----------------------------------------------
+ List<String> names0 = new ArrayList<String>();
+ names0.add( MoreLikeThisComponent.COMPONENT_NAME );
+
+ NamedList args = new NamedList();
+ args.add( SearchHandler.INIT_COMPONENTS, names0 );
+ SearchHandler handler = new SearchHandler();
+ handler.init( args );
+ handler.inform( core );
+
+ assertEquals( 1, handler.getComponents().size() );
+ assertEquals( core.getSearchComponent(
MoreLikeThisComponent.COMPONENT_NAME ),
+ handler.getComponents().get( 0 ) );
+
+
+ // First/Last list
+ //-----------------------------------------------
+ names0 = new ArrayList<String>();
+ names0.add( MoreLikeThisComponent.COMPONENT_NAME );
+
+ List<String> names1 = new ArrayList<String>();
+ names1.add( FacetComponent.COMPONENT_NAME );
+
+ args = new NamedList();
+ args.add( SearchHandler.INIT_FISRT_COMPONENTS, names0 );
+ args.add( SearchHandler.INIT_LAST_COMPONENTS, names1 );
+ handler = new SearchHandler();
+ handler.init( args );
+ handler.inform( core );
+
+ List<SearchComponent> comps = handler.getComponents();
+ assertEquals( 2+handler.getDefaultComponets().size(), comps.size() );
+ assertEquals( core.getSearchComponent(
MoreLikeThisComponent.COMPONENT_NAME ), comps.get( 0 ) );
+ assertEquals( core.getSearchComponent( FacetComponent.COMPONENT_NAME ),
comps.get( comps.size()-1 ) );
+ }
+}
Propchange:
lucene/solr/trunk/src/test/org/apache/solr/handler/SearchHandlerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
lucene/solr/trunk/src/test/org/apache/solr/handler/SearchHandlerTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL