Example usage for org.apache.solr.client.solrj SolrQuery addFacetField

List of usage examples for org.apache.solr.client.solrj SolrQuery addFacetField

Introduction

In this page you can find the example usage for org.apache.solr.client.solrj SolrQuery addFacetField.

Prototype

public SolrQuery addFacetField(String... fields) 

Source Link

Document

Add field(s) for facet computation.

Usage

From source file:org.pentaho.di.ui.trans.steps.solrinput.SolrInputDialog.java

License:Apache License

private void getFields() {

    try {/*from w ww .  j a  v a 2s.  c o m*/
        SolrInputMeta meta = new SolrInputMeta();
        getInfo(meta);
        // clear the current fields grid
        wFields.removeAll();
        // get real values
        boolean tryCursor = true;
        boolean facetRequested = false;
        Integer startRecord = 0;
        Integer chunkRowSize = 20;
        String realURL = transMeta.environmentSubstitute(meta.getURL());
        String realQ = transMeta.environmentSubstitute(meta.getQ());
        String realSort = transMeta.environmentSubstitute(meta.getSort());
        String realCursor = transMeta.environmentSubstitute(meta.getCursor());
        String realFq = transMeta.environmentSubstitute(meta.getFq());
        String realFl = transMeta.environmentSubstitute(meta.getFl());
        String realFacetQuery = transMeta.environmentSubstitute(meta.getFacetQuery());
        String realFacetField = transMeta.environmentSubstitute(meta.getFacetField());
        /* Send and Get the report */
        SolrQuery query = new SolrQuery();
        query.set("rows", chunkRowSize);
        if (realQ != null && !realQ.equals("")) {
            query.set("q", realQ);
        }
        if (realSort != null && !realSort.equals("")) {
            query.set("sort", realSort);
        } else {
            tryCursor = false;
        }
        if (realCursor != null && !realCursor.equals("")) {
            if (realCursor.equals("No")) {
                tryCursor = false;
            }
        }
        if (realFl != null && !realFl.equals("")) {
            query.set("fl", realFl);
        }
        if (realFq != null && !realFq.equals("")) {
            query.set("fq", realFq);
        }
        if (realFacetField != null && !realFacetField.equals("")) {
            //TODO incorporate multiple facet fields at once
            //String[] facetFields = realFacetField.split("\\s*,\\s*");
            //for(int i =0; i < facetFields.length; i++){
            query.addFacetField(realFacetField);
            //}
            query.setFacet(true);
            query.setFacetLimit(-1);
            query.setFacetMinCount(0);
            query.setFacetSort("count");
            query.set("rows", 0);
            tryCursor = false;
            facetRequested = true;
        }
        if (realFacetQuery != null && !realFacetQuery.equals("")) {
            query.addFacetQuery(realFacetQuery);
        }
        // You can't use "TimeAllowed" with "CursorMark"
        // The documentation says "Values <= 0 mean 
        // no time restriction", so setting to 0.
        query.setTimeAllowed(0);
        HttpSolrServer solr = new HttpSolrServer(realURL);
        String cursorMark = CursorMarkParams.CURSOR_MARK_START;
        boolean done = false;
        List<String> headerNames = new ArrayList<String>();
        QueryResponse rsp = null;
        while (!done) {
            if (tryCursor) {
                query.set(CursorMarkParams.CURSOR_MARK_PARAM, cursorMark);
            } else {
                query.setStart(startRecord);
            }
            try {
                rsp = solr.query(query);
            } catch (SolrServerException e) {
                e.printStackTrace();
            }
            if (facetRequested) {
                headerNames.add(rsp.getFacetFields().get(0).getName());
                headerNames.add("count");
                done = true;
            } else {
                SolrDocumentList docs = rsp.getResults();
                for (SolrDocument doc : docs) {
                    Collection<String> thisNamesArray = doc.getFieldNames();
                    String[] a = thisNamesArray.toArray(new String[thisNamesArray.size()]);
                    for (int j = 0; j < a.length; j++) {
                        if (!headerNames.contains(a[j])) {
                            headerNames.add(a[j]);
                        }
                    }
                }
            }
            if (tryCursor) {
                String nextCursorMark = rsp.getNextCursorMark();
                if (cursorMark.equals(nextCursorMark)) {
                    done = true;
                } else {
                    cursorMark = nextCursorMark;
                }
            } else {
                startRecord = startRecord + chunkRowSize;
                if (startRecord >= rsp.getResults().getNumFound()) {
                    done = true;
                }
            }
        }
        getTableView().table.setItemCount(headerNames.size());
        for (int j = 0; j < headerNames.size(); j++) {
            TableItem item = getTableView().table.getItem(j);
            item.setText(1, headerNames.get(j));
        }
        wFields.removeEmptyRows();
        wFields.setRowNums();
        wFields.optWidth(true);
        getInput().setChanged();
    } catch (Exception e) {
        new ErrorDialog(shell, BaseMessages.getString(PKG, "SolrInputMeta.ErrorRetrieveData.DialogTitle"),
                BaseMessages.getString(PKG, "SolrInputMeta.ErrorRetrieveData.DialogMessage"), e);
    }
}

