List of usage examples for org.apache.solr.client.solrj SolrQuery addFacetField
public SolrQuery addFacetField(String... fields)
From source file:au.org.ala.biocache.dao.SearchDAOImpl.java
License:Open Source License
/** * Obtains a list and facet count of the source uids for the supplied query. * * @param searchParams// ww w . j a va 2 s.co m * @return * @throws Exception */ public Map<String, Integer> getSourcesForQuery(SpatialSearchRequestParams searchParams) throws Exception { Map<String, Integer> uidStats = new HashMap<String, Integer>(); SolrQuery solrQuery = new SolrQuery(); queryFormatUtils.formatSearchQuery(searchParams); if (logger.isInfoEnabled()) { logger.info("The query : " + searchParams.getFormattedQuery()); } solrQuery.setQuery(searchParams.getFormattedQuery()); solrQuery.setQueryType("standard"); solrQuery.setRows(0); solrQuery.setFacet(true); solrQuery.setFacetMinCount(1); solrQuery.addFacetField("data_provider_uid"); solrQuery.addFacetField("data_resource_uid"); solrQuery.addFacetField("collection_uid"); solrQuery.addFacetField("institution_uid"); QueryResponse qr = runSolrQuery(solrQuery, searchParams.getFormattedFq(), 1, 0, "score", "asc"); //now cycle through and get all the facets List<FacetField> facets = qr.getFacetFields(); for (FacetField facet : facets) { if (facet.getValues() != null) { for (FacetField.Count ffc : facet.getValues()) { if (ffc.getCount() > 0) { uidStats.put(ffc.getName() != null ? ffc.getName() : "", new Integer((int) ffc.getCount())); } } } } return uidStats; }
From source file:au.org.ala.biocache.dao.SearchDAOImpl.java
License:Open Source License
private List<FacetResultDTO> getMultivalueFacetCounts(SolrQuery query, SpatialSearchRequestParams searchParams, List<String> facet) throws Exception { for (String s : facet) { query.addFacetField(s); }//from ww w .ja v a 2s . c o m int flimit = searchParams.getFlimit(); query.setFacetLimit(-1); QueryResponse response = runSolrQuery(query, searchParams); SearchResultDTO searchResults = processSolrResponse(searchParams, response, query, OccurrenceIndex.class); //include paged facets when flimit > 0 Collection<FacetResultDTO> facetResults = new ArrayList<FacetResultDTO>(); if (searchParams.getFlimit() > 0) { facetResults = searchResults.getFacetResults(); if (facetResults != null) { for (FacetResultDTO fr : facetResults) { if (fr.getFieldResult() != null && fr.getFieldResult().size() > 0) { for (FacetField ff : response.getFacetFields()) { fr.setCount(0); if (ff != null && StringUtils.equals(ff.getName(), fr.getFieldName())) { fr.setCount(ff.getValueCount()); } } //sort and apply limit and offset Collections.sort(fr.getFieldResult(), new Comparator<FieldResultDTO>() { @Override public int compare(FieldResultDTO o1, FieldResultDTO o2) { long result = o1.getCount() - o2.getCount(); if (result == 0) { return o1.getLabel() != null ? o1.getLabel().compareTo(o2.getLabel()) : (o2.getLabel() == null ? 0 : 1); } else { return result > 0 ? -1 : 1; } } }); int from = Math.min(fr.getFieldResult().size() - 1, searchParams.getFoffset()); int to = Math.min(fr.getFieldResult().size(), searchParams.getFoffset() + searchParams.getFlimit()); fr.setFieldResult(new ArrayList(fr.getFieldResult().subList(from, to))); } } } } else { //only return totals counts for (FacetField ff : response.getFacetFields()) { facetResults.add(new FacetResultDTO(ff.getName(), null, ff.getValueCount())); } } query.setFacetLimit(flimit); return new ArrayList<FacetResultDTO>(facetResults); }
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 ww. jav a 2 s . c o m*/ 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 FacetField getFacet(SpatialSearchRequestParams searchParams, String facet) throws Exception { queryFormatUtils.formatSearchQuery(searchParams); if (logger.isInfoEnabled()) { logger.info("search query: " + searchParams.getFormattedQuery()); }// w w w. j a v a 2 s . c o m SolrQuery solrQuery = new SolrQuery(); solrQuery.setQueryType("standard"); solrQuery.setQuery(searchParams.getFormattedQuery()); solrQuery.setRows(0); solrQuery.setFacet(true); solrQuery.addFacetField(facet); solrQuery.setFacetMinCount(1); solrQuery.setFacetLimit(-1); //MAX_DOWNLOAD_SIZE); // unlimited = -1 QueryResponse qr = runSolrQuery(solrQuery, searchParams.getFormattedFq(), 1, 0, "score", "asc"); return qr.getFacetFields().get(0); }
From source file:au.org.ala.biocache.dao.TaxonDAOImpl.java
License:Open Source License
private List<FacetField.Count> extractFacet(String queryString, String[] filterQueries, String facetName) throws Exception { SolrQuery query = new SolrQuery(queryString); query.setFacet(true);//from w w w . ja v a 2s.co m query.addFacetField(facetName); query.setRows(0); query.setFacetLimit(200000); query.setStart(0); query.setFacetMinCount(1); query.setFacetSort("index"); //query.setFacet if (filterQueries != null) { for (String fq : filterQueries) query.addFilterQuery(fq); } QueryResponse response = server.query(query); List<FacetField.Count> fc = response.getFacetField(facetName).getValues(); if (fc == null) { fc = new ArrayList<FacetField.Count>(); } return fc; }
From source file:com.databasepreservation.visualization.utils.SolrUtils.java
private static void setQueryFacetParameter(SolrQuery query, SimpleFacetParameter facetParameter) { query.addFacetField(facetParameter.getName()); if (facetParameter.getMinCount() != FacetParameter.DEFAULT_MIN_COUNT) { query.add(String.format("f.%s.facet.mincount", facetParameter.getName()), String.valueOf(facetParameter.getMinCount())); }/*from w w w .j a va 2 s . co m*/ if (facetParameter.getLimit() != SimpleFacetParameter.DEFAULT_LIMIT) { query.add(String.format("f.%s.facet.limit", facetParameter.getName()), String.valueOf(facetParameter.getLimit())); } }
From source file:com.doculibre.constellio.services.FacetServicesImpl.java
License:Open Source License
public static SolrQuery toSolrQuery(SimpleSearch simpleSearch, int start, int row, boolean includeSingleValueFacets, boolean notIncludedOnly, List<String> customFieldFacets, List<String> customQueryFacets, ConstellioUser user) { String solrServerName = simpleSearch.getCollectionName(); RecordCollectionServices collectionServices = ConstellioSpringUtils.getRecordCollectionServices(); RecordCollection collection = collectionServices.get(solrServerName); SolrServices solrServices = ConstellioSpringUtils.getSolrServices(); Boolean usesDisMax = solrServices.usesDisMax(collection); SolrQuery query; if (!collection.isOpenSearch()) { query = SearchServicesImpl.toSolrQuery(simpleSearch, usesDisMax, true, includeSingleValueFacets, notIncludedOnly);/*from w w w . ja va 2 s . co m*/ } else { query = SearchServicesImpl.toSolrQuery(simpleSearch, usesDisMax, false, true, false); } query.setParam(ConstellioSolrQueryParams.COLLECTION_NAME, simpleSearch.getCollectionName()); query.setParam(ConstellioSolrQueryParams.LUCENE_QUERY, simpleSearch.getLuceneQuery(includeSingleValueFacets, true)); query.setParam(ConstellioSolrQueryParams.SIMPLE_SEARCH, simpleSearch.toSimpleParams().toString()); if (user != null) { query.setParam(ConstellioSolrQueryParams.USER_ID, "" + user.getId()); } if (StringUtils.isEmpty(query.getQuery())) { query.setQuery(SimpleSearch.SEARCH_ALL); query.setRequestHandler("/elevate"); } query.set("shards.qt", "/elevate"); query.setRequestHandler("/elevate"); query.setRows(row); query.setStart(start); query.setHighlight(true); query.setHighlightFragsize(100); query.setHighlightSnippets(2); query.setFacet(true); query.setFacetLimit(400); query.setFacetMinCount(1); if (collection.isOpenSearch()) { query.setParam("openSearchURL", collection.getOpenSearchURL()); Locale locale = simpleSearch.getSingleSearchLocale(); if (locale != null) { query.setParam("lang", locale.getLanguage()); } } else { for (CollectionFacet collectionFacet : collection.getCollectionFacets()) { if (customFieldFacets == null && collectionFacet.isFieldFacet()) { IndexField indexField = collectionFacet.getFacetField(); String indexFieldName = indexField.getName(); if (!notIncludedOnly) { query.addFacetField(indexFieldName); } else { SearchedFacet searchedFacet = simpleSearch.getSearchedFacet(indexFieldName); if (searchedFacet != null) { if (!searchedFacet.getIncludedValues().isEmpty()) { StringBuffer sbEx = new StringBuffer(); sbEx.append("{!ex=dt}"); // sbEx.append("{!ex="); // boolean first = true; // for (String includedValue : searchedFacet.getIncludedValues()) { // if (first) { // first = false; // } else { // sbEx.append(","); // } // sbEx.append(includedValue); // } // sbEx.append("}"); // query.setParam("facet.field", sbEx.toString() + indexFieldName); query.addFacetField(sbEx.toString() + indexFieldName); } else { query.addFacetField(indexFieldName); } } } } else if (customQueryFacets == null && collectionFacet.isQueryFacet()) { // Modification Rida, remplacement de collectionFacet.getLabels() par // collectionFacet.getLabelledValues() // for (I18NLabel valueLabels : collectionFacet.getLabels()) { for (I18NLabel valueLabels : collectionFacet.getLabelledValues()) { String facetQuery = valueLabels.getKey(); query.addFacetQuery(facetQuery); } } } if (customFieldFacets != null) { for (String facetField : customFieldFacets) { if (!notIncludedOnly) { query.addFacetField(facetField); } else { StringBuffer sbEx = new StringBuffer(); sbEx.append("{!ex=dt}"); // sbEx.append("{!ex="); // boolean first = true; // for (String includedValue : searchedFacet.getIncludedValues()) { // if (first) { // first = false; // } else { // sbEx.append(","); // } // sbEx.append(includedValue); // } // sbEx.append("}"); query.setParam("facet.field", sbEx.toString() + facetField); } } } if (customQueryFacets != null) { for (String facetQuery : customQueryFacets) { query.addFacetQuery(facetQuery); } } } return query; }
From source file:com.frank.search.solr.core.DefaultQueryParser.java
License:Apache License
private void appendFacetingOnFields(SolrQuery solrQuery, FacetQuery query) { FacetOptions facetOptions = query.getFacetOptions(); solrQuery.addFacetField(convertFieldListToStringArray(facetOptions.getFacetOnFields())); if (facetOptions.hasFacetPrefix()) { solrQuery.setFacetPrefix(facetOptions.getFacetPrefix()); }/* w ww. j a va 2 s .c o m*/ for (FacetOptions.FieldWithFacetParameters parametrizedField : facetOptions.getFieldsWithParameters()) { addPerFieldFacetParameters(solrQuery, parametrizedField); if (parametrizedField.getSort() != null && FacetOptions.FacetSort.INDEX.equals(parametrizedField.getSort())) { addFieldSpecificParameterToSolrQuery(solrQuery, parametrizedField, new FacetParameter(FacetParams.FACET_SORT, FacetParams.FACET_SORT_INDEX)); } } }
From source file:com.github.fengtan.sophie.tables.DocumentsTable.java
License:Open Source License
/** * Get a list of remote facets keyed by field name. * // w ww. j av a2s.c om * @param fields * Fields. * @return List of facets keyed by field name. * @throws SophieException * If facets could not be fetched. */ private Map<String, FacetField> getRemoteFacets(List<FieldInfo> fields) throws SophieException { // Prepare query. SolrQuery query = getBaseQuery(0, 0); query.setFacet(true); query.setFacetSort("index"); query.setFacetLimit(FACET_LIMIT); query.setFacetMissing(true); // For each field, determine whether Solr can generate a facet (fq works // only on indexed fields). If yes, then list that field in the query. for (FieldInfo field : fields) { if (SolrUtils.getFlags(field).contains(FieldFlag.INDEXED)) { query.addFacetField(field.getName()); } } // Send query. Map<String, FacetField> facets = new HashMap<String, FacetField>(); try { for (FacetField facet : Sophie.client.query(query).getFacetFields()) { facets.put(facet.getName(), facet); } } catch (SolrServerException | IOException | SolrException e) { throw new SophieException("Unable to fetch remote facets", e); } // Return facets keyed by field name. return facets; }
From source file:com.googlecode.solrgeonames.server.GeoServlet.java
License:Open Source License
/** * Prepare a 'suggest' query response/* w w w.j av a 2 s . c o m*/ * * @param request The incoming request * @param response The response object * @throws IOException If errors found */ private QueryResponse runQuery(String query, int start, int rows, String fields, String filter, String[] facets, int facetLimit) throws Exception { SolrQuery q = new SolrQuery(); q.setQuery(query); q.setStart(start); q.setRows(rows); q.setFields(fields); if (filter != null) { q.setFilterQueries(filter); } if (facets != null) { q.setFacet(true); q.setFacetLimit(facetLimit); q.addFacetField(facets); } else { q.setFacet(false); } return solrServer.query(q); }