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

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

Introduction

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

Prototype

public SolrQuery setFacet(boolean b) 

Source Link

Document

enable/disable faceting.

Usage

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;
    }/*from w ww .j  a v  a 2 s  .  c om*/
    // 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.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 .java 2 s .  c  o  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.sparkcommerce.core.search.service.solr.SolrSearchServiceImpl.java

License:Apache License

/**
 * Notifies solr about which facets you want it to determine results and counts for
 * /*  ww  w .  jav a 2s .  co  m*/
 * @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 boolean enableFaceting(SolrQuery solrQuery, FacetQuery query) {
    FacetOptions facetOptions = query.getFacetOptions();
    if (facetOptions == null || (!facetOptions.hasFields() && !facetOptions.hasFacetQueries()
            && !facetOptions.hasPivotFields())) {
        return false;
    }// w w w. ja va  2s  .  co  m
    solrQuery.setFacet(true);
    solrQuery.setFacetMinCount(facetOptions.getFacetMinCount());
    solrQuery.setFacetLimit(facetOptions.getPageable().getPageSize());
    if (facetOptions.getPageable().getPageNumber() > 0) {
        int offset = Math.max(0, facetOptions.getPageable().getOffset());
        solrQuery.set(FacetParams.FACET_OFFSET, offset);
    }
    if (FacetOptions.FacetSort.INDEX.equals(facetOptions.getFacetSort())) {
        solrQuery.setFacetSort(FacetParams.FACET_SORT_INDEX);
    }
    return true;
}

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);
    String fieldName = fields.get(IndexingConstants.FACET_FIELD_NAME);
    String queryField = null;//from  ww w .j  a  va 2s .c o  m
    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>// ww  w  . j  a  va2  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;
}

From source file:org.zaizi.sensefy.api.solr.querybuilder.QueryBuilder.java

License:Open Source License

/**
 * return a solr query built with all the parameters in input . Spellcheck
 * included/*  ww  w . j ava  2 s. c  o m*/
 * 
 * @param query
 * @param fields
 * @param filters
 * @param start
 * @param rows
 * @param security
 * @param clustering
 * @param sensefyToken
 * @return
 * @throws SensefyException
 */
public static SolrQuery getSolrQuery(String query, String fields, boolean facet,
        FacetConfigurationList facetConfig, String filters, int start, Integer rows, String order,
        boolean security, boolean spellcheck, boolean clustering, Principal user) {

    SensefyUser sensefyUser = SensefyUserMapper.getSensefyUserFromPrincipal(user);

    if (rows == null) {
        rows = DEFAULT_ROWS;
    }
    // retrieve the documents from primary index
    SolrQuery documentsQuery = new SolrQuery(query);
    Set<String> selectedFields = new HashSet<String>();
    documentsQuery.setRows(rows);
    documentsQuery.set("spellcheck", spellcheck);
    documentsQuery.set("clustering", clustering);
    if (fields != null && !fields.isEmpty()) {
        String[] fieldsArray = fields.split(",");
        documentsQuery.setFields(fieldsArray);
    }
    if (filters != null && !filters.isEmpty()) {
        String[] filtersArray = buildFilterQueries(filters.split(","), selectedFields);
        documentsQuery.setFilterQueries(filtersArray);
    }
    if (order != null && !order.isEmpty()) {
        documentsQuery.set(CommonParams.SORT, order);
    }

    if (security) {

        String filterQueryACLs = SecurityQueryBuilder.getSecurityFilterQuery(sensefyUser);
        documentsQuery.addFilterQuery(filterQueryACLs);

    }
    documentsQuery.set("TZ", sensefyUser.getTimezone().getID());
    documentsQuery.setStart(start);
    ModifiableSolrParams querySolrParams = new ModifiableSolrParams();
    if (facet) {
        // facets must be created with proper exclusion tag where needed
        documentsQuery.setFacet(true);
        List<FacetConfiguration> facetConfigurations = facetConfig.getFacetConfigurations();
        for (FacetConfiguration facetConfiguration : facetConfigurations) {
            String tag = null;
            if (selectedFields.contains(facetConfiguration.getField()))
                tag = "tag-" + facetConfiguration.getField();
            facetConfiguration.getSolrFacetParams(querySolrParams, tag);
        }
    }
    documentsQuery.add(querySolrParams);
    return documentsQuery;
}

