From 46cee7fa27d2b0ab7d9b4b5a7137978dcef863d1 Mon Sep 17 00:00:00 2001 From: Shalin Shekhar Mangar Date: Sun, 3 May 2009 18:47:50 +0000 Subject: [PATCH] SOLR-1099 follow up -- Fix NPE in FieldAnalysisRequestHandler git-svn-id: https://svn.apache.org/repos/asf/lucene/solr/trunk@771099 13f79535-47bb-0310-9956-ffa450edef68 --- .../handler/FieldAnalysisRequestHandler.java | 31 +++++++++++++------ .../FieldAnalysisRequestHandlerTest.java | 13 ++++---- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java b/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java index e0a6db80af4..a5e31b14a96 100644 --- a/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java +++ b/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java @@ -82,6 +82,8 @@ import java.util.Set; * No * * + *

Note that if neither analysis.fieldname and analysis.fieldtype is specified, then the default search field's + * analyzer is used.

* * @version $Id$ * @since solr 1.4 @@ -92,7 +94,7 @@ public class FieldAnalysisRequestHandler extends AnalysisRequestHandlerBase { * {@inheritDoc} */ protected NamedList doAnalysis(SolrQueryRequest req) throws Exception { - FieldAnalysisRequest analysisRequest = resolveAnalysisRequest(req.getParams()); + FieldAnalysisRequest analysisRequest = resolveAnalysisRequest(req); IndexSchema indexSchema = req.getCore().getSchema(); return handleAnalysisRequest(analysisRequest, indexSchema); } @@ -122,19 +124,26 @@ public class FieldAnalysisRequestHandler extends AnalysisRequestHandlerBase { /** * Resolves the AnalysisRequest based on the parameters in the given SolrParams. * - * @param solrParams SolrParams taken from request + * @param req the request * * @return AnalysisRequest containing all the information about what needs to be analyzed, and using what * fields/types */ - FieldAnalysisRequest resolveAnalysisRequest(SolrParams solrParams) { + FieldAnalysisRequest resolveAnalysisRequest(SolrQueryRequest req) { + SolrParams solrParams = req.getParams(); FieldAnalysisRequest analysisRequest = new FieldAnalysisRequest(); + boolean useDefaultSearchField = true; if (solrParams.get(AnalysisParams.FIELD_TYPE) != null) { analysisRequest.setFieldTypes(Arrays.asList(solrParams.get(AnalysisParams.FIELD_TYPE).split(","))); + useDefaultSearchField = false; } if (solrParams.get(AnalysisParams.FIELD_NAME) != null) { analysisRequest.setFieldNames(Arrays.asList(solrParams.get(AnalysisParams.FIELD_NAME).split(","))); + useDefaultSearchField = false; + } + if (useDefaultSearchField) { + analysisRequest.addFieldName(req.getSchema().getSolrQueryParser(null).getField()); } analysisRequest.setQuery(solrParams.get(AnalysisParams.QUERY, solrParams.get(CommonParams.Q))); analysisRequest.setFieldValue(solrParams.get(AnalysisParams.FIELD_VALUE)); @@ -154,15 +163,19 @@ public class FieldAnalysisRequestHandler extends AnalysisRequestHandlerBase { NamedList analysisResults = new SimpleOrderedMap(); NamedList fieldTypeAnalysisResults = new SimpleOrderedMap(); - for (String fieldTypeName : request.getFieldTypes()) { - FieldType fieldType = schema.getFieldTypes().get(fieldTypeName); - fieldTypeAnalysisResults.add(fieldTypeName, analyzeValues(request, fieldType, null)); + if (request.getFieldTypes() != null) { + for (String fieldTypeName : request.getFieldTypes()) { + FieldType fieldType = schema.getFieldTypes().get(fieldTypeName); + fieldTypeAnalysisResults.add(fieldTypeName, analyzeValues(request, fieldType, null)); + } } NamedList fieldNameAnalysisResults = new SimpleOrderedMap(); - for (String fieldName : request.getFieldNames()) { - FieldType fieldType = schema.getFieldType(fieldName); - fieldNameAnalysisResults.add(fieldName, analyzeValues(request, fieldType, fieldName)); + if (request.getFieldNames() != null) { + for (String fieldName : request.getFieldNames()) { + FieldType fieldType = schema.getFieldType(fieldName); + fieldNameAnalysisResults.add(fieldName, analyzeValues(request, fieldType, fieldName)); + } } analysisResults.add("field_types", fieldTypeAnalysisResults); diff --git a/src/test/org/apache/solr/handler/FieldAnalysisRequestHandlerTest.java b/src/test/org/apache/solr/handler/FieldAnalysisRequestHandlerTest.java index 0d4329113a9..056233f10d2 100644 --- a/src/test/org/apache/solr/handler/FieldAnalysisRequestHandlerTest.java +++ b/src/test/org/apache/solr/handler/FieldAnalysisRequestHandlerTest.java @@ -24,6 +24,7 @@ import org.apache.solr.common.params.CommonParams; import org.apache.solr.common.params.ModifiableSolrParams; import org.apache.solr.common.util.NamedList; import org.apache.solr.client.solrj.request.FieldAnalysisRequest; +import org.apache.solr.request.LocalSolrQueryRequest; import java.util.List; @@ -54,7 +55,7 @@ public class FieldAnalysisRequestHandlerTest extends AnalysisRequestHandlerTestB } /** - * Tests the {@link FieldAnalysisRequestHandler#resolveAnalysisRequest(org.apache.solr.common.params.SolrParams)} + * Tests the {@link FieldAnalysisRequestHandler#resolveAnalysisRequest(org.apache.solr.request.SolrQueryRequest)} */ public void testResolveAnalysisRequest() throws Exception { ModifiableSolrParams params = new ModifiableSolrParams(); @@ -63,7 +64,7 @@ public class FieldAnalysisRequestHandlerTest extends AnalysisRequestHandlerTestB params.add(AnalysisParams.FIELD_VALUE, "the quick red fox jumped over the lazy brown dogs"); params.add(CommonParams.Q, "fox brown"); - FieldAnalysisRequest request = handler.resolveAnalysisRequest(params); + FieldAnalysisRequest request = handler.resolveAnalysisRequest(new LocalSolrQueryRequest(h.getCore(), params)); List fieldNames = request.getFieldNames(); assertEquals("Expecting 2 field names", 2, fieldNames.size()); assertEquals("text", fieldNames.get(0)); @@ -78,21 +79,21 @@ public class FieldAnalysisRequestHandlerTest extends AnalysisRequestHandlerTestB // testing overide of query value using analysis.query param params.add(AnalysisParams.QUERY, "quick lazy"); - request = handler.resolveAnalysisRequest(params); + request = handler.resolveAnalysisRequest(new LocalSolrQueryRequest(h.getCore(), params)); assertEquals("quick lazy", request.getQuery()); // testing analysis.showmatch param params.add(AnalysisParams.SHOW_MATCH, "false"); - request = handler.resolveAnalysisRequest(params); + request = handler.resolveAnalysisRequest(new LocalSolrQueryRequest(h.getCore(), params)); assertFalse(request.isShowMatch()); params.set(AnalysisParams.SHOW_MATCH, "true"); - request = handler.resolveAnalysisRequest(params); + request = handler.resolveAnalysisRequest(new LocalSolrQueryRequest(h.getCore(), params)); assertTrue(request.isShowMatch()); // testing absence of query value params.remove(CommonParams.Q); params.remove(AnalysisParams.QUERY); - request = handler.resolveAnalysisRequest(params); + request = handler.resolveAnalysisRequest(new LocalSolrQueryRequest(h.getCore(), params)); assertNull(request.getQuery()); }