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

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

Introduction

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

Prototype

public SolrQuery setFacetPrefix(String field, String prefix) 

Source Link

Usage

From source file:edu.unc.lib.dl.search.solr.service.SolrSearchService.java

License:Apache License

/**
 * Attempts to retrieve the hierarchical facet from the facet field corresponding to fieldKey that matches the value
 * of searchValue. Retrieves and populates all tiers leading up to the tier number given in searchValue.
 * //from   w  w w  . j a v a 2s.co  m
 * @param fieldKey
 *           Key of the facet field to search for the facet within.
 * @param searchValue
 *           Value to find a matching facet for, should be formatted <tier>,<value>
 * @param accessGroups
 * @return
 */
public FacetFieldObject getHierarchicalFacet(AbstractHierarchicalFacet facet, AccessGroupSet accessGroups) {
    QueryResponse queryResponse = null;
    SolrQuery solrQuery = new SolrQuery();
    StringBuilder query = new StringBuilder();
    query.append("[* TO *]");

    try {
        // Add access restrictions to query
        addAccessRestrictions(query, accessGroups);
    } catch (AccessRestrictionException e) {
        // If the user doesn't have any access groups, they don't have access to anything, return null.
        LOG.error(e.getMessage());
        return null;
    }
    solrQuery.setQuery(query.toString());
    solrQuery.setRows(0);

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

    String solrFieldName = solrSettings.getFieldName(facet.getFieldName());

    solrQuery.addFacetField(solrFieldName);
    solrQuery.setFacetPrefix(solrFieldName, facet.getSearchValue());

    LOG.debug("getHierarchicalFacet query: " + solrQuery.toString());
    try {
        queryResponse = server.query(solrQuery);
    } catch (SolrServerException e) {
        LOG.error("Error retrieving Solr object request: " + e);
        return null;
    }
    FacetField facetField = queryResponse.getFacetField(solrFieldName);
    if (facetField.getValueCount() == 0)
        return null;
    return facetFieldFactory.createFacetFieldObject(facet.getFieldName(),
            queryResponse.getFacetField(solrFieldName));
}

From source file:edu.unc.lib.dl.search.solr.util.FacetFieldUtil.java

License:Apache License

private void addCutoffFacetValue(CutoffFacet facet, SolrQuery solrQuery) {
    List<HierarchicalFacetNode> facetNodes = facet.getFacetNodes();
    CutoffFacetNode endNode = (CutoffFacetNode) facetNodes.get(facetNodes.size() - 1);
    String solrFieldName = solrSettings.getFieldName(facet.getFieldName());

    StringBuilder filterQuery = new StringBuilder();
    filterQuery.append(solrFieldName).append(":").append(endNode.getTier()).append(",");
    if (!endNode.getSearchKey().equals("*")) {
        filterQuery.append(SolrSettings.sanitize(endNode.getSearchKey())).append(",");
    }//w  w w.ja  v  a2 s  .co  m
    filterQuery.append('*');
    solrQuery.addFilterQuery(filterQuery.toString());

    if (facet.getCutoff() != null) {
        filterQuery = new StringBuilder();
        filterQuery.append('!').append(solrFieldName).append(':').append(facet.getCutoff()).append(',')
                .append('*');
        solrQuery.addFilterQuery(filterQuery.toString());
    }

    if (facet.getFacetCutoff() != null) {
        solrQuery.setFacetPrefix(solrFieldName, facet.getFacetCutoff() + ",");
    }
}

From source file:org.dspace.discovery.SolrServiceImpl.java

License:BSD License

