List of usage examples for org.apache.solr.client.solrj.response QueryResponse getFacetRanges
public List<RangeFacet> getFacetRanges()
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(); }