Example usage for org.apache.solr.client.solrj.response QueryResponse getFacetRanges

List of usage examples for org.apache.solr.client.solrj.response QueryResponse getFacetRanges

Introduction

In this page you can find the example usage for org.apache.solr.client.solrj.response QueryResponse getFacetRanges.

Prototype

public List<RangeFacet> getFacetRanges() 

Source Link

Usage

From source file:au.org.ala.biocache.dao.SearchDAOImpl.java

License:Open Source License

/**
 * Process the {@see org.apache.solr.client.solrj.response.QueryResponse} from a SOLR search and return
 * a {@link au.org.ala.biocache.dto.SearchResultDTO}
 *
 * @param qr// ww w  .ja v a  2 s .  c o m
 * @param solrQuery
 * @return
 */
private SearchResultDTO processSolrResponse(SearchRequestParams params, QueryResponse qr, SolrQuery solrQuery,
        Class resultClass) {
    SearchResultDTO searchResult = new SearchResultDTO();
    SolrDocumentList sdl = qr.getResults();
    // Iterator it = qr.getResults().iterator() // Use for download
    List<FacetField> facets = qr.getFacetFields();
    List<FacetField> facetDates = qr.getFacetDates();
    Map<String, Integer> facetQueries = qr.getFacetQuery();
    if (facetDates != null) {
        if (logger.isDebugEnabled()) {
            logger.debug("Facet dates size: " + facetDates.size());
        }
        facets.addAll(facetDates);
    }

    List<OccurrenceIndex> results = qr.getBeans(resultClass);

    //facet results
    searchResult.setTotalRecords(sdl.getNumFound());
    searchResult.setStartIndex(sdl.getStart());
    searchResult.setPageSize(solrQuery.getRows()); //pageSize
    searchResult.setStatus("OK");
    String[] solrSort = StringUtils.split(solrQuery.getSortField(), " "); // e.g. "taxon_name asc"
    if (logger.isDebugEnabled()) {
        logger.debug("sortField post-split: " + StringUtils.join(solrSort, "|"));
    }
    searchResult.setSort(solrSort[0]); // sortField
    searchResult.setDir(solrSort[1]); // sortDirection
    searchResult.setQuery(params.getUrlParams()); //this needs to be the original URL>>>>
    searchResult.setOccurrences(results);

    List<FacetResultDTO> facetResults = buildFacetResults(facets);

    //all belong to uncertainty range for now
    if (facetQueries != null && !facetQueries.isEmpty()) {
        Map<String, String> rangeMap = rangeBasedFacets.getRangeMap("uncertainty");
        List<FieldResultDTO> fqr = new ArrayList<FieldResultDTO>();
        for (String value : facetQueries.keySet()) {
            if (facetQueries.get(value) > 0)
                fqr.add(new FieldResultDTO(rangeMap.get(value), facetQueries.get(value), value));
        }
        facetResults.add(new FacetResultDTO("uncertainty", fqr));
    }

    //handle all the range based facets
    if (qr.getFacetRanges() != null) {
        for (RangeFacet rfacet : qr.getFacetRanges()) {
            List<FieldResultDTO> fqr = new ArrayList<FieldResultDTO>();
            if (rfacet instanceof Numeric) {
                Numeric nrfacet = (Numeric) rfacet;
                List<RangeFacet.Count> counts = nrfacet.getCounts();
                //handle the before
                if (nrfacet.getBefore().intValue() > 0) {
                    fqr.add(new FieldResultDTO("[* TO "
                            + getUpperRange(nrfacet.getStart().toString(), nrfacet.getGap(), false) + "]",
                            nrfacet.getBefore().intValue()));
                }
                for (RangeFacet.Count count : counts) {
                    String title = getRangeValue(count.getValue(), nrfacet.getGap());
                    fqr.add(new FieldResultDTO(title, count.getCount()));
                }
                //handle the after
                if (nrfacet.getAfter().intValue() > 0) {
                    fqr.add(new FieldResultDTO("[" + nrfacet.getEnd().toString() + " TO *]",
                            nrfacet.getAfter().intValue()));
                }
                facetResults.add(new FacetResultDTO(nrfacet.getName(), fqr));
            }
        }
    }

    //update image URLs
    for (OccurrenceIndex oi : results) {
        updateImageUrls(oi);
    }

    searchResult.setFacetResults(facetResults);
    // The query result is stored in its original format so that all the information
    // returned is available later on if needed
    searchResult.setQr(qr);
    return searchResult;
}

