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.apache.ofbiz.solr.SolrProductSearch.java

License:Apache License

/**
 * Runs a query on the Solr Search Engine and returns the results.
 * <p>//  w  w w.  ja  v a  2  s . c  o  m
 * This function only returns an object of type QueryResponse, so it is probably not a good idea to call it directly from within the
 * groovy files (As a decent example on how to use it, however, use keywordSearch instead).
 */
public static Map<String, Object> runSolrQuery(DispatchContext dctx, Map<String, Object> context) {
    // get Connection
    HttpSolrClient client = null;
    String solrIndexName = (String) context.get("indexName");
    Map<String, Object> result;
    try {
        client = SolrUtil.getInstance().getHttpSolrClient(solrIndexName);
        // create Query Object
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery((String) context.get("query"));
        // solrQuery.setQueryType("dismax");
        boolean faceted = (Boolean) context.get("facet");
        if (faceted) {
            solrQuery.setFacet(faceted);
            solrQuery.addFacetField("manu");
            solrQuery.addFacetField("cat");
            solrQuery.setFacetMinCount(1);
            solrQuery.setFacetLimit(8);

            solrQuery.addFacetQuery("listPrice:[0 TO 50]");
            solrQuery.addFacetQuery("listPrice:[50 TO 100]");
            solrQuery.addFacetQuery("listPrice:[100 TO 250]");
            solrQuery.addFacetQuery("listPrice:[250 TO 500]");
            solrQuery.addFacetQuery("listPrice:[500 TO 1000]");
            solrQuery.addFacetQuery("listPrice:[1000 TO 2500]");
            solrQuery.addFacetQuery("listPrice:[2500 TO 5000]");
            solrQuery.addFacetQuery("listPrice:[5000 TO 10000]");
            solrQuery.addFacetQuery("listPrice:[10000 TO 50000]");
            solrQuery.addFacetQuery("listPrice:[50000 TO *]");
        }

        boolean spellCheck = (Boolean) context.get("spellcheck");
        if (spellCheck) {
            solrQuery.setParam("spellcheck", spellCheck);
        }

        boolean highLight = (Boolean) context.get("highlight");
        if (highLight) {
            solrQuery.setHighlight(highLight);
            solrQuery.setHighlightSimplePre("<span class=\"highlight\">");
            solrQuery.addHighlightField("description");
            solrQuery.setHighlightSimplePost("</span>");
            solrQuery.setHighlightSnippets(2);
        }

        // Set additional Parameter
        // SolrQuery.ORDER order = SolrQuery.ORDER.desc;

        if (context.get("viewIndex") != null && (Integer) context.get("viewIndex") > 0) {
            solrQuery.setStart((Integer) context.get("viewIndex"));
        }
        if (context.get("viewSize") != null && (Integer) context.get("viewSize") > 0) {
            solrQuery.setRows((Integer) context.get("viewSize"));
        }

        // if ((List) context.get("queryFilter") != null && ((ArrayList<SolrDocument>) context.get("queryFilter")).size() > 0) {
        // List filter = (List) context.get("queryFilter");
        // String[] tn = new String[filter.size()];
        // Iterator it = filter.iterator();
        // for (int i = 0; i < filter.size(); i++) {
        // tn[i] = (String) filter.get(i);
        // }
        // solrQuery.setFilterQueries(tn);
        // }
        String queryFilter = (String) context.get("queryFilter");
        if (UtilValidate.isNotEmpty(queryFilter))
            solrQuery.setFilterQueries(queryFilter.split(" "));
        if ((String) context.get("returnFields") != null) {
            solrQuery.setFields((String) context.get("returnFields"));
        }

        // if((Boolean)context.get("sortByReverse"))order.reverse();
        if ((String) context.get("sortBy") != null && ((String) context.get("sortBy")).length() > 0) {
            SolrQuery.ORDER order;
            if (!((Boolean) context.get("sortByReverse")))
                order = SolrQuery.ORDER.asc;
            else
                order = SolrQuery.ORDER.desc;
            solrQuery.setSort(((String) context.get("sortBy")).replaceFirst("-", ""), order);
        }

        if ((String) context.get("facetQuery") != null) {
            solrQuery.addFacetQuery((String) context.get("facetQuery"));
        }

        QueryResponse rsp = client.query(solrQuery);
        result = ServiceUtil.returnSuccess();
        result.put("queryResult", rsp);
    } catch (Exception e) {
        Debug.logError(e, e.getMessage(), module);
        result = ServiceUtil.returnError(e.toString());
    } finally {
        if (client != null) {
            try {
                client.close();
            } catch (IOException e) {
                // do nothing
            }
        }
    }
    return result;
}

