Example usage for org.apache.solr.handler.component ShardRequest PURPOSE_REFINE_PIVOT_FACETS

List of usage examples for org.apache.solr.handler.component ShardRequest PURPOSE_REFINE_PIVOT_FACETS

Introduction

In this page you can find the example usage for org.apache.solr.handler.component ShardRequest PURPOSE_REFINE_PIVOT_FACETS.

Prototype

int PURPOSE_REFINE_PIVOT_FACETS

To view the source code for org.apache.solr.handler.component ShardRequest PURPOSE_REFINE_PIVOT_FACETS.

Click Source Link

Usage

From source file:org.alfresco.solr.component.RewriteFacetParametersComponent.java

License:Open Source License

/**
 * Update the facet fields to use Solr field names rather than ACS property names.
 *
 * @param fixed The updated params object.
 * @param params The original params object.
 * @param paramName The name of the mincount parameter to rewrite (e.g. "facet.mincount" or "facet.pivot.mincount").
 * @param fieldMappings A list of mappings from Alfresco property names to Solr field names.
 * @param req The original request./*from   w  ww.  j a  v a2s . c o  m*/
 * @return An array of the facet field names.
 */
private List<String> rewriteFacetFieldList(ModifiableSolrParams fixed, SolrParams params, String paramName,
        Map<String, String> fieldMappings, SolrQueryRequest req) {
    String shardPurpose = req.getParams().get(ShardParams.SHARDS_PURPOSE);
    boolean isRefinementRequest = (shardPurpose != null)
            ? (shardPurpose.equals(String.valueOf(ShardRequest.PURPOSE_REFINE_FACETS)))
                    || (shardPurpose.equals(String.valueOf(ShardRequest.PURPOSE_REFINE_PIVOT_FACETS)))
            : false;
    String[] facetFieldsOrig = params.getParams(paramName);
    List<String> facetFieldList = new ArrayList<>();
    if (facetFieldsOrig != null) {
        ArrayList<String> newFacetFields = new ArrayList<String>();
        for (String facetFields : facetFieldsOrig) {
            StringBuilder commaSeparated = new StringBuilder();
            StringBuilder mapping = new StringBuilder();
            StringBuilder unmapped = new StringBuilder();

            String[] fields = parseFacetField(facetFields);

            for (String field : fields) {
                String prefix = "";
                field = field.trim();

                if (field.endsWith("()")) {
                    // skip facet functions 
                    continue;
                }

                if (field.startsWith("{!") && !(isRefinementRequest)) {
                    int index = field.indexOf("}");
                    if ((index > 0) && (index < (field.length() - 1))) {
                        prefix = field.substring(0, index + 1);
                        field = field.substring(index + 1);
                    }
                }

                boolean noMappingIsRequired = req.getSchema().getFieldOrNull(field) != null
                        || isRefinementRequest;
                if (noMappingIsRequired) {
                    if (commaSeparated.length() > 0) {
                        commaSeparated.append(",");
                        mapping.append(",");
                        unmapped.append(",");
                    }
                    commaSeparated.append(prefix).append(field);
                    mapping.append(field);
                    unmapped.append(field);
                    facetFieldList.add(field);
                } else {
                    String mappedField = AlfrescoSolrDataModel.getInstance().mapProperty(field, FieldUse.FACET,
                            req);

                    if (commaSeparated.length() > 0) {
                        commaSeparated.append(",");
                        mapping.append(",");
                        unmapped.append(",");
                    }
                    commaSeparated.append(prefix).append(mappedField);
                    mapping.append(mappedField);
                    unmapped.append(field);
                    facetFieldList.add(mappedField);
                }
            }
            if (!facetFields.equals(commaSeparated.toString())) {
                fieldMappings.put(unmapped.toString(), mapping.toString());
            }
            if (commaSeparated.length() > 0) {
                newFacetFields.add(commaSeparated.toString());
            }
        }
        fixed.set(paramName, newFacetFields.toArray(new String[newFacetFields.size()]));
    }

    return facetFieldList;
}