List of usage examples for org.apache.solr.client.solrj.response QueryResponse getFacetQuery
public Map<String, Integer> getFacetQuery()
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//from w ww . j a v a2 s . co 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:au.org.ala.biocache.dao.SearchDAOImpl.java
License:Open Source License
@Cacheable(cacheName = "legendCache") public List<LegendItem> getLegend(SpatialSearchRequestParams searchParams, String facetField, String[] cutpoints) throws Exception { List<LegendItem> legend = new ArrayList<LegendItem>(); queryFormatUtils.formatSearchQuery(searchParams); if (logger.isInfoEnabled()) { logger.info("search query: " + searchParams.getFormattedQuery()); }// w w w .jav a 2s .com SolrQuery solrQuery = new SolrQuery(); solrQuery.setQueryType("standard"); solrQuery.setQuery(searchParams.getFormattedQuery()); solrQuery.setRows(0); solrQuery.setFacet(true); //is facet query? if (cutpoints == null) { //special case for the decade if (DECADE_FACET_NAME.equals(facetField)) initDecadeBasedFacet(solrQuery, "occurrence_year"); else solrQuery.addFacetField(facetField); } else { solrQuery.addFacetQuery("-" + facetField + ":[* TO *]"); for (int i = 0; i < cutpoints.length; i += 2) { solrQuery.addFacetQuery(facetField + ":[" + cutpoints[i] + " TO " + cutpoints[i + 1] + "]"); } } solrQuery.setFacetMinCount(1); solrQuery.setFacetLimit(-1);//MAX_DOWNLOAD_SIZE); // unlimited = -1 solrQuery.setFacetMissing(true); QueryResponse qr = runSolrQuery(solrQuery, searchParams.getFormattedFq(), 1, 0, "score", "asc"); List<FacetField> facets = qr.getFacetFields(); if (facets != null) { for (FacetField facet : facets) { List<FacetField.Count> facetEntries = facet.getValues(); if (facet.getName().contains(facetField) && (facetEntries != null) && (facetEntries.size() > 0)) { int i = 0; for (i = 0; i < facetEntries.size(); i++) { FacetField.Count fcount = facetEntries.get(i); if (fcount.getCount() > 0) { String fq = facetField + ":\"" + fcount.getName() + "\""; if (fcount.getName() == null) { fq = "-" + facetField + ":[* TO *]"; } legend.add(new LegendItem(fcount.getName(), fcount.getCount(), fq)); } } break; } } } //check if we have query based facets Map<String, Integer> facetq = qr.getFacetQuery(); if (facetq != null && facetq.size() > 0) { for (Entry<String, Integer> es : facetq.entrySet()) { legend.add(new LegendItem(es.getKey(), es.getValue(), es.getKey())); } } //check to see if we have a date range facet List<FacetField> facetDates = qr.getFacetDates(); if (facetDates != null && !facetDates.isEmpty()) { FacetField ff = facetDates.get(0); String firstDate = null; for (FacetField.Count facetEntry : ff.getValues()) { String startDate = facetEntry.getName(); if (firstDate == null) { firstDate = startDate; } String finishDate; if (DECADE_PRE_1850_LABEL.equals(startDate)) { startDate = "*"; finishDate = firstDate; } else { int startYear = Integer.parseInt(startDate.substring(0, 4)); finishDate = (startYear - 1) + "-12-31T23:59:59Z"; } legend.add(new LegendItem(facetEntry.getName(), facetEntry.getCount(), "occurrence_year:[" + startDate + " TO " + finishDate + "]")); } } return legend; }
From source file:au.org.ala.biocache.dao.SearchDAOImpl.java
License:Open Source License
public Map<String, Integer> getOccurrenceCountsForTaxa(List<String> taxa) throws Exception { SolrQuery solrQuery = new SolrQuery(); solrQuery.setQueryType("standard"); solrQuery.setRows(0);//from w ww .ja v a 2 s.co m solrQuery.setFacet(true); solrQuery.setFacetLimit(taxa.size()); StringBuilder sb = new StringBuilder(); Map<String, Integer> counts = new HashMap<String, Integer>(); Map<String, String> lftToGuid = new HashMap<String, String>(); for (String lsid : taxa) { //get the lft and rgt value for the taxon String[] values = searchUtils.getTaxonSearch(lsid); //first value is the search string if (sb.length() > 0) sb.append(" OR "); sb.append(values[0]); lftToGuid.put(values[0], lsid); //add the query part as a facet solrQuery.add("facet.query", values[0]); } solrQuery.setQuery(sb.toString()); //solrQuery.add("facet.query", "confidence:" + os.getRange()); QueryResponse qr = runSolrQuery(solrQuery, null, 1, 0, "score", "asc"); Map<String, Integer> facetQueries = qr.getFacetQuery(); for (String facet : facetQueries.keySet()) { //add all the counts based on the query value that was substituted String lsid = lftToGuid.get(facet); Integer count = facetQueries.get(facet); if (lsid != null && count != null) counts.put(lsid, count); } if (logger.isDebugEnabled()) { logger.debug(facetQueries); } return counts; }
From source file:com.doculibre.constellio.search.SolrFacetUtils.java
License:Open Source License
public static List<FacetValue> getPossibleValues(SearchableFacet searchableFacet, FacetsDataProvider dataProvider, String solrCoreName, ConstellioUser user) { List<FacetValue> possibleValues = new ArrayList<FacetValue>(); QueryResponse queryResponse = dataProvider.getQueryResponse(); if (queryResponse != null) { if (searchableFacet.isQuery()) { Map<String, Integer> facetQuery = queryResponse.getFacetQuery(); Map<String, Map<Locale, String>> possibleValueLabels = searchableFacet.getPossibleValuesLabels(); for (String queryName : possibleValueLabels.keySet()) { int queryCount = facetQuery.get(queryName); if (queryCount > 0) { possibleValues.add(new FacetValue(searchableFacet, queryName, queryCount)); }//w ww .j a v a2s. c o m } } else if (searchableFacet.isCluster()) { SimpleSearch simpleSearch = dataProvider.getSimpleSearch(); RecordCollectionServices collectionServices = ConstellioSpringUtils.getRecordCollectionServices(); String collectionName = simpleSearch.getCollectionName(); RecordCollection collection = collectionServices.get(collectionName); CollectionFacet collectionFacet = collection .getCollectionFacet(new Long(searchableFacet.getName())); ClusteringServices clusteringServices = ConstellioSpringUtils.getClusteringServices(); List<SimpleOrderedMap<Object>> clusters = clusteringServices.cluster(simpleSearch, collectionFacet, 0, ClusteringServices.maxResultsToConsider, user); List<FacetValue> facetValues = searchableFacet.getValues(); for (SimpleOrderedMap<Object> cluster : clusters) { FacetValue facetValue = getFacetValue(cluster, searchableFacet, collection.getLocales()); facetValues.add(facetValue); } // if (!facetValues.isEmpty()) { // searchableFacets.add(clusterFacet); // } possibleValues.addAll(searchableFacet.getValues()); } else if (searchableFacet.isCloudKeyword()) { // No values } else if (queryResponse != null) { FacetField facetField = queryResponse.getFacetField(searchableFacet.getName()); List<Count> facetCounts = facetField != null ? facetField.getValues() : null; if (facetCounts != null) { RecordCollectionServices collectionServices = ConstellioSpringUtils .getRecordCollectionServices(); FacetServices facetServices = ConstellioSpringUtils.getFacetServices(); SimpleSearch simpleSearch = dataProvider.getSimpleSearch(); String collectionName = simpleSearch.getCollectionName(); RecordCollection collection = collectionServices.get(collectionName); CollectionFacet collectionFacet = collection.getFieldFacet(searchableFacet.getName()); // Special cases Set<String> ignoredValues = new HashSet<String>(); if (IndexField.COLLECTION_ID_FIELD.equals(searchableFacet.getName())) { ignoredValues.add("" + collection.getId()); } Set<String> notEmptyFacetValues = new HashSet<String>(); for (Count facetCount : facetCounts) { String facetCountName = facetCount.getName(); if (!ignoredValues.contains(facetCountName) && StringUtils.isNotEmpty(facetCountName)) { possibleValues.add( new FacetValue(searchableFacet, facetCountName, (int) facetCount.getCount())); notEmptyFacetValues.add(facetCountName); } } if (!collectionFacet.isHideEmptyValues()) { List<String> allFacetValues = facetServices.getValues(collectionFacet); for (String facetValue : allFacetValues) { if (!ignoredValues.contains(facetValue) && !notEmptyFacetValues.contains(facetValue)) { possibleValues.add(new FacetValue(searchableFacet, facetValue, 0)); } } } } } } return possibleValues; }
From source file:com.doculibre.constellio.servlets.SolrJExampleMain.java
License:Open Source License
/** * Print documents and facets/*from w ww . ja v a 2 s . co m*/ * * @param response */ @SuppressWarnings("unchecked") public static void print(QueryResponse response) { SolrDocumentList docs = response.getResults(); if (docs != null) { System.out.println(docs.getNumFound() + " documents found, " + docs.size() + " returned : "); for (int i = 0; i < docs.size(); i++) { SolrDocument doc = docs.get(i); System.out.println("\t" + doc.toString()); } } List<FacetField> fieldFacets = response.getFacetFields(); if (fieldFacets != null && fieldFacets.isEmpty()) { System.out.println("\nField Facets : "); for (FacetField fieldFacet : fieldFacets) { System.out.print("\t" + fieldFacet.getName() + " :\t"); if (fieldFacet.getValueCount() > 0) { for (Count count : fieldFacet.getValues()) { System.out.print(count.getName() + "[" + count.getCount() + "]\t"); } } System.out.println(""); } } Map<String, Integer> queryFacets = response.getFacetQuery(); if (queryFacets != null && !queryFacets.isEmpty()) { System.out.println("\nQuery facets : "); for (String queryFacet : queryFacets.keySet()) { System.out.println("\t" + queryFacet + "\t[" + queryFacets.get(queryFacet) + "]"); } System.out.println(""); } NamedList<NamedList<Object>> spellCheckResponse = (NamedList<NamedList<Object>>) response.getResponse() .get("spellcheck"); if (spellCheckResponse != null) { Iterator<Entry<String, NamedList<Object>>> wordsIterator = spellCheckResponse.iterator(); while (wordsIterator.hasNext()) { Entry<String, NamedList<Object>> entry = wordsIterator.next(); String word = entry.getKey(); NamedList<Object> spellCheckWordResponse = entry.getValue(); boolean correct = spellCheckWordResponse.get("frequency").equals(1); System.out.println("Word: " + word + ",\tCorrect?: " + correct); NamedList<Integer> suggestions = (NamedList<Integer>) spellCheckWordResponse.get("suggestions"); if (suggestions != null && suggestions.size() > 0) { System.out.println("Suggestions : "); Iterator<Entry<String, Integer>> suggestionsIterator = suggestions.iterator(); while (suggestionsIterator.hasNext()) { System.out.println("\t" + suggestionsIterator.next().getKey()); } } System.out.println(""); } } }
From source file:com.frank.search.solr.core.ResultHelper.java
License:Apache License
static List<FacetQueryEntry> convertFacetQueryResponseToFacetQueryResult(FacetQuery query, QueryResponse response) { Assert.notNull(query, "Cannot convert response for 'null', query"); if (!hasFacets(query, response)) { return Collections.emptyList(); }//from w ww .j av a 2 s . com List<FacetQueryEntry> facetResult = new ArrayList<FacetQueryEntry>(); if (MapUtils.isNotEmpty(response.getFacetQuery())) { for (Entry<String, Integer> entry : response.getFacetQuery().entrySet()) { facetResult.add(new SimpleFacetQueryEntry(entry.getKey(), entry.getValue())); } } return facetResult; }
From source file:com.liferay.portal.search.solr.internal.SolrIndexSearcher.java
License:Open Source License
protected void updateFacetCollectors(QueryResponse queryResponse, SearchContext searchContext) { Map<String, Facet> facetsMap = searchContext.getFacets(); List<FacetField> facetFields = queryResponse.getFacetFields(); if (ListUtil.isEmpty(facetFields)) { return;//from w ww . j a va 2 s.com } for (FacetField facetField : facetFields) { Facet facet = facetsMap.get(facetField.getName()); FacetCollector facetCollector = null; if (facet instanceof RangeFacet) { facetCollector = new SolrFacetQueryCollector(facetField.getName(), queryResponse.getFacetQuery()); } else { facetCollector = new SolrFacetFieldCollector(facetField.getName(), facetField); } facet.setFacetCollector(facetCollector); } }
From source file:com.liferay.portal.search.solr.SolrIndexSearcherImpl.java
License:Open Source License
protected Hits doSearch(SearchContext searchContext, Query query) throws Exception { SolrQuery solrQuery = translateQuery(searchContext.getCompanyId(), query, searchContext.getSorts(), searchContext.getStart(), searchContext.getEnd()); Map<String, Facet> facets = searchContext.getFacets(); for (Facet facet : facets.values()) { if (facet.isStatic()) { continue; }/*from ww w . j av a2 s. c o m*/ FacetConfiguration facetConfiguration = facet.getFacetConfiguration(); if (facet instanceof RangeFacet) { solrQuery.addFacetField(facetConfiguration.getFieldName()); JSONObject dataJSONObject = facetConfiguration.getData(); JSONArray rangesJSONArray = dataJSONObject.getJSONArray("ranges"); if (rangesJSONArray == null) { continue; } for (int i = 0; i < rangesJSONArray.length(); i++) { JSONObject rangeJSONObject = rangesJSONArray.getJSONObject(i); String range = rangeJSONObject.getString("range"); String facetQuery = facetConfiguration.getFieldName() + StringPool.COLON + range; solrQuery.addFacetQuery(facetQuery); } } else { solrQuery.addFacetField(facetConfiguration.getFieldName()); } } solrQuery.setFacetLimit(-1); QueryResponse queryResponse = _solrServer.query(solrQuery); boolean allResults = false; if (solrQuery.getRows() == 0) { allResults = true; } List<FacetField> facetFields = queryResponse.getFacetFields(); if (facetFields != null) { for (FacetField facetField : facetFields) { Facet facet = facets.get(facetField.getName()); FacetCollector facetCollector = null; if (facet instanceof RangeFacet) { facetCollector = new SolrFacetQueryCollector(facetField.getName(), queryResponse.getFacetQuery()); } else { facetCollector = new SolrFacetFieldCollector(facetField.getName(), facetField); } facet.setFacetCollector(facetCollector); } } return subset(solrQuery, query, query.getQueryConfig(), queryResponse, allResults); }
From source file:com.nridge.ds.solr.SolrResponseBuilder.java
License:Open Source License
private void populateFacetQuery(QueryResponse aQueryResponse) { Logger appLogger = mAppMgr.getLogger(this, "populateFacetQuery"); appLogger.trace(mAppMgr.LOGMSG_TRACE_ENTER); Map<String, Integer> facetQueries = aQueryResponse.getFacetQuery(); if ((facetQueries != null) && (facetQueries.size() > 0)) { mDocument.addRelationship(Solr.RESPONSE_FACET_QUERY, createFacetQueryBag()); Relationship facetRelationship = mDocument.getFirstRelationship(Solr.RESPONSE_FACET_QUERY); if (facetRelationship != null) { DataBag facetBag = new DataBag(facetRelationship.getBag()); facetBag.setAssignedFlagAll(false); DataTable facetTable = new DataTable(facetBag); for (Map.Entry<String, Integer> entry : facetQueries.entrySet()) { facetTable.newRow();//from w w w . j a va 2 s . com facetTable.setValueByName("search_term", entry.getKey()); facetTable.setValueByName("facet_count", entry.getValue()); facetTable.addRow(); } Document facetDocument = new Document(Solr.RESPONSE_FACET_QUERY, facetTable); facetRelationship.add(facetDocument); } } appLogger.trace(mAppMgr.LOGMSG_TRACE_DEPART); }
From source file:com.yaotrue.learn.solr.SolrjTest.java
License:Apache License
@Test public void testFacet() throws SolrServerException, IOException { SolrQuery solrQuery = new SolrQuery("*:*"); solrQuery.setFacet(true);//from w w w . j a va 2 s. c o m solrQuery.addFacetQuery("sale_price:[0 TO 200]"); solrQuery.addFacetQuery("sale_price:[201 TO 300]"); solrQuery.addFacetQuery("sale_price:[300 TO 400]"); solrQuery.setFacetSort("count"); solrQuery.addFacetField("code"); solrQuery.setFacetMinCount(0); solrQuery.setFacetLimit(-1); QueryResponse response = solrClient.query(solrQuery); if (response != null) { List<FacetField> facetFields = response.getFacetFields(); for (FacetField facetField : facetFields) { List<Count> countList = null; if (facetField != null) { countList = facetField.getValues(); if (countList != null) { for (Count count : countList) { System.out.println(count.getName() + count.getCount()); } } } } Map<String, Integer> map = response.getFacetQuery(); for (String key : map.keySet()) { System.out.println(key + ":" + map.get(key)); } } }