From source file:org.reuseware.sokan.index.solr.FacetedBrowsing.java

License:Open Source License

private static SolrQuery buildQuery(FacetedRequest request) {

    // create query object
    SolrQuery query = new SolrQuery();

    // allow to define a keyword search on facets and values!
    // String queryString = request.getKeywordSearchString();
    // if (queryString != null && !queryString.equals(""))
    // query.setQuery(queryString);

    // maintain faceted constraints
    List<Constraint> constList = request.getConstraints();
    if (constList == null || constList.isEmpty()) {
        return null;
    }/* w w  w.  ja v  a2s  . c  o m*/
    // start building queryString
    String queryString = "";
    String valueString;
    String field;
    EList<String> valueList;
    Set<String> fields = CONTROLER.getFieldNames();
    boolean stop;

    for (Constraint con : constList) {
        valueString = ":(";
        valueList = con.getValues();
        field = SolrUtil.adaptField(con.getName(), fields);
        if (field == null) {
            continue;
        }
        if (valueList.size() == 0 || valueList.contains("")) {
            queryString += "-" + field + ":" + "[\"\" TO *]" + AND;
        } else {
            stop = false;
            for (String value : valueList) {
                //TODO #1261: de-activated to allow complex query construction 
                /*if (value.contains("*")
                      && (value.contains(" ") || value.startsWith("*"))) {
                   stop = true;
                   break;
                }*/

                if (value != null && value.contains("*")) {
                    queryString += field + ":" + value + AND;
                    stop = true;
                    break;
                }

                valueString += "\"" + value + "\" ";
            }
            if (stop) {
                continue;
            }
            queryString += field + CoreUtil.trimLastChar(valueString) + ")" + AND;
        }

    }
    if ("".equals(queryString)) {
        return null;
    }
    queryString = CoreUtil.trimLastSeperator(queryString, AND);
    query.setQuery(queryString);

    // maintain facet fields to get facetCounts
    List<String> facetFields = request.getFacetFields();
    if (facetFields != null && facetFields.size() > 0) {
        query.setFacet(true);
        for (String facet : facetFields) {
            query.addFacetField(facet);
        }
    }

    // TODO #1142: add rows and offset parameters
    CONTROLER.limit(query, request.getRows());

    return query;
}

From source file:org.roda.core.index.utils.SolrUtils.java

private static void setQueryFacetParameter(SolrQuery query, SimpleFacetParameter facetParameter) {
    query.addFacetField(facetParameter.getName());

    query.add(String.format("f.%s.facet.mincount", facetParameter.getName()),
            String.valueOf(facetParameter.getMinCount()));
    query.add(String.format("f.%s.facet.limit", facetParameter.getName()),
            String.valueOf(facetParameter.getLimit()));

}