From source file:org.apache.ofbiz.solr.SolrUtil.java

License:Apache License

public static Map<String, Object> categoriesAvailable(String catalogId, String categoryId, String productId,
        String facetPrefix, boolean displayproducts, int viewIndex, int viewSize, String solrIndexName) {
    // create the data model
    Map<String, Object> result = new HashMap<String, Object>();
    HttpSolrClient client = null;/*w ww.  j  av  a  2  s  .c o  m*/
    QueryResponse returnMap = new QueryResponse();
    try {
        // do the basic query
        client = getHttpSolrClient(solrIndexName);
        // create Query Object
        String query = "inStock[1 TO *]";
        if (categoryId != null)
            query += " +cat:" + categoryId;
        else if (productId != null)
            query += " +productId:" + productId;
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery(query);

        if (catalogId != null)
            solrQuery.setFilterQueries("catalog:" + catalogId);
        if (displayproducts) {
            if (viewSize > -1) {
                solrQuery.setRows(viewSize);
            } else
                solrQuery.setRows(50000);
            if (viewIndex > -1) {
                solrQuery.setStart(viewIndex);
            }
        } else {
            solrQuery.setFields("cat");
            solrQuery.setRows(0);
        }

        if (UtilValidate.isNotEmpty(facetPrefix)) {
            solrQuery.setFacetPrefix(facetPrefix);
        }

        solrQuery.setFacetMinCount(0);
        solrQuery.setFacet(true);
        solrQuery.addFacetField("cat");
        solrQuery.setFacetLimit(-1);
        Debug.logVerbose("solr: solrQuery: " + solrQuery, module);
        returnMap = client.query(solrQuery, METHOD.POST);
        result.put("rows", returnMap);
        result.put("numFound", returnMap.getResults().getNumFound());
    } catch (Exception e) {
        Debug.logError(e.getMessage(), module);
    }
    return result;
}

From source file:org.ariadne_eu.metadata.resultsformat.ResultDelegateARIADNERFJS.java

private QueryResponse getSolrResponse() {
    SolrServerManagement serverMgt = SolrServerManagement.getInstance();

    SolrQuery solrQuery = new SolrQuery().setQuery(lQuery).setFacet(true).setFacetLimit(-1).setFacetMinCount(1)
            .setFacetSort(FacetParams.FACET_SORT_COUNT).setParam("rows", Integer.toString(max))
            .setParam("start", Integer.toString(start));

    for (Iterator<String> iterator = facetFields.iterator(); iterator.hasNext();) {
        String facetField = (String) iterator.next();
        solrQuery.addFacetField(facetField);
    }/*from ww w. ja v  a2s .c o  m*/
    QueryResponse rsp = null;

    try {
        rsp = serverMgt.getServer().query(solrQuery);

    } catch (SolrServerException e) {
        log.error("getSolrResponse: Solr server error", e);
    } catch (IOException e) {
        log.error("getSolrResponse: Solr I/O error", e);
    }
    return rsp;
}

From source file:org.broadleafcommerce.core.search.service.solr.SolrHelperServiceImpl.java

License:Apache License

@Override
public void attachFacets(SolrQuery query, Map<String, SearchFacetDTO> namedFacetMap) {
    query.setFacet(true);//www .  j  a  v  a  2 s  .c om
    for (Entry<String, SearchFacetDTO> entry : namedFacetMap.entrySet()) {
        SearchFacetDTO dto = entry.getValue();

        // 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(), "key", range));
            }
        } else {
            query.addFacetField(getSolrTaggedFieldString(entry.getKey(), "key", null));
        }
    }
}

From source file:org.codelibs.fess.helper.CrawlingSessionHelper.java

License:Apache License