From source file:org.zenoss.zep.index.impl.solr.SolrEventIndexBackend.java

License:Open Source License

private SolrQuery buildSolrQuery(EventFilter filter, EventFilter exclusionFilter, Integer limit, Integer offset,
        List<EventSort> sortList, SolrFieldFilter fieldFilter) throws ZepException {
    final String query = buildQuery(filter, exclusionFilter);
    SolrQuery solrQuery = new SolrQuery().setQuery(query);

    if (limit != null && limit < MAX_RESULTS && limit > 0)
        solrQuery.setRows(limit);/*from   www .  j  a v  a2s . co  m*/
    else
        solrQuery.setRows(MAX_RESULTS);

    if (offset != null)
        solrQuery.setStart(offset);

    if (sortList == null)
        solrQuery.clearSorts();
    else if (sortList.isEmpty())
        solrQuery.addSort(SortClause.desc(IndexConstants.FIELD_LAST_SEEN_TIME));
    else
        for (EventSort sort : sortList)
            for (SortClause clause : createSortClauses(sort))
                solrQuery.addSort(clause);

    if (fieldFilter != null) {
        switch (fieldFilter) {
        case DEFAULTS:
            break;
        case JUST_UUID:
            solrQuery.setFields(IndexConstants.FIELD_UUID);
            break;
        case UUID_LAST_SEEN_AND_PROTOBUF:
            solrQuery.setFields(IndexConstants.FIELD_UUID, IndexConstants.FIELD_LAST_SEEN_TIME,
                    IndexConstants.FIELD_PROTOBUF);
            break;
        case SEARCH_EVENT_TAG_SEVERITIES:
            solrQuery.setFields(IndexConstants.FIELD_ELEMENT_IDENTIFIER,
                    IndexConstants.FIELD_ELEMENT_SUB_IDENTIFIER, IndexConstants.FIELD_SEVERITY,
                    IndexConstants.FIELD_STATUS, IndexConstants.FIELD_TAGS, IndexConstants.FIELD_COUNT);
            break;
        default:
            throw new IllegalStateException("Unexpected fieldFilter: " + fieldFilter);
        }
    }
    solrQuery.setIncludeScore(false);
    solrQuery.setHighlight(false);
    solrQuery.setTerms(false);
    solrQuery.setFacet(false);

    return solrQuery;
}

From source file:org.zenoss.zep.index.impl.solr.SolrEventIndexBackend.java

License:Open Source License