From source file:org.rsc.liferay.solr.SolrIndexSearcher.java

License:Open Source License

protected Hits doSearch(SearchContext searchContext, Query query) throws Exception {

    SolrQuery solrQuery = translateQuery(searchContext.getCompanyId(), query, searchContext.getSorts(),
            searchContext.getStart(), searchContext.getEnd());

    Map<String, Facet> facets = searchContext.getFacets();

    for (Facet facet : facets.values()) {
        if (facet.isStatic()) {
            continue;
        }// w ww. ja  v  a2  s  . c o  m

        FacetConfiguration facetConfiguration = facet.getFacetConfiguration();

        if (facet instanceof RangeFacet) {
            solrQuery.addFacetField(facetConfiguration.getFieldName());

            JSONObject dataJSONObject = facetConfiguration.getData();

            JSONArray rangesJSONArray = dataJSONObject.getJSONArray("ranges");

            if (rangesJSONArray == null) {
                continue;
            }

            for (int i = 0; i < rangesJSONArray.length(); i++) {
                JSONObject rangeJSONObject = rangesJSONArray.getJSONObject(i);

                String range = rangeJSONObject.getString("range");

                String facetQuery = facetConfiguration.getFieldName() + StringPool.COLON + range;

                solrQuery.addFacetQuery(facetQuery);
            }
        } else {
            solrQuery.addFacetField(facetConfiguration.getFieldName());
        }

        String facetSort = FacetParams.FACET_SORT_COUNT;

        String order = facetConfiguration.getOrder();

        if (order.equals("OrderValueAsc")) {
            facetSort = FacetParams.FACET_SORT_INDEX;
        }

        solrQuery.add("f." + facetConfiguration.getFieldName() + ".facet.sort", facetSort);
    }

    solrQuery.setFacetLimit(-1);

    QueryResponse queryResponse = _solrServer.query(solrQuery, METHOD.POST);

    boolean allResults = false;

    if (solrQuery.getRows() == 0) {
        allResults = true;
    }

    List<FacetField> facetFields = queryResponse.getFacetFields();

    if (facetFields != null) {
        for (FacetField facetField : facetFields) {
            Facet facet = facets.get(facetField.getName());

            FacetCollector facetCollector = null;

            if (facet instanceof RangeFacet) {
                facetCollector = new SolrFacetQueryCollector(facetField.getName(),
                        queryResponse.getFacetQuery());
            } else {
                facetCollector = new SolrFacetFieldCollector(facetField.getName(), facetField);
            }

            facet.setFacetCollector(facetCollector);
        }
    }

    return subset(solrQuery, query, query.getQueryConfig(), queryResponse, allResults);
}

From source file:org.schedoscope.metascope.index.SolrQueryExecutor.java

License:Apache License

/**
 * Perform a query on the metascope solr index. Builds up the query string
 * from the given parameters and sends request to solr server
 * //from  w  w w. j  a v a2s .  co  m
 * @param params
 *          the parameters which are included in the filter query
 * @return a SolrQueryResult object containing the result of the query
 */