From source file:com.frank.search.solr.core.ResultHelper.java

License:Apache License

/**
 * @param query//from  w ww . ja  va2 s .  co m
 * @param response
 * @return
 * @since 1.5
 */
static Map<Field, Page<FacetFieldEntry>> convertFacetQueryResponseToRangeFacetPageMap(FacetQuery query,
        QueryResponse response) {
    Assert.notNull(query, "Cannot convert response for 'null', query");

    if (!hasFacets(query, response) || isEmpty(response.getFacetRanges())) {
        return Collections.emptyMap();
    }
    Map<Field, Page<FacetFieldEntry>> facetResult = new HashMap<Field, Page<FacetFieldEntry>>();

    Pageable pageable = query.getFacetOptions().getPageable();
    int initalPageSize = pageable.getPageSize();
    for (RangeFacet<?, ?> rangeFacet : response.getFacetRanges()) {

        if (rangeFacet == null || !StringUtils.hasText(rangeFacet.getName())) {
            continue;
        }

        Field field = new SimpleField(rangeFacet.getName());

        List<FacetFieldEntry> entries;
        long total;
        if (isNotEmpty(rangeFacet.getCounts())) {
            entries = new ArrayList<FacetFieldEntry>(initalPageSize);
            for (RangeFacet.Count count : rangeFacet.getCounts()) {
                entries.add(new SimpleFacetFieldEntry(field, count.getValue(), count.getCount()));
            }
            total = rangeFacet.getCounts().size();
        } else {
            entries = Collections.<FacetFieldEntry>emptyList();
            total = 0;
        }

        facetResult.put(field, new SolrResultPage<FacetFieldEntry>(entries, pageable, total, null));

    }

    return facetResult;
}

From source file:com.nridge.ds.solr.SolrResponseBuilder.java

License:Open Source License

@SuppressWarnings({ "rawtypes" })
private void populateFacetRange(QueryResponse aQueryResponse) {
    Logger appLogger = mAppMgr.getLogger(this, "populateFacetRange");

    appLogger.trace(mAppMgr.LOGMSG_TRACE_ENTER);

    List<RangeFacet> facetRangeList = aQueryResponse.getFacetRanges();
    if ((facetRangeList != null) && (facetRangeList.size() > 0)) {
        mDocument.addRelationship(Solr.RESPONSE_FACET_RANGE, createFacetRangeBag());
        Relationship facetRelationship = mDocument.getFirstRelationship(Solr.RESPONSE_FACET_RANGE);
        if (facetRelationship != null) {
            DataBag facetBag = new DataBag(facetRelationship.getBag());
            facetBag.setAssignedFlagAll(false);
            DataTable facetTable = new DataTable(facetBag);
            for (RangeFacet rangeFacet : facetRangeList)
                populateFacet(facetTable, rangeFacet);

            Document facetDocument = new Document(Solr.RESPONSE_FACET_RANGE, facetTable);
            facetRelationship.add(facetDocument);
        }//from  w  w w  . j  a  v  a 2  s. co m
    }

    appLogger.trace(mAppMgr.LOGMSG_TRACE_DEPART);
}

From source file:eu.prestoprime.search.util.ResultProcessor.java

License:Open Source License

