blob: 032af0c187c53c3451d49e4c5aa950b52c2226d5 [file] [log] [blame]
/*
* 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.client.solrj.response;
import org.apache.solr.common.util.NamedList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* A response that is returned by processing the {@link org.apache.solr.client.solrj.request.FieldAnalysisRequest}.
* Holds a map of {@link Analysis} objects per field name as well as a map of {@link Analysis} objects per field type.
*
*
* @since solr 1.4
*/
public class FieldAnalysisResponse extends AnalysisResponseBase {
private Map<String, Analysis> analysisByFieldTypeName = new HashMap<>();
private Map<String, Analysis> analysisByFieldName = new HashMap<>();
@Override
public void setResponse(NamedList<Object> response) {
super.setResponse(response);
@SuppressWarnings("unchecked")
NamedList<NamedList<NamedList<NamedList<Object>>>> analysisNL
= (NamedList<NamedList<NamedList<NamedList<Object>>>>) response.get("analysis");
for (Map.Entry<String, NamedList<NamedList<Object>>> entry
: analysisNL.get("field_types")) {
analysisByFieldTypeName.put(entry.getKey(), buildAnalysis(entry.getValue()));
}
for (Map.Entry<String, NamedList<NamedList<Object>>> entry
: analysisNL.get("field_names")) {
analysisByFieldName.put(entry.getKey(), buildAnalysis(entry.getValue()));
}
}
private Analysis buildAnalysis(NamedList<NamedList<Object>> value) {
Analysis analysis = new Analysis();
NamedList<Object> queryNL = value.get("query");
List<AnalysisPhase> phases = (queryNL == null) ? null : buildPhases(queryNL);
analysis.setQueryPhases(phases);
NamedList<Object> indexNL = value.get("index");
phases = buildPhases(indexNL);
analysis.setIndexPhases(phases);
return analysis;
}
/**
* Returns the number of field type analyses.
*
* @return The number of field type analyses.
*/
public int getFieldTypeAnalysisCount() {
return analysisByFieldTypeName.size();
}
/**
* Returns the analysis for the given field type or {@code null} if no such analysis exists.
*
* @param fieldTypeName The name of the field type.
*
* @return The analysis for the given field type.
*/
public Analysis getFieldTypeAnalysis(String fieldTypeName) {
return analysisByFieldTypeName.get(fieldTypeName);
}
/**
* Returns all field type analyses with their associated field types.
*
* @return All field type analyses with their associated field types.
*/
public Iterable<Map.Entry<String, Analysis>> getAllFieldTypeAnalysis() {
return analysisByFieldTypeName.entrySet();
}
/**
* Returns the number of field name analyses.
*
* @return The number of field name analyses.
*/
public int getFieldNameAnalysisCount() {
return analysisByFieldName.size();
}
/**
* Returns the analysis for the given field name or {@code null} if no such analysis exists.
*
* @param fieldName The field name.
*
* @return The analysis for the given field name.
*/
public Analysis getFieldNameAnalysis(String fieldName) {
return analysisByFieldName.get(fieldName);
}
/**
* Returns all field name analysese with their associated field names.
*
* @return all field name analysese with their associated field names.
*/
public Iterable<Map.Entry<String, Analysis>> getAllFieldNameAnalysis() {
return analysisByFieldName.entrySet();
}
//================================================= Inner Classes ==================================================
/**
* The analysis of a field. Holds a list of all the query time analysis phases (if a query analysis was requested)
* as well as index time phases.
*/
public static class Analysis {
private List<AnalysisPhase> queryPhases;
private List<AnalysisPhase> indexPhases;
/**
* This class should only be instantiated internally.
*/
private Analysis() {
}
/**
* Returns the number of query time analysis phases in this analysis or
* {@code -1} if query time analysis doesn't exist.
*
* @return Returns the number of query time analysis phases in this
* analysis or {@code -1} if query time analysis doesn't exist.
*/
public int getQueryPhasesCount() {
return queryPhases == null ? -1 : queryPhases.size();
}
/**
* Returns the query time analysis phases for this analysis or {@code null}
* if query time analysis doesn't exist.
*
*
* @return The query time analysis phases for this analysis or {@code null}
* if query time analysis doesn't exist.
*
*/
public Iterable<AnalysisPhase> getQueryPhases() {
return queryPhases;
}
/**
* Returns the index time analysis phases for this analysis.
*
* @return The index time analysis phases for this analysis.
*/
public int getIndexPhasesCount() {
return indexPhases.size();
}
/**
* Returns the index time analysis phases for this analysis.
*
* @return The index time analysis phases for this analysis.
*/
public Iterable<AnalysisPhase> getIndexPhases() {
return indexPhases;
}
private void setQueryPhases(List<AnalysisPhase> queryPhases) {
this.queryPhases = queryPhases;
}
private void setIndexPhases(List<AnalysisPhase> indexPhases) {
this.indexPhases = indexPhases;
}
}
}