public SolrQueryResult query(Map<String, String> params) {
    SolrQuery query = new SolrQuery();

    /* enable facetting */
    query.setFacet(true);

    /* list of all filters; key: name to display, value: entity parameter */
    List<SolrQueryParameter> filter = new ArrayList<SolrQueryParameter>();

    /* list of partition filter */
    List<SolrQueryParameter> partitionFilter = new ArrayList<SolrQueryParameter>();

    /*
     * list of filter which have been set by the user (key = filtername, value =
     * list of selections)
     */
    Map<String, List<String>> activeFilterValues = new HashMap<String, List<String>>();

    /*
     * determine on which type is searched for (either 'Table' or 'Partition')
     */
    String typeFilterValue = params.get(TYPE);
    filter.add(new SolrQueryParameter(FILTER_TYPE, TYPE, FilterType.EXCLUSIVE, FacetSort.COUNT));
    if (typeFilterValue != null && typeFilterValue.equalsIgnoreCase(TYPE_PARTITION)) {
        typeFilterValue = TYPE_PARTITION;
        for (String parameter : fieldEntityService.findDistinctParameters()) {
            partitionFilter.add(new SolrQueryParameter("Parameter: " + parameter, parameter + "_s",
                    FilterType.AND, FacetSort.INDEX));
        }
        for (SolrQueryParameter pFilter : partitionFilter) {
            query.addFacetField(pFilter.getName());
            query.add("f." + pFilter.getName() + ".facet.sort", "index");
            String filterValue = params.get(pFilter.getName());
            if (filterValue != null && !filterValue.isEmpty()) {
                query.addFilterQuery(pFilter.getName() + ":" + "(" + filterValue.replace(",", " AND ") + ")");
            }

        }
    } else {
        typeFilterValue = TYPE_TABLE;
    }
    query.addFilterQuery("{!tag=" + TYPE + "}" + TYPE + ":" + typeFilterValue);
    query.addFacetField("{!ex=" + TYPE + "}" + TYPE);

    /* set solr search query parameter 'q' */
    String searchQueryValue = params.get(URLUtil.SEARCH_QUERY_PARAM);
    if (searchQueryValue == null || searchQueryValue.isEmpty()) {
        searchQueryValue = "*";
        query.setQuery(searchQueryValue);
    } else {
        String[] queryTerms = searchQueryValue.trim().split(" ");
        String queryTerm = "";
        for (String term : queryTerms) {
            if (term.isEmpty()) {
                continue;
            }

            if (!queryTerm.isEmpty()) {
                queryTerm += " AND ";
            }
            queryTerm += "*" + term + "*";
        }
        query.setQuery(queryTerm);
        query.setHighlight(true);
        query.setHighlightSimplePre("<b>");
        query.setHighlightSimplePost("</b>");
        query.setHighlightSnippets(100);
        query.set("hl.fl", "*");
    }

    /* set the remaining filters */
    for (SolrQueryParameter queryFilter : facetFields) {
        filter.add(queryFilter);
        String value = params.get(queryFilter.getName());

        String filterQuery = "";
        String facetField = "";
        if (queryFilter.isExcludeFromFacet()) {
            if (value != null) {
                String[] multipleFilter = value.split(",");
                value = "(";
                for (int i = 0; i < multipleFilter.length; i++) {
                    String filterValue = cleanseValue(multipleFilter[i]).replace(" ", "*");
                    value += "(" + filterValue + ")";
                    if (i < multipleFilter.length - 1) {
                        value += " " + getOperator(queryFilter.getFilterType()) + " ";
                    }
                }
                value += ")";
            }
            filterQuery = "{!tag=" + queryFilter.getName() + "}" + queryFilter.getName() + ":" + value;
            facetField = "{!ex=" + queryFilter.getName() + "}" + queryFilter.getName();
        } else {
            if (value != null) {
                String[] multipleFilter = value.split(",");
                value = "(";
                for (int i = 0; i < multipleFilter.length; i++) {
                    String filterValue = cleanseValue(multipleFilter[i]).replace(" ", "*");
                    value += "(" + filterValue + ")";
                    if (i < multipleFilter.length - 1) {
                        value += " " + getOperator(queryFilter.getFilterType()) + " ";
                    }
                }
                value += ")";
            }
            filterQuery = queryFilter.getName() + ":" + value;
            facetField = queryFilter.getName();
        }

        if (value != null && !value.isEmpty()) {
            query.addFilterQuery(filterQuery);
        }
        query.addFacetField(facetField);

        if (queryFilter.getFacetSort().equals(FacetSort.INDEX)) {
            query.add("f." + queryFilter.getName() + ".facet.sort", "index");
        }
        query.add("f." + queryFilter.getName() + ".facet.limit", "-1");
    }

    /* set facet queries */
    Map<String, String> facetQueryMap = new HashMap<String, String>();
    long now = System.currentTimeMillis() / 1000;
    for (SolrFacetQuery solrFacetQuery : facetQueries) {
        for (SolrHourRange range : solrFacetQuery.getRanges()) {
            long from = range.getFrom() == Long.MAX_VALUE ? 0 : now - (range.getFrom() * 3600);
            String facetQueryString = solrFacetQuery.getName() + ":[" + from + " TO " + now + "]";
            query.addFacetQuery("{!ex=" + solrFacetQuery.getName() + "}" + facetQueryString);
            facetQueryMap.put(solrFacetQuery.getName() + range.getName(), facetQueryString);
        }
        String value = params.get(solrFacetQuery.getName());
        if (value != null) {
            String fq = "{!tag=" + solrFacetQuery.getName() + "}"
                    + facetQueryMap.get(solrFacetQuery.getName() + value);
            query.addFilterQuery(fq);
        }
    }

    /* always sort the entities (for a deterministic view) */
    query.setSort(ID, ORDER.asc);

    /* set pagination information */
    int page = getPageParameter(params);
    int elements = getElementsParameter(params);
    query.setRows(elements);
    query.setStart((page - 1) * elements);

    /* execute the query */
    QueryResponse queryResponse = null;
    try {
        queryResponse = solrClient.query(query);
    } catch (Exception e) {
        e.printStackTrace();
    }

    SolrDocumentList list = queryResponse.getResults();

    /* get table / view entities from local repository */
    List<SolrQueryResultEntity> resultEntities = new LinkedList<SolrQueryResultEntity>();
    String resultType = "";
    for (SolrDocument solrDocument : list) {
        String id = (String) solrDocument.get(ID);

        if (typeFilterValue.equalsIgnoreCase(TYPE_PARTITION)) {
            if (!searchQueryValue.equals("*")) {
                resultEntities.add(new SolrQueryResultEntity(viewEntityService.findByUrlPath(id),
                        queryResponse.getHighlighting().get(id)));
            } else {
                resultEntities.add(new SolrQueryResultEntity(viewEntityService.findByUrlPath(id)));
            }
            resultType = TYPE_PARTITION;
        } else if (typeFilterValue.equalsIgnoreCase(TYPE_TABLE)) {
            if (!searchQueryValue.equals("*")) {
                resultEntities.add(new SolrQueryResultEntity(tableEntityService.findByFqdn(id),
                        queryResponse.getHighlighting().get(id)));
            } else {
                resultEntities.add(new SolrQueryResultEntity(tableEntityService.findByFqdn(id)));
            }
        }
    }
    if (resultType.isEmpty()) {
        resultType = TYPE_TABLE;
    }

    filter.addAll(partitionFilter);

    /* get the facet values and counts */
    Map<String, List<SolrFacet>> facetValues = new HashMap<String, List<SolrFacet>>();
    for (SolrQueryParameter f : filter) {
        if (!f.getName().equals(URLUtil.SEARCH_QUERY_PARAM)) {
            List<SolrFacet> values = new ArrayList<SolrFacet>();
            FacetField facet = queryResponse.getFacetField(f.getName());
            for (Count count : facet.getValues()) {
                values.add(new SolrFacet(count.getName(), count.getCount()));
            }
            facetValues.put(f.getName(), values);
        }
    }

    /* remove the type filter */
    filter.remove(0);

    for (SolrFacetQuery solrFacetQuery : facetQueries) {
        filter.add(new SolrQueryParameter(solrFacetQuery.getDisplayName(), solrFacetQuery.getName(),
                FilterType.EXCLUSIVE));
        List<SolrFacet> values = new ArrayList<SolrFacet>();
        for (SolrHourRange range : solrFacetQuery.getRanges()) {
            long facetQueryCount = getFacetQueryCount(queryResponse, "{!ex=" + solrFacetQuery.getName() + "}"
                    + facetQueryMap.get(solrFacetQuery.getName() + range.getName()));
            values.add(new SolrFacet(range.getName(), facetQueryCount));
        }
        facetValues.put(solrFacetQuery.getName(), values);
    }

    /* get the active filter values which have been selected by the user */
    addToActiveFilterValues(activeFilterValues, params, filter);

    /* build and return the result */
    SolrQueryResult result = new SolrQueryResult().withResultEntities(resultEntities).withResultType(resultType)
            .withFilters(filter).withFacetValues(facetValues).withActiveFilterValues(activeFilterValues)
            .withSearchQuery(searchQueryValue).withPage(page).withElements(elements)
            .withTotalPages((int) Math.ceil(((double) list.getNumFound()) / elements))
            .withTotalResults(list.getNumFound());
    return result;
}