public static Facets extractFacetsFromResponse(QueryResponse response, Map<P4FacetField, String> facetFilters) {
    // Map for all facetFields with according values from the queryResponse
    Facets facets = new Facets();
    // Put facetValues to this map

    for (FacetField field : response.getFacetFields()) {
        // validate FacetField against P4Schema and get the respective
        // FacetField

        P4FacetField p4Field = P4FacetField.get(field.getName());

        if (field.getValueCount() >= 1 && p4Field != null) {
            Facet facet = new Facet();
            facet.setFacetName(p4Field.getFieldName());
            for (Count facetValue : field.getValues()) {
                if (!facetValue.getName().isEmpty()) {
                    Value value = new Value();
                    value.setCount(facetValue.getCount());
                    value.setTerm(facetValue.getName());

                    // check if this value is already selected
                    boolean isSelected = (facetFilters.get(p4Field) != null
                            && facetFilters.get(p4Field).contains(facetValue.getName()));
                    value.setSelected(isSelected);

                    LOGGER.debug("Facet value: " + facetValue.getName() + " is selected? " + isSelected);

                    // build a filterquery that is used when this facet is
                    // selected
                    String filter = "";
                    if (isSelected) { // deselect
                        String[] singleValues = facetFilters.get(p4Field).replaceAll("\"", "").split("( AND )");
                        LOGGER.debug("Building new filter for deselecting. Starting from: "
                                + facetFilters.get(p4Field));
                        String delim = "";
                        int i = 0;
                        for (String s : singleValues) {
                            LOGGER.debug("Iteration " + (++i) + ": " + s + " eq " + facetValue.getName() + " ? "
                                    + s.equals(facetValue.getName()));
                            if (!s.equals(facetValue.getName())) {
                                LOGGER.debug("No. Append this one -> ");
                                filter += delim + "\"" + s + "\"";
                                delim = " AND ";

                            }//from   www .  ja  v a2s  .  c  om
                            LOGGER.debug("Iteration " + (++i) + ": " + filter);
                        }
                    } else {
                        filter = facetFilters.get(p4Field);
                        LOGGER.debug("Altering old filter for selecting. Starting from: " + filter);
                        if (filter == null || filter.isEmpty()) {
                            filter = "\"" + facetValue.getName() + "\"";
                        } else {
                            filter += " AND \"" + facetValue.getName() + "\"";
                        }
                    }
                    LOGGER.debug("Result filter = " + filter);
                    value.setFilterQuery(filter);
                    facet.getValue().add(value);
                }
            }
            facets.getFacet().add(facet);
        }
    }

    // do the same for rangeFacets
    for (RangeFacet range : response.getFacetRanges()) {
        P4FacetField p4Field = P4FacetField.get(range.getName());

        if (range.getCounts().size() >= 1 && p4Field != null) {
            Facet facet = new Facet();
            facet.setFacetName(p4Field.getFieldName());
            if (p4Field.getAssocField().getType().equals(FieldType.TDATE)) {
                for (RangeFacet.Count count : (List<RangeFacet.Count>) range.getCounts()) {
                    Value value = new Value();
                    value.setTerm(formatDateString(count.getValue()));
                    value.setCount(count.getCount());

                    boolean isSelected = (facetFilters.get(p4Field) != null
                            && !facetFilters.get(p4Field).isEmpty());
                    value.setSelected(isSelected);

                    if (!isSelected) {
                        value.setFilterQuery(SolrQueryUtils.getDateRangeFilter(count.getValue()));
                    } else {
                        value.setFilterQuery("");
                    }

                    facet.getValue().add(value);
                }
            } else {
                // TODO implement for other ranged facets. right now no
                // other fieldTypes used yet...
            }
            facets.getFacet().add(facet);
        }
    }

    return facets;
}

From source file:fr.cnes.sitools.metacatalogue.representation.GeoJsonMDEORepresentation.java

License:Open Source License

/**
 * Constructor with a DatabaseRequestParameters, a geometryColName and a converterChained
 * // w w  w .j a v a 2 s.c om
 * @param authenticatedUser
 *          true if the user is authenticated, false otherwise
 * @param applicationBaseUrl
 *          the current application base url
 * @param thesaurusFacetFields
 *          TODO
 * @param listDocuments
 *          the listDocuments
 * @param searcher
 */
public GeoJsonMDEORepresentation(QueryResponse queryResponse, boolean authenticatedUser,
        String applicationBaseUrl, Map<String, String> conceptsMap, List<String> thesaurusFacetFields) {
    super(MediaType.APPLICATION_JSON);
    this.listDocuments = queryResponse.getResults();
    this.facets = queryResponse.getFacetFields();
    this.pivotFacets = queryResponse.getFacetPivot();
    this.rangesFacets = queryResponse.getFacetRanges();
    this.authenticatedUser = authenticatedUser;
    this.applicationBaseUrl = applicationBaseUrl;
    this.reference = null;
    this.offset = 0;
    this.conceptsMap = conceptsMap;
    this.thesaurusFacetFields = thesaurusFacetFields;

}

From source file:fr.cnes.sitools.metacatalogue.representation.GeoJsonMDEORepresentation.java

License:Open Source License

/**
 * GeoJsonMDEORepresentation/*from   www.j  a  v a  2  s.com*/
 * 
 * @param queryResponse
 * @param authenticatedUser
 * @param applicationBaseUrl
 * @param reference
 * @param offset
 * @param startParamName
 * @param limitParamName
 * @param conceptsMap
 * @param thesaurusFacetFields
 */