@Override
protected void searchEventTagSeverities(EventFilter filter, final EventTagSeverityCounter counter)
        throws ZepException {
    assertReady();/*from  w w w. j  a  va2  s  .  c  om*/
    if (filter.getTagFilterCount() == 0) {
        SolrQuery solrQuery = buildSolrQuery(filter, null, null, null, null, SolrFieldFilter.DEFAULTS);
        solrQuery.setRows(0);
        solrQuery.setFields();
        solrQuery.setFacet(true);
        solrQuery.setFacetMinCount(1);
        solrQuery.setFacetLimit(-1);
        solrQuery.addFacetPivotField(IndexConstants.FIELD_ELEMENT_IDENTIFIER, IndexConstants.FIELD_SEVERITY,
                IndexConstants.FIELD_STATUS, IndexConstants.FIELD_COUNT);
        try {
            QueryResponse response = queryServer.query(solrQuery);
            for (PivotField pivotElementId : response.getFacetPivot().getVal(0)) {
                final String uuid = (String) pivotElementId.getValue();
                for (PivotField pivotSeverity : pivotElementId.getPivot()) {
                    final EventSeverity severity = EventSeverity
                            .valueOf(Integer.parseInt((String) pivotSeverity.getValue()));
                    for (PivotField pivotStatus : pivotSeverity.getPivot()) {
                        final EventStatus status = EventStatus
                                .valueOf(Integer.parseInt((String) pivotStatus.getValue()));
                        final boolean acknowledged = EventStatus.STATUS_ACKNOWLEDGED.equals(status);
                        for (PivotField pivotCount : pivotStatus.getPivot()) {
                            final Integer count = pivotCount.getCount() * (Integer) pivotCount.getValue();
                            counter.update(uuid, severity, count, acknowledged);
                        }
                    }
                }
            }
        } catch (SolrServerException e) {
            throw new ZepException(e);
        }
    } else {
        SolrQuery solrQuery = buildSolrQuery(filter, null, null, null, null,
                SolrFieldFilter.SEARCH_EVENT_TAG_SEVERITIES);
        try {
            queryServer.queryAndStreamResponse(solrQuery, new StreamingResponseCallback() {
                @Override
                public void streamSolrDocument(SolrDocument doc) {
                    final EventSeverity severity = EventSeverity
                            .valueOf(Integer.parseInt((String) doc.getFieldValue(FIELD_SEVERITY)));
                    final EventStatus status = EventStatus
                            .valueOf(Integer.parseInt((String) doc.getFieldValue(FIELD_STATUS)));
                    final boolean acknowledged = EventStatus.STATUS_ACKNOWLEDGED.equals(status);
                    final int count = Integer.parseInt((String) doc.getFieldValue(FIELD_COUNT));
                    for (String fieldName : new String[] { FIELD_ELEMENT_IDENTIFIER,
                            FIELD_ELEMENT_SUB_IDENTIFIER }) {
                        final String uuid = (String) doc.getFieldValue(fieldName);
                        counter.update(uuid, severity, count, acknowledged);
                    }
                    for (Object tag : doc.getFieldValues(FIELD_TAGS)) {
                        counter.update((String) tag, severity, count, acknowledged);
                    }
                }

                @Override
                public void streamDocListInfo(long numFound, long start, Float maxScore) {
                    // ignored
                }
            });
        } catch (SolrServerException e) {
            throw new ZepException(e);
        } catch (IOException e) {
            throw new ZepException(e);
        }
    }
}

From source file:ru.org.linux.search.SearchViewer.java

License:Apache License

public QueryResponse performSearch(SolrServer search) throws SolrServerException {
    SolrQuery params = new SolrQuery();
    // set search query params
    params.set("q", query.getQ());
    params.set("rows", SEARCH_ROWS);
    params.set("start", query.getOffset());

    params.set("qt", "edismax");

    if (query.getRange().getParam() != null) {
        params.add("fq", query.getRange().getParam());
    }//w w w .  ja v  a  2  s.c o  m

    if (query.getInterval().getRange() != null) {
        params.add("fq", query.getInterval().getRange());
    }

    params.setFacetMinCount(1);
    params.setFacet(true);

    String section = query.getSection();

    if (section != null && !section.isEmpty() && !"0".equals(section)) {
        params.add("fq", "{!tag=dt}section:" + query.getSection());
        params.addFacetField("{!ex=dt}section");

        params.addFacetField("{!ex=dt}group_id");
    } else {
        params.addFacetField("section");
        params.addFacetField("group_id");
    }

    if (query.getUser() != null) {
        User user = query.getUser();

        if (query.isUsertopic()) {
            params.add("fq", "topic_user_id:" + user.getId());
        } else {
            params.add("fq", "user_id:" + user.getId());
        }
    }

    if (query.getGroup() != 0) {
        params.add("fq", "{!tag=dt}group_id:" + query.getGroup());
    }

    params.set("sort", query.getSort().getParam());

    return search.query(params);
}