From source file:org.sindice.siren.demo.ncpr.NCPRQuery.java

License:Apache License

/**
 * A query that shows how to combine SIREn query with the Solr's facet feature
 * on a Solr field.//from  w w  w. j  ava2 s. com
 */
private SolrQuery getDeviceControllerFacet() {
    final SolrQuery query = new SolrQuery();
    query.setQuery("Connector : [ { RatedOutputCurrent : xsd:long([32 TO *]) } ]");
    query.addFacetField("DeviceController_facet");
    return query;
}

From source file:org.sparkcommerce.core.search.service.solr.SolrSearchServiceImpl.java

License:Apache License

/**
 * Notifies solr about which facets you want it to determine results and counts for
 * /*  w  ww. jav a  2s  . c om*/
 * @param query
 * @param namedFacetMap
 */
protected void attachFacets(SolrQuery query, Map<String, SearchFacetDTO> namedFacetMap) {
    query.setFacet(true);
    for (Entry<String, SearchFacetDTO> entry : namedFacetMap.entrySet()) {
        SearchFacetDTO dto = entry.getValue();
        String facetTagField = entry.getValue().isActive() ? shs.getGlobalFacetTagField() : entry.getKey();

        // Clone the list - we don't want to remove these facets from the DB
        List<SearchFacetRange> facetRanges = new ArrayList<SearchFacetRange>(
                dto.getFacet().getSearchFacetRanges());

        if (extensionManager != null) {
            extensionManager.getProxy().filterSearchFacetRanges(dto, facetRanges);
        }

        if (facetRanges != null && facetRanges.size() > 0) {
            for (SearchFacetRange range : facetRanges) {
                query.addFacetQuery(getSolrTaggedFieldString(entry.getKey(), facetTagField, "ex", range));
            }
        } else {
            query.addFacetField(getSolrTaggedFieldString(entry.getKey(), facetTagField, "ex", null));
        }
    }
}