protected SolrQuery resolveToSolrQuery(Context context, DiscoverQuery discoveryQuery,
        boolean includeUnDiscoverable) {
    SolrQuery solrQuery = new SolrQuery();

    String query = "*:*";
    if (discoveryQuery.getQuery() != null) {
        query = discoveryQuery.getQuery();
    }/* w  w  w . j  av  a 2  s  .com*/

    solrQuery.setQuery(query);
    if (discoveryQuery.isSpellCheck()) {
        solrQuery.setParam(SpellingParams.SPELLCHECK_Q, query);
        solrQuery.setParam(SpellingParams.SPELLCHECK_COLLATE, Boolean.TRUE);
        solrQuery.setParam("spellcheck", Boolean.TRUE);
    }

    if (!includeUnDiscoverable) {
        solrQuery.addFilterQuery("NOT(withdrawn:true)");
        solrQuery.addFilterQuery("NOT(discoverable:false)");
    }

    for (int i = 0; i < discoveryQuery.getFilterQueries().size(); i++) {
        String filterQuery = discoveryQuery.getFilterQueries().get(i);
        solrQuery.addFilterQuery(filterQuery);
    }
    if (discoveryQuery.getDSpaceObjectFilter() != -1) {
        solrQuery.addFilterQuery("search.resourcetype:" + discoveryQuery.getDSpaceObjectFilter());
    }

    for (int i = 0; i < discoveryQuery.getFieldPresentQueries().size(); i++) {
        String filterQuery = discoveryQuery.getFieldPresentQueries().get(i);
        solrQuery.addFilterQuery(filterQuery + ":[* TO *]");
    }

    if (discoveryQuery.getStart() != -1) {
        solrQuery.setStart(discoveryQuery.getStart());
    }

    if (discoveryQuery.getMaxResults() != -1) {
        solrQuery.setRows(discoveryQuery.getMaxResults());
    }

    if (discoveryQuery.getSortField() != null) {
        SolrQuery.ORDER order = SolrQuery.ORDER.asc;
        if (discoveryQuery.getSortOrder().equals(DiscoverQuery.SORT_ORDER.desc))
            order = SolrQuery.ORDER.desc;

        solrQuery.addSortField(discoveryQuery.getSortField(), order);
    }

    for (String property : discoveryQuery.getProperties().keySet()) {
        List<String> values = discoveryQuery.getProperties().get(property);
        solrQuery.add(property, values.toArray(new String[values.size()]));
    }

    List<DiscoverFacetField> facetFields = discoveryQuery.getFacetFields();
    if (0 < facetFields.size()) {
        //Only add facet information if there are any facets
        for (DiscoverFacetField facetFieldConfig : facetFields) {
            String field = transformFacetField(facetFieldConfig, facetFieldConfig.getField(), false);
            solrQuery.addFacetField(field);

            // Setting the facet limit in this fashion ensures that each facet can have its own max
            solrQuery.add("f." + field + "." + FacetParams.FACET_LIMIT,
                    String.valueOf(facetFieldConfig.getLimit()));
            String facetSort;
            if (DiscoveryConfigurationParameters.SORT.COUNT.equals(facetFieldConfig.getSortOrder())) {
                facetSort = FacetParams.FACET_SORT_COUNT;
            } else {
                facetSort = FacetParams.FACET_SORT_INDEX;
            }
            solrQuery.add("f." + field + "." + FacetParams.FACET_SORT, facetSort);
            if (facetFieldConfig.getOffset() != -1) {
                solrQuery.setParam("f." + field + "." + FacetParams.FACET_OFFSET,
                        String.valueOf(facetFieldConfig.getOffset()));
            }
            if (facetFieldConfig.getPrefix() != null) {
                solrQuery.setFacetPrefix(field, facetFieldConfig.getPrefix());
            }
        }

        List<String> facetQueries = discoveryQuery.getFacetQueries();
        for (String facetQuery : facetQueries) {
            solrQuery.addFacetQuery(facetQuery);
        }

        if (discoveryQuery.getFacetMinCount() != -1) {
            solrQuery.setFacetMinCount(discoveryQuery.getFacetMinCount());
        }

        solrQuery.setParam(FacetParams.FACET_OFFSET, String.valueOf(discoveryQuery.getFacetOffset()));
    }

    if (0 < discoveryQuery.getHitHighlightingFields().size()) {
        solrQuery.setHighlight(true);
        solrQuery.add(HighlightParams.USE_PHRASE_HIGHLIGHTER, Boolean.TRUE.toString());
        for (DiscoverHitHighlightingField highlightingField : discoveryQuery.getHitHighlightingFields()) {
            solrQuery.addHighlightField(highlightingField.getField() + "_hl");
            solrQuery.add("f." + highlightingField.getField() + "_hl." + HighlightParams.FRAGSIZE,
                    String.valueOf(highlightingField.getMaxChars()));
            solrQuery.add("f." + highlightingField.getField() + "_hl." + HighlightParams.SNIPPETS,
                    String.valueOf(highlightingField.getMaxSnippets()));
        }

    }

    //Add any configured search plugins !
    List<SolrServiceSearchPlugin> solrServiceSearchPlugins = new DSpace().getServiceManager()
            .getServicesByType(SolrServiceSearchPlugin.class);
    for (SolrServiceSearchPlugin searchPlugin : solrServiceSearchPlugins) {
        searchPlugin.additionalSearchParameters(context, discoveryQuery, solrQuery);
    }
    return solrQuery;
}