public List<Map<String, String>> getSessionIdList(final SolrGroup serverGroup) {
    final List<Map<String, String>> sessionIdList = new ArrayList<Map<String, String>>();
    final FieldHelper fieldHelper = ComponentUtil.getFieldHelper();

    final SolrQuery query = new SolrQuery();
    query.setQuery("*:*");
    query.setFacet(true);// ww  w .j a  v  a 2  s.  co  m
    query.addFacetField(fieldHelper.segmentField);
    query.addSort(fieldHelper.segmentField, ORDER.desc);

    final QueryResponse queryResponse = serverGroup.query(query);
    final List<FacetField> facets = queryResponse.getFacetFields();
    for (final FacetField facet : facets) {
        final List<FacetField.Count> facetEntries = facet.getValues();
        if (facetEntries != null) {
            for (final FacetField.Count fcount : facetEntries) {
                final Map<String, String> map = new HashMap<String, String>(2);
                map.put(fieldHelper.segmentField, fcount.getName());
                map.put(FACET_COUNT_KEY, Long.toString(fcount.getCount()));
                sessionIdList.add(map);
            }
        }
    }
    return sessionIdList;
}

From source file:org.codelibs.fess.service.SearchService.java

License:Apache License

public List<Map<String, Object>> getDocumentList(final String query, final int start, final int rows,
        final FacetInfo facetInfo, final GeoInfo geoInfo, final MoreLikeThisInfo mltInfo,
        final String[] responseFields, final String[] docValuesFields, final boolean forUser) {
    if (start > queryHelper.getMaxSearchResultOffset()) {
        throw new ResultOffsetExceededException("The number of result size is exceeded.");
    }/*from  w  w w. j a  v a2s  . c  o  m*/

    final long startTime = System.currentTimeMillis();

    final SolrGroup solrGroup = solrGroupManager.getSolrGroup(QueryType.QUERY);

    QueryResponse queryResponse = null;
    final SolrQuery solrQuery = new SolrQuery();
    final SearchQuery searchQuery = queryHelper.build(query, forUser);
    final String q = searchQuery.getQuery();
    if (StringUtil.isNotBlank(q)) {
        // fields
        solrQuery.setFields(responseFields);
        // query
        solrQuery.setQuery(q);
        solrQuery.setStart(start);
        solrQuery.setRows(rows);
        solrQuery.set("mm", searchQuery.getMinimumShouldMatch());
        solrQuery.set("defType", searchQuery.getDefType());
        for (final Map.Entry<String, String[]> entry : queryHelper.getQueryParamMap().entrySet()) {
            solrQuery.set(entry.getKey(), entry.getValue());
        }
        // filter query
        if (searchQuery.hasFilterQueries()) {
            solrQuery.addFilterQuery(searchQuery.getFilterQueries());
        }
        // sort
        final SortField[] sortFields = searchQuery.getSortFields();
        if (sortFields.length != 0) {
            for (final SortField sortField : sortFields) {
                solrQuery.addSort(sortField.getField(),
                        Constants.DESC.equals(sortField.getOrder()) ? SolrQuery.ORDER.desc
                                : SolrQuery.ORDER.asc);
            }
        } else if (queryHelper.hasDefaultSortFields()) {
            for (final SortField sortField : queryHelper.getDefaultSortFields()) {
                solrQuery.addSort(sortField.getField(),
                        Constants.DESC.equals(sortField.getOrder()) ? SolrQuery.ORDER.desc
                                : SolrQuery.ORDER.asc);
            }
        }
        // highlighting
        if (queryHelper.getHighlightingFields() != null && queryHelper.getHighlightingFields().length != 0) {
            for (final String hf : queryHelper.getHighlightingFields()) {
                solrQuery.addHighlightField(hf);
            }
            solrQuery.setHighlightSnippets(queryHelper.getHighlightSnippetSize());
        }
        // shards
        if (queryHelper.getShards() != null) {
            solrQuery.setParam("shards", queryHelper.getShards());
        }
        // geo
        if (geoInfo != null && geoInfo.isAvailable()) {
            solrQuery.addFilterQuery(geoInfo.toGeoQueryString());
            final String additionalGeoQuery = queryHelper.getAdditionalGeoQuery();
            if (StringUtil.isNotBlank(additionalGeoQuery)) {
                solrQuery.addFilterQuery(additionalGeoQuery);
            }
        }
        // facets
        if (facetInfo != null) {
            solrQuery.setFacet(true);
            if (facetInfo.field != null) {
                for (final String f : facetInfo.field) {
                    if (queryHelper.isFacetField(f)) {
                        solrQuery.addFacetField(f);
                    } else {
                        throw new FessSolrQueryException("EFESS0002", new Object[] { f });
                    }
                }
            }
            if (facetInfo.query != null) {
                for (final String fq : facetInfo.query) {
                    final String facetQuery = queryHelper.buildFacetQuery(fq);
                    if (StringUtil.isNotBlank(facetQuery)) {
                        solrQuery.addFacetQuery(facetQuery);
                    } else {
                        throw new FessSolrQueryException("EFESS0003", new Object[] { fq, facetQuery });
                    }
                }
            }
            if (facetInfo.limit != null) {
                solrQuery.setFacetLimit(Integer.parseInt(facetInfo.limit));
            }
            if (facetInfo.minCount != null) {
                solrQuery.setFacetMinCount(Integer.parseInt(facetInfo.minCount));
            }
            if (facetInfo.missing != null) {
                solrQuery.setFacetMissing(Boolean.parseBoolean(facetInfo.missing));
            }
            if (facetInfo.prefix != null) {
                solrQuery.setFacetPrefix(facetInfo.prefix);
            }
            if (facetInfo.sort != null && queryHelper.isFacetSortValue(facetInfo.sort)) {
                solrQuery.setFacetSort(facetInfo.sort);
            }
        }
        // mlt
        if (mltInfo != null) {
            final String mltField = queryHelper.getMoreLikeThisField(mltInfo.field);
            if (mltField != null) {
                solrQuery.set("mlt", true);
                if (mltInfo.count != null) {
                    solrQuery.set("mlt.count", Integer.parseInt(mltInfo.count));
                }
                solrQuery.set("mlt.fl", mltField);
            }
        }

        if (queryHelper.getTimeAllowed() >= 0) {
            solrQuery.setTimeAllowed(queryHelper.getTimeAllowed());
        }
        final Set<Entry<String, String[]>> paramSet = queryHelper.getRequestParameterSet();
        if (!paramSet.isEmpty()) {
            for (final Map.Entry<String, String[]> entry : paramSet) {
                solrQuery.set(entry.getKey(), entry.getValue());
            }
        }

        if (docValuesFields != null) {
            for (final String docValuesField : docValuesFields) {
                solrQuery.add(Constants.DCF, docValuesField);
            }
        }

        queryResponse = solrGroup.query(solrQuery, SolrRequest.METHOD.POST);
    }
    final long execTime = System.currentTimeMillis() - startTime;

    final QueryResponseList queryResponseList = ComponentUtil.getQueryResponseList();
    queryResponseList.init(queryResponse, rows);
    queryResponseList.setSearchQuery(q);
    queryResponseList.setSolrQuery(solrQuery.toString());
    queryResponseList.setExecTime(execTime);
    return queryResponseList;
}