public GeoJsonMDEORepresentation(QueryResponse queryResponse, boolean authenticatedUser,
        String applicationBaseUrl, Reference reference, long offset, String startParamName,
        String limitParamName, Map<String, String> conceptsMap, List<String> thesaurusFacetFields) {
    super(MediaType.APPLICATION_JSON);
    this.listDocuments = queryResponse.getResults();
    this.facets = queryResponse.getFacetFields();
    this.pivotFacets = queryResponse.getFacetPivot();
    this.rangesFacets = queryResponse.getFacetRanges();
    this.authenticatedUser = authenticatedUser;
    this.applicationBaseUrl = applicationBaseUrl;
    this.reference = reference;
    this.offset = offset;
    this.startParamName = startParamName;
    this.limitParamName = limitParamName;
    this.conceptsMap = conceptsMap;
    this.thesaurusFacetFields = thesaurusFacetFields;
}

From source file:org.alfresco.solr.query.DistributedAlfrescoSolrFacetingTest.java

License:Open Source License

@Test
public void rangeFaceting_mincountMissing_shouldReturnFacetsMincountOne() throws Exception {
    String jsonQuery = "{\"query\":\"(suggest:a)\",\"locales\":[\"en\"], \"templates\": [{\"name\":\"t1\", \"template\":\"%cm:content\"}], \"authorities\": [\"joel\"], \"tenants\": []}";
    putHandleDefaults();// w  w w. ja va2 s.c om

    QueryResponse queryResponse = query(getDefaultTestClient(), true, jsonQuery,
            params("qt", "/afts", "shards.qt", "/afts", "start", "0", "rows", "0", "fl", "score,id", "facet",
                    "true", "facet.range", "{http://www.alfresco.org/model/content/1.0}created",
                    "facet.range.start", "2000-01-02T00:00:00Z", "facet.range.end", "2020-01-02T00:00:00Z",
                    "facet.range.gap", "+100DAY"));

    //facet.distrib.mco=true
    List<RangeFacet> facetRanges = queryResponse.getFacetRanges();
    assertThat(facetRanges.size(), is(1));
    RangeFacet createdDateRangeFacet = facetRanges.get(0);
    List<RangeFacet.Count> createdDateCounts = createdDateRangeFacet.getCounts();

    assertThat(createdDateCounts.size(), is(4));
    assertThat(createdDateCounts.get(0).getValue(), is("2014-10-15T00:00:00Z"));
    assertThat(createdDateCounts.get(0).getCount(), is(2));

    assertThat(createdDateCounts.get(1).getValue(), is("2015-01-23T00:00:00Z"));
    assertThat(createdDateCounts.get(1).getCount(), is(1));

    assertThat(createdDateCounts.get(2).getValue(), is("2015-11-19T00:00:00Z"));
    assertThat(createdDateCounts.get(2).getCount(), is(1));

    assertThat(createdDateCounts.get(3).getValue(), is("2016-12-23T00:00:00Z"));
    assertThat(createdDateCounts.get(3).getCount(), is(1));
}

From source file:org.alfresco.solr.query.DistributedAlfrescoSolrFacetingTest.java

License:Open Source License

@Test
public void rangeFaceting_mincountSetZero_shouldReturnFacetsMincountOne() throws Exception {
    String jsonQuery = "{\"query\":\"(suggest:a)\",\"locales\":[\"en\"], \"templates\": [{\"name\":\"t1\", \"template\":\"%cm:content\"}], \"authorities\": [\"joel\"], \"tenants\": []}";
    putHandleDefaults();/*from w  w w .  j a  v a2  s  . c om*/

    QueryResponse queryResponse = query(getDefaultTestClient(), true, jsonQuery,
            params("qt", "/afts", "shards.qt", "/afts", "start", "0", "rows", "0", "fl", "score,id", "facet",
                    "true", "facet.range", "{http://www.alfresco.org/model/content/1.0}created",
                    "facet.range.start", "2000-01-02T00:00:00Z", "facet.range.end", "2020-01-02T00:00:00Z",
                    "facet.range.gap", "+100DAY", "facet.mincount", "0"));

    //facet.distrib.mco=true
    List<RangeFacet> facetRanges = queryResponse.getFacetRanges();
    assertThat(facetRanges.size(), is(1));
    RangeFacet createdDateRangeFacet = facetRanges.get(0);
    List<RangeFacet.Count> createdDateCounts = createdDateRangeFacet.getCounts();

    assertThat(createdDateCounts.size(), is(4));
    assertThat(createdDateCounts.get(0).getValue(), is("2014-10-15T00:00:00Z"));
    assertThat(createdDateCounts.get(0).getCount(), is(2));

    assertThat(createdDateCounts.get(1).getValue(), is("2015-01-23T00:00:00Z"));
    assertThat(createdDateCounts.get(1).getCount(), is(1));

    assertThat(createdDateCounts.get(2).getValue(), is("2015-11-19T00:00:00Z"));
    assertThat(createdDateCounts.get(2).getCount(), is(1));

    assertThat(createdDateCounts.get(3).getValue(), is("2016-12-23T00:00:00Z"));
    assertThat(createdDateCounts.get(3).getCount(), is(1));
}