From source file:org.opencommercesearch.AbstractSearchServer.java

License:Apache License

@Override
public SearchResponse browse(BrowseOptions options, SolrQuery query, Site site, Locale locale,
        FilterQuery... filterQueries) throws SearchServerException {

    boolean hasCategoryId = StringUtils.isNotBlank(options.getCategoryId());
    boolean hasCategoryPath = StringUtils.isNotBlank(options.getCategoryPath());
    boolean hasBrandId = StringUtils.isNotBlank(options.getBrandId());
    boolean addCategoryGraph = (options.isFetchCategoryGraph()
            || (hasBrandId && options.isFetchProducts() && !hasCategoryId)) && !options.isRuleBasedPage();

    String categoryPath = null;/*from  www.j ava 2  s.  co  m*/

    if (hasCategoryPath) {
        categoryPath = options.getCategoryPath();
    } else {
        categoryPath = options.getCatalogId() + ".";
    }

    if (options.isRuleBasedPage()) {
        //handle rule based pages
        String filter = rulesBuilder.buildRulesFilter(options.getCategoryId(), locale);
        query.addFilterQuery(filter);
        query.setParam("q", "*:*");

    } else {
        //handle brand, category or onsale pages                
        if (addCategoryGraph) {
            query.setFacetPrefix(CATEGORY_PATH, categoryPath);
            query.addFacetField(CATEGORY_PATH);
            query.set("f.categoryPath.facet.limit", options.getMaxCategoryResults());
        }

        if (!options.isFetchProducts()) {
            query.setRows(0);
        }

        List<String> queryAltParams = new ArrayList<String>();

        if (hasCategoryId) {
            queryAltParams.add(CATEGORY_PATH + ":" + categoryPath);
            query.setParam("q", "");
        }

        if (hasBrandId) {
            queryAltParams.add(BRAND_ID + ":" + options.getBrandId());
            query.setParam("q", "");
        }

        if (options.isOnSale()) {
            queryAltParams.add("onsale" + locale.getCountry() + ":true");
        }

        if (queryAltParams.size() > 0) {

            query.set(Q_ALT, "(" + StringUtils.join(queryAltParams, " AND ") + ")");
        }
    }

    RepositoryItem catalog = null;
    if (site != null) {
        catalog = (RepositoryItem) site.getPropertyValue("defaultCatalog");
    }

    SearchResponse response = null;
    if (options.isRuleBasedPage()) {
        response = doSearch(query, site, catalog, locale, false, true, categoryPath, options.isOnSale(),
                options.getBrandId(), filterQueries);
    } else if (hasCategoryPath) {
        response = doSearch(query, site, catalog, locale, false, false, categoryPath, options.isOnSale(),
                options.getBrandId(), filterQueries);
    } else {
        response = doSearch(query, site, catalog, locale, false, false, null, options.isOnSale(),
                options.getBrandId(), filterQueries);
    }

    if (addCategoryGraph) {
        response.setCategoryGraph(
                createCategoryGraph(response, options.getCategoryPath(), options.getCatalogId(),
                        options.getCategoryId(), options.getDepthLimit(), options.getSeparator()));
    }

    return response;
}

From source file:org.opencommercesearch.AbstractSearchServer.java

License:Apache License