From source file:org.codelibs.fess.web.admin.DocumentAction.java

License:Apache License

protected SessionIdList<Map<String, String>> getSessionIdList(final String groupName) {
    final SessionIdList<Map<String, String>> sessionIdList = new SessionIdList<Map<String, String>>();

    SolrGroup serverGroup;/*  w w w  . j  ava 2 s  . co m*/
    try {
        serverGroup = solrGroupManager.getSolrGroup(groupName);
    } catch (final Exception e) {
        if (logger.isInfoEnabled()) {
            logger.info(e.getMessage());
        }
        return sessionIdList;
    }

    final SolrQuery query = new SolrQuery();
    query.setQuery("*:*");
    query.setFacet(true);
    query.addFacetField(fieldHelper.segmentField);
    query.addSort(fieldHelper.segmentField, ORDER.desc);

    final QueryResponse queryResponse = serverGroup.query(query);
    final List<FacetField> facets = queryResponse.getFacetFields();
    for (final FacetField facet : facets) {
        final List<FacetField.Count> facetEntries = facet.getValues();
        if (facetEntries != null) {
            for (final FacetField.Count fcount : facetEntries) {
                final Map<String, String> map = new HashMap<String, String>(3);
                map.put("label", fcount.getName() + " (" + fcount.getCount() + ")");
                map.put("value", fcount.getName());
                map.put("count", Long.toString(fcount.getCount()));
                sessionIdList.add(map);
                sessionIdList.addTotalCount(fcount.getCount());
            }
        }
    }
    return sessionIdList;
}

From source file:org.craftercms.commerce.server.solr.AbstractSolrCRUDService.java

License:Open Source License