From source file:org.springframework.data.solr.core.DefaultQueryParser.java

License:Apache License

private void appendFacetingOnFields(SolrQuery solrQuery, FacetQuery query) {
    FacetOptions facetOptions = query.getFacetOptions();
    solrQuery.addFacetField(convertFieldListToStringArray(facetOptions.getFacetOnFields()));
    if (facetOptions.hasFacetPrefix()) {
        solrQuery.setFacetPrefix(facetOptions.getFacetPrefix());
    }// ww  w  .  ja  v  a2s .c  o m
    for (FieldWithFacetParameters parametrizedField : facetOptions.getFieldsWithParameters()) {
        addPerFieldFacetParameters(solrQuery, parametrizedField);
        if (parametrizedField.getSort() != null
                && FacetOptions.FacetSort.INDEX.equals(parametrizedField.getSort())) {
            addFieldSpecificParameterToSolrQuery(solrQuery, parametrizedField,
                    new FacetParameter(FacetParams.FACET_SORT, FacetParams.FACET_SORT_INDEX));
        }

    }
}

From source file:org.wso2.carbon.registry.indexing.solr.SolrClient.java

License:Open Source License

private String addFacetFields(Map<String, String> fields, SolrQuery query) {
    //set the facet true to enable facet
    //Need to set the Facet to true to enable Facet Query.
    query.setFacet(true);//w  w w . jav a2  s .co m
    String fieldName = fields.get(IndexingConstants.FACET_FIELD_NAME);
    String queryField = null;
    if (fieldName != null) {
        //set the field for the facet
        if (IndexingConstants.FIELD_TAGS.equals(fieldName) || IndexingConstants.FIELD_COMMENTS.equals(fieldName)
                || IndexingConstants.FIELD_ASSOCIATION_DESTINATIONS.equals(fieldName)
                || IndexingConstants.FIELD_ASSOCIATION_TYPES.equals(fieldName)) {
            queryField = fieldName + SolrConstants.SOLR_MULTIVALUED_STRING_FIELD_KEY_SUFFIX;
            query.addFacetField(queryField);
        } else {
            queryField = fieldName + SolrConstants.SOLR_STRING_FIELD_KEY_SUFFIX;
            query.addFacetField(queryField);
        }
        //remove the facet field avoid affecting to query results
        fields.remove(IndexingConstants.FACET_FIELD_NAME);
        //set the limit for the facet
        if (fields.get(IndexingConstants.FACET_LIMIT) != null) {
            query.setFacetLimit(Integer.parseInt(fields.get(IndexingConstants.FACET_LIMIT)));
            fields.remove(IndexingConstants.FACET_LIMIT);
        } else {
            query.setFacetLimit(IndexingConstants.FACET_LIMIT_DEFAULT);
        }
        //set the min count for the facet
        if (fields.get(IndexingConstants.FACET_MIN_COUNT) != null) {
            query.setFacetMinCount(Integer.parseInt(fields.get(IndexingConstants.FACET_MIN_COUNT)));
            fields.remove(IndexingConstants.FACET_MIN_COUNT);
        } else {
            query.setFacetMinCount(IndexingConstants.FACET_MIN_COUNT_DEFAULT);
        }
        //set the sort value for facet: possible values : index or count
        if (fields.get(IndexingConstants.FACET_SORT) != null) {
            query.setFacetSort(fields.get(IndexingConstants.FACET_SORT));
            fields.remove(IndexingConstants.FACET_SORT);
        }
        // set the prefix value for facet
        if (fields.get(IndexingConstants.FACET_PREFIX) != null) {
            query.setFacetPrefix(fields.get(IndexingConstants.FACET_PREFIX));
            fields.remove(IndexingConstants.FACET_PREFIX);
        }
    }
    return queryField;
}