@Override
public Facet getFacet(Site site, Locale locale, String fieldFacet, int facetLimit, int depthLimit,
        String separator, FilterQuery... filterQueries) throws SearchServerException {
    try {/* w  w w.java 2s. c  o  m*/
        SolrQuery query = new SolrQuery();
        query.setRows(0);
        query.setQuery("*:*");
        query.addFacetField(fieldFacet);
        query.setFacetLimit(facetLimit);
        query.setFacetMinCount(1);
        query.addFilterQuery("country:" + locale.getCountry());

        RepositoryItem catalog = (RepositoryItem) site.getPropertyValue("defaultCatalog");
        String catalogId = catalog.getRepositoryId();
        query.setFacetPrefix(CATEGORY_PATH, catalogId + ".");
        query.addFilterQuery(CATEGORY_PATH + ":" + catalogId);

        if (filterQueries != null) {
            for (FilterQuery filterQuery : filterQueries) {
                query.addFilterQuery(filterQuery.toString());
            }
        }

        QueryResponse queryResponse = getCatalogSolrServer(locale).query(query);
        Facet facet = null;
        if (queryResponse != null && queryResponse.getFacetFields() != null) {
            FacetField facetField = queryResponse.getFacetField(fieldFacet);
            if (facetField != null) {
                List<Count> values = facetField.getValues();
                if (values != null && !values.isEmpty()) {
                    facet = new Facet();
                    facet.setName(StringUtils.capitalize(fieldFacet));
                    List<Filter> filters = new ArrayList<Facet.Filter>();

                    boolean filterByDepth = depthLimit > 0 && StringUtils.isNotBlank(separator);
                    for (Count count : values) {

                        if (filterByDepth
                                && StringUtils.countMatches(count.getName(), separator) > depthLimit) {
                            continue;
                        }

                        Filter filter = new Filter();
                        filter.setName(count.getName());
                        filter.setCount(count.getCount());
                        filter.setFilterQuery(count.getAsFilterQuery());
                        filter.setFilterQueries(count.getAsFilterQuery());
                        filters.add(filter);
                    }
                    facet.setFilters(filters);
                }
            }
        }
        return facet;
    } catch (SolrServerException ex) {
        throw create(SEARCH_EXCEPTION, ex);
    } catch (SolrException ex) {
        throw create(SEARCH_EXCEPTION, ex);
    }
}

From source file:org.opencommercesearch.RuleManager.java

License:Apache License

void setFilterQueries(FilterQuery[] filterQueries, String catalogId, SolrQuery query) {
    query.setFacetPrefix("category", "1." + catalogId + ".");
    query.addFilterQuery("category:" + "0." + catalogId);

    if (filterQueries == null) {
        return;/*  w w  w.ja va  2s  .  com*/
    }

    Map<String, Set<String>> multiExpressionFilters = new HashMap<String, Set<String>>();

    for (FilterQuery filterQuery : filterQueries) {
        if (filterQuery.getFieldName().equals("category")) {
            String category = filterQuery.getExpression();
            int index = category.indexOf(SearchConstants.CATEGORY_SEPARATOR);
            if (index != -1) {
                int level = Integer.parseInt(category.substring(0, index));

                category = ++level + FilterQuery.unescapeQueryChars(category.substring(index)) + ".";
                query.setFacetPrefix("category", category);
            }
        }
        RepositoryItem facetItem = getFacetManager().getFacetItem(filterQuery.getFieldName());
        if (facetItem != null) {
            Boolean isMultiSelect = (Boolean) facetItem.getPropertyValue(FacetProperty.IS_MULTI_SELECT);
            if (isMultiSelect != null && isMultiSelect) {
                //query.addFilterQuery( +  + + filterQuery);
                Set<String> expressions = multiExpressionFilters.get(filterQuery.getFieldName());
                if (expressions == null) {
                    expressions = new HashSet<String>();
                    multiExpressionFilters.put(filterQuery.getFieldName(), expressions);
                }
                expressions.add(filterQuery.getExpression());
                continue;
            }
        }
        query.addFilterQuery(filterQuery.toString());
    }

    StringBuilder b = new StringBuilder();
    for (Entry<String, Set<String>> entry : multiExpressionFilters.entrySet()) {
        String operator = " OR ";
        String fieldName = entry.getKey();
        b.append("{!tag=").append(fieldName).append("}");
        for (String expression : entry.getValue()) {
            b.append(fieldName).append(FilterQuery.SEPARATOR).append(expression).append(operator);
        }
        b.setLength(b.length() - operator.length());
        query.addFilterQuery(b.toString());
        b.setLength(0);
    }
}

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

License:Open Source License

/**
 * <p>//  ww  w.j a va2  s. c om
 * 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;
}