public ServiceResponse<T> findByQuery(String query, int offset, int maxResults, String... facet)
        throws CrafterCommerceException {
    try {/*from   www .  j av  a  2  s  .  com*/
        String solrQueryStr = queryConverter.toSolrQuery(query);
        SolrQuery solrQuery = new SolrQuery(solrQueryStr);
        solrQuery.setStart(offset);
        solrQuery.setRows(maxResults);
        // construct facet parameters
        if (facet.length > 0) {
            solrQuery.setFacet(true);
            solrQuery.setFacetMinCount(2); // only get the facet if there are 2 or more values
            for (String _facet : facet) {
                solrQuery.addFacetField(_facet);
            }
        }
        // execute Solr query
        QueryResponse response = solrServer.query(solrQuery);
        Set<T> entities = toEntities(response);
        Set<Facet> facets = toFacets(response);
        // create the service response
        ServiceResponse<T> serviceResponse = new ServiceResponse<T>();
        serviceResponse.setSuccess(true);
        serviceResponse.setEntities(entities);
        serviceResponse.setCount(response.getResults().getNumFound());
        serviceResponse.setFacets(facets);
        String msg = ReturnMessageProvider.findByQueryMessage(getTypeArgument(), query, entities.size());
        serviceResponse.setMessage(msg);
        // return the response
        return serviceResponse;
    } catch (Exception e) {
        LOGGER.error("Failed to find entities by query for query = " + query, e);
        return new ServiceResponse<T>(getTypeArgument(), false, e.getMessage());
    }
}

From source file:org.dataconservancy.dcs.index.dcpsolr.SeadSolrService.java

License:Apache License

@Override
public QueryResponse search(String query, int offset, int matches, String... params)
        throws SolrServerException {
    SolrQuery q = new SolrQuery(query);

    q.setStart(offset);/*from  w w  w.j a v a2 s. c o  m*/
    q.setRows(matches);

    for (int i = 0; i < params.length;) {
        System.out.println(i + " " + params[i] + " length=" + params.length);

        if (params[i].equalsIgnoreCase("facet.field")) //if condition checks and enables faceted search
        {
            i++;
            String[] facets = params[i++].split(",");
            for (int j = 0; j < facets.length; j++) {
                System.out.println(i + " " + j + " " + facets[j]);
                q.addFacetField(facets[j]);
            }
        }
        if (i == params.length)
            break;
        if (params[i].equalsIgnoreCase("sort")) //if condition checks and enables sort
        {
            i++;
            String[] sortFields = params[i++].split(",");
            for (int j = 0; j < sortFields.length; j++) {

                j++;
                if (sortFields[j].equalsIgnoreCase("asc"))
                    q.addSortField(sortFields[j - 1], SolrQuery.ORDER.asc);
                else
                    q.addSortField(sortFields[j - 1], SolrQuery.ORDER.desc);
            }
        } else {
            String name = params[i++];
            String val = params[i++];

            q.setParam(name, val);
        }
    }
    QueryResponse resp = server().query(q);
    return resp;
}

From source file:org.dbflute.solr.cbean.AbstractSolrConditionBean.java

License:Apache License

@Override
public SolrQuery buildSolrQuery() {
    SolrQuery query = new SolrQuery();

    if (this.isSpecified()) {
        query.setFields(this.getSpecifyFields());
    } else {/*from   w w  w  .  ja  v a 2 s  .  c om*/
        query.setFields(this.getAllFields());
    }
    if (this.isUseFilterQuery()) {
        query.setQuery(this.getMinimumQuery());
        query.setFilterQueries(this.getQueryArray());
    } else {
        query.setQuery(this.getQueryString());
        String[] filterQueryArray = this.getFilterQueryArray();
        if (filterQueryArray != null && filterQueryArray.length != 0) {
            query.setFilterQueries(this.getFilterQueryArray());
        }
    }
    if (this.isUseSort()) {
        for (SortClause sortClause : this.getSolrSortClauseList()) {
            query.addSort(sortClause);
        }
    }

    for (SolrQueryBean queryBean : this.getFacetQueryList()) {
        query.addFacetQuery(queryBean.getQueryString());
    }

    SolrSpecification facetSpecifyBean = getFacetSpecification();
    if (facetSpecifyBean.getSpecifyFields().length > 0) {
        query.addFacetField(facetSpecifyBean.getSpecifyFields());
    }

    query.setStart(this.getPageStart());
    query.setRows(this.getPageSize());

    return query;
}