From source file:org.zaizi.sensefy.api.service.SolrSmartAutoCompleteService.java

License:Open Source License

/**
 * <p>/*from   w ww .  ja  v  a 2  s.  co  m*/
 * Suggestions from Facet Prefix
 * </p>
 *
 * @param attributesQuery
 * @param termToComplete
 * @param numberOfSuggestions
 * @param suggestionField
 * @param solrCore
 * @return
 * @throws SolrServerException
 */
private List<String> suggestionsFromFacetPrefix(SolrQuery attributesQuery, String termToComplete,
        int numberOfSuggestions, String suggestionField, SolrServer solrCore)
        throws SolrServerException, IOException {
    List<String> suggestions = new ArrayList<String>();

    attributesQuery.setRows(0);
    attributesQuery.setFacet(true);
    attributesQuery.addFacetField(suggestionField);
    attributesQuery.setFacetMinCount(1);
    attributesQuery.setFacetLimit(numberOfSuggestions);
    // if ( termToComplete != null && !termToComplete.isEmpty() )
    attributesQuery.setFacetPrefix(suggestionField, termToComplete);

    QueryResponse attributesQueryResponse;
    attributesQueryResponse = solrCore.query(attributesQuery);
    FacetField facetField = attributesQueryResponse.getFacetField(suggestionField);
    List<FacetField.Count> facets = facetField.getValues();
    for (FacetField.Count singleFacet : facets) {
        suggestions.add(singleFacet.getName());
    }
    return suggestions;
}