From source file:org.alfresco.solr.query.DistributedAlfrescoSolrFacetingTest.java

License:Open Source License

@Test
public void rangeFaceting_mincountSetTwo_shouldReturnFacetsMincountTwo() throws Exception {
    String jsonQuery = "{\"query\":\"(suggest:a)\",\"locales\":[\"en\"], \"templates\": [{\"name\":\"t1\", \"template\":\"%cm:content\"}], \"authorities\": [\"joel\"], \"tenants\": []}";
    putHandleDefaults();/*from w  w w .  ja  va2  s.  co  m*/

    QueryResponse queryResponse = query(getDefaultTestClient(), true, jsonQuery,
            params("qt", "/afts", "shards.qt", "/afts", "start", "0", "rows", "0", "fl", "score,id", "facet",
                    "true", "facet.range", "{http://www.alfresco.org/model/content/1.0}created",
                    "facet.range.start", "2000-01-02T00:00:00Z", "facet.range.end", "2020-01-02T00:00:00Z",
                    "facet.range.gap", "+100DAY", "facet.mincount", "2"));

    //facet.distrib.mco=true
    List<RangeFacet> facetRanges = queryResponse.getFacetRanges();
    assertThat(facetRanges.size(), is(1));
    RangeFacet createdDateRangeFacet = facetRanges.get(0);
    List<RangeFacet.Count> createdDateCounts = createdDateRangeFacet.getCounts();

    assertThat(createdDateCounts.size(), is(1));
    assertThat(createdDateCounts.get(0).getValue(), is("2014-10-15T00:00:00Z"));
    assertThat(createdDateCounts.get(0).getCount(), is(2));
}

From source file:org.apache.nifi.processors.solr.QuerySolr.java

License:Apache License

private static void addFacetsFromSolrResponseToJsonWriter(final QueryResponse response, final JsonWriter writer)
        throws IOException {
    writer.beginObject();/* w  ww .j  av  a  2s . com*/
    writer.name("facet_queries");
    writer.beginArray();
    for (final Map.Entry<String, Integer> facetQuery : response.getFacetQuery().entrySet()) {
        writer.beginObject();
        writer.name("facet").value(facetQuery.getKey());
        writer.name("count").value(facetQuery.getValue());
        writer.endObject();
    }
    writer.endArray();

    writer.name("facet_fields");
    writer.beginObject();
    for (final FacetField facetField : response.getFacetFields()) {
        writer.name(facetField.getName());
        writer.beginArray();
        for (final FacetField.Count count : facetField.getValues()) {
            writer.beginObject();
            writer.name("facet").value(count.getName());
            writer.name("count").value(count.getCount());
            writer.endObject();
        }
        writer.endArray();
    }
    writer.endObject();

    writer.name("facet_ranges");
    writer.beginObject();
    for (final RangeFacet rangeFacet : response.getFacetRanges()) {
        writer.name(rangeFacet.getName());
        writer.beginArray();
        final List<Count> list = rangeFacet.getCounts();
        for (final Count count : list) {
            writer.beginObject();
            writer.name("facet").value(count.getValue());
            writer.name("count").value(count.getCount());
            writer.endObject();
        }
        writer.endArray();
    }
    writer.endObject();

    writer.name("facet_intervals");
    writer.beginObject();
    for (final IntervalFacet intervalFacet : response.getIntervalFacets()) {
        writer.name(intervalFacet.getField());
        writer.beginArray();
        for (final IntervalFacet.Count count : intervalFacet.getIntervals()) {
            writer.beginObject();
            writer.name("facet").value(count.getKey());
            writer.name("count").value(count.getCount());
            writer.endObject();
        }
        writer.endArray();
    }
    writer.endObject();
    writer.endObject();
}