mirror of https://github.com/apache/lucene.git
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
This commit is contained in:
parent
99a48e5604
commit
46cee7fa27
|
@ -82,6 +82,8 @@ import java.util.Set;
|
||||||
* <td>No</td>
|
* <td>No</td>
|
||||||
* </tr>
|
* </tr>
|
||||||
* </table>
|
* </table>
|
||||||
|
* <p>Note that if neither analysis.fieldname and analysis.fieldtype is specified, then the default search field's
|
||||||
|
* analyzer is used.</p>
|
||||||
*
|
*
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
* @since solr 1.4
|
* @since solr 1.4
|
||||||
|
@ -92,7 +94,7 @@ public class FieldAnalysisRequestHandler extends AnalysisRequestHandlerBase {
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
protected NamedList doAnalysis(SolrQueryRequest req) throws Exception {
|
protected NamedList doAnalysis(SolrQueryRequest req) throws Exception {
|
||||||
FieldAnalysisRequest analysisRequest = resolveAnalysisRequest(req.getParams());
|
FieldAnalysisRequest analysisRequest = resolveAnalysisRequest(req);
|
||||||
IndexSchema indexSchema = req.getCore().getSchema();
|
IndexSchema indexSchema = req.getCore().getSchema();
|
||||||
return handleAnalysisRequest(analysisRequest, indexSchema);
|
return handleAnalysisRequest(analysisRequest, indexSchema);
|
||||||
}
|
}
|
||||||
|
@ -122,19 +124,26 @@ public class FieldAnalysisRequestHandler extends AnalysisRequestHandlerBase {
|
||||||
/**
|
/**
|
||||||
* Resolves the AnalysisRequest based on the parameters in the given SolrParams.
|
* 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
|
* @return AnalysisRequest containing all the information about what needs to be analyzed, and using what
|
||||||
* fields/types
|
* fields/types
|
||||||
*/
|
*/
|
||||||
FieldAnalysisRequest resolveAnalysisRequest(SolrParams solrParams) {
|
FieldAnalysisRequest resolveAnalysisRequest(SolrQueryRequest req) {
|
||||||
|
SolrParams solrParams = req.getParams();
|
||||||
FieldAnalysisRequest analysisRequest = new FieldAnalysisRequest();
|
FieldAnalysisRequest analysisRequest = new FieldAnalysisRequest();
|
||||||
|
|
||||||
|
boolean useDefaultSearchField = true;
|
||||||
if (solrParams.get(AnalysisParams.FIELD_TYPE) != null) {
|
if (solrParams.get(AnalysisParams.FIELD_TYPE) != null) {
|
||||||
analysisRequest.setFieldTypes(Arrays.asList(solrParams.get(AnalysisParams.FIELD_TYPE).split(",")));
|
analysisRequest.setFieldTypes(Arrays.asList(solrParams.get(AnalysisParams.FIELD_TYPE).split(",")));
|
||||||
|
useDefaultSearchField = false;
|
||||||
}
|
}
|
||||||
if (solrParams.get(AnalysisParams.FIELD_NAME) != null) {
|
if (solrParams.get(AnalysisParams.FIELD_NAME) != null) {
|
||||||
analysisRequest.setFieldNames(Arrays.asList(solrParams.get(AnalysisParams.FIELD_NAME).split(",")));
|
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.setQuery(solrParams.get(AnalysisParams.QUERY, solrParams.get(CommonParams.Q)));
|
||||||
analysisRequest.setFieldValue(solrParams.get(AnalysisParams.FIELD_VALUE));
|
analysisRequest.setFieldValue(solrParams.get(AnalysisParams.FIELD_VALUE));
|
||||||
|
@ -154,16 +163,20 @@ public class FieldAnalysisRequestHandler extends AnalysisRequestHandlerBase {
|
||||||
NamedList<NamedList> analysisResults = new SimpleOrderedMap<NamedList>();
|
NamedList<NamedList> analysisResults = new SimpleOrderedMap<NamedList>();
|
||||||
|
|
||||||
NamedList<NamedList> fieldTypeAnalysisResults = new SimpleOrderedMap<NamedList>();
|
NamedList<NamedList> fieldTypeAnalysisResults = new SimpleOrderedMap<NamedList>();
|
||||||
|
if (request.getFieldTypes() != null) {
|
||||||
for (String fieldTypeName : request.getFieldTypes()) {
|
for (String fieldTypeName : request.getFieldTypes()) {
|
||||||
FieldType fieldType = schema.getFieldTypes().get(fieldTypeName);
|
FieldType fieldType = schema.getFieldTypes().get(fieldTypeName);
|
||||||
fieldTypeAnalysisResults.add(fieldTypeName, analyzeValues(request, fieldType, null));
|
fieldTypeAnalysisResults.add(fieldTypeName, analyzeValues(request, fieldType, null));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
NamedList<NamedList> fieldNameAnalysisResults = new SimpleOrderedMap<NamedList>();
|
NamedList<NamedList> fieldNameAnalysisResults = new SimpleOrderedMap<NamedList>();
|
||||||
|
if (request.getFieldNames() != null) {
|
||||||
for (String fieldName : request.getFieldNames()) {
|
for (String fieldName : request.getFieldNames()) {
|
||||||
FieldType fieldType = schema.getFieldType(fieldName);
|
FieldType fieldType = schema.getFieldType(fieldName);
|
||||||
fieldNameAnalysisResults.add(fieldName, analyzeValues(request, fieldType, fieldName));
|
fieldNameAnalysisResults.add(fieldName, analyzeValues(request, fieldType, fieldName));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
analysisResults.add("field_types", fieldTypeAnalysisResults);
|
analysisResults.add("field_types", fieldTypeAnalysisResults);
|
||||||
analysisResults.add("field_names", fieldNameAnalysisResults);
|
analysisResults.add("field_names", fieldNameAnalysisResults);
|
||||||
|
|
|
@ -24,6 +24,7 @@ import org.apache.solr.common.params.CommonParams;
|
||||||
import org.apache.solr.common.params.ModifiableSolrParams;
|
import org.apache.solr.common.params.ModifiableSolrParams;
|
||||||
import org.apache.solr.common.util.NamedList;
|
import org.apache.solr.common.util.NamedList;
|
||||||
import org.apache.solr.client.solrj.request.FieldAnalysisRequest;
|
import org.apache.solr.client.solrj.request.FieldAnalysisRequest;
|
||||||
|
import org.apache.solr.request.LocalSolrQueryRequest;
|
||||||
|
|
||||||
import java.util.List;
|
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 {
|
public void testResolveAnalysisRequest() throws Exception {
|
||||||
ModifiableSolrParams params = new ModifiableSolrParams();
|
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(AnalysisParams.FIELD_VALUE, "the quick red fox jumped over the lazy brown dogs");
|
||||||
params.add(CommonParams.Q, "fox brown");
|
params.add(CommonParams.Q, "fox brown");
|
||||||
|
|
||||||
FieldAnalysisRequest request = handler.resolveAnalysisRequest(params);
|
FieldAnalysisRequest request = handler.resolveAnalysisRequest(new LocalSolrQueryRequest(h.getCore(), params));
|
||||||
List<String> fieldNames = request.getFieldNames();
|
List<String> fieldNames = request.getFieldNames();
|
||||||
assertEquals("Expecting 2 field names", 2, fieldNames.size());
|
assertEquals("Expecting 2 field names", 2, fieldNames.size());
|
||||||
assertEquals("text", fieldNames.get(0));
|
assertEquals("text", fieldNames.get(0));
|
||||||
|
@ -78,21 +79,21 @@ public class FieldAnalysisRequestHandlerTest extends AnalysisRequestHandlerTestB
|
||||||
|
|
||||||
// testing overide of query value using analysis.query param
|
// testing overide of query value using analysis.query param
|
||||||
params.add(AnalysisParams.QUERY, "quick lazy");
|
params.add(AnalysisParams.QUERY, "quick lazy");
|
||||||
request = handler.resolveAnalysisRequest(params);
|
request = handler.resolveAnalysisRequest(new LocalSolrQueryRequest(h.getCore(), params));
|
||||||
assertEquals("quick lazy", request.getQuery());
|
assertEquals("quick lazy", request.getQuery());
|
||||||
|
|
||||||
// testing analysis.showmatch param
|
// testing analysis.showmatch param
|
||||||
params.add(AnalysisParams.SHOW_MATCH, "false");
|
params.add(AnalysisParams.SHOW_MATCH, "false");
|
||||||
request = handler.resolveAnalysisRequest(params);
|
request = handler.resolveAnalysisRequest(new LocalSolrQueryRequest(h.getCore(), params));
|
||||||
assertFalse(request.isShowMatch());
|
assertFalse(request.isShowMatch());
|
||||||
params.set(AnalysisParams.SHOW_MATCH, "true");
|
params.set(AnalysisParams.SHOW_MATCH, "true");
|
||||||
request = handler.resolveAnalysisRequest(params);
|
request = handler.resolveAnalysisRequest(new LocalSolrQueryRequest(h.getCore(), params));
|
||||||
assertTrue(request.isShowMatch());
|
assertTrue(request.isShowMatch());
|
||||||
|
|
||||||
// testing absence of query value
|
// testing absence of query value
|
||||||
params.remove(CommonParams.Q);
|
params.remove(CommonParams.Q);
|
||||||
params.remove(AnalysisParams.QUERY);
|
params.remove(AnalysisParams.QUERY);
|
||||||
request = handler.resolveAnalysisRequest(params);
|
request = handler.resolveAnalysisRequest(new LocalSolrQueryRequest(h.getCore(), params));
|
||||||
assertNull(request.getQuery());
|
assertNull(request.getQuery());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue