List of usage examples for org.apache.solr.client.solrj SolrQuery setFacetMinCount
public SolrQuery setFacetMinCount(int cnt)
From source file:cz.incad.vdk.client.tools.Search.java
License:Open Source License
public String getAsXML() throws JSONException { try {// ww w . ja v a2 s . c om String q = req.getParameter("q"); SolrQuery query = new SolrQuery(); if (q == null || q.equals("")) { q = "*:*"; query.setSort("_version_", SolrQuery.ORDER.desc); } query.setQuery(q); query.set("q.op", "AND"); query.setFacet(true); query.setStart(getStart()); query.setRows(getRows()); if (LoggedController.isLogged(req)) { query.addFacetField(opts.getStrings("user_facets")); } query.addFacetField(opts.getStrings("facets")); query.setFacetMinCount(1); JSONObject others = opts.getJSONObject("otherParams"); Iterator keys = others.keys(); while (keys.hasNext()) { String key = (String) keys.next(); Object val = others.get(key); if (val instanceof Integer) { query.set(key, (Integer) val); } else if (val instanceof String) { query.set(key, (String) val); } else if (val instanceof Boolean) { query.set(key, (Boolean) val); } } addFilters(query); return IndexerQuery.xml(query); } catch (IOException ex) { LOGGER.log(Level.SEVERE, null, ex); return null; } }
From source file:edu.cornell.mannlib.vitro.webapp.searchengine.solr.SolrConversionUtils.java
License:Open Source License
/** * Convert from a SearchQuery to a SolrQuery, so the Solr server may execute * it.//from w ww . j av a 2 s .c om */ @SuppressWarnings("deprecation") static SolrQuery convertToSolrQuery(SearchQuery query) { SolrQuery solrQuery = new SolrQuery(query.getQuery()); solrQuery.setStart(query.getStart()); int rows = query.getRows(); if (rows >= 0) { solrQuery.setRows(rows); } for (String fieldToReturn : query.getFieldsToReturn()) { solrQuery.addField(fieldToReturn); } Map<String, Order> sortFields = query.getSortFields(); for (String sortField : sortFields.keySet()) { solrQuery.addSortField(sortField, convertToSolrOrder(sortFields.get(sortField))); } for (String filter : query.getFilters()) { solrQuery.addFilterQuery(filter); } if (!query.getFacetFields().isEmpty()) { solrQuery.setFacet(true); } for (String facetField : query.getFacetFields()) { solrQuery.addFacetField(facetField); } int facetLimit = query.getFacetLimit(); if (facetLimit >= 0) { solrQuery.setFacetLimit(facetLimit); } int minCount = query.getFacetMinCount(); if (minCount >= 0) { solrQuery.setFacetMinCount(minCount); } return solrQuery; }
From source file:edu.harvard.liblab.ecru.rs.ResourceUtils.java
License:Open Source License
public static SolrQuery addFacetsToQuery(SolrQuery query, HashMap<String, List<String>> facetMap) { if (!facetMap.isEmpty()) { List<String> doFacet = facetMap.get("facet"); if (doFacet == null || (!doFacet.isEmpty() && !doFacet.get(0).toLowerCase().equals("false"))) { query.setFacet(true);// w w w. j a v a 2s .c o m List<String> limits = facetMap.get("facet.limit"); try { query.setFacetLimit(Integer.valueOf(limits.get(0))); } catch (Exception e) { // we don't care about this } query.setFacetMinCount(1); limits = facetMap.get("facet.mincout"); try { query.setFacetLimit(Integer.valueOf(limits.get(0))); } catch (Exception e) { // we don't care about this } List<String> values = facetMap.get("facet.field"); if (values != null && !values.isEmpty()) { query.addFacetField(values.toArray(new String[values.size()])); } } } return query; }
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 ww . j a v a2s .c om*/ * @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.service.SolrSearchService.java
License:Apache License
/** * Constructs a SolrQuery object from the search state specified within a SearchRequest object. The request may * optionally request to retrieve facet results in addition to search results. * //from w w w.ja v a2s . c om * @param searchRequest * @param isRetrieveFacetsRequest * @return */ protected SolrQuery generateSearch(SearchRequest searchRequest) { SearchState searchState = (SearchState) searchRequest.getSearchState(); SolrQuery solrQuery = new SolrQuery(); StringBuilder termQuery = new StringBuilder(); // Generate search term query string addSearchFields(searchState, termQuery); // Add range Fields to the query addRangeFields(searchState, termQuery); // No query terms given, make it an everything query StringBuilder query = new StringBuilder(); if (termQuery.length() == 0) { query.append("*:* "); } else { query.append('(').append(termQuery).append(')'); } // Add access restrictions to query try { addAccessRestrictions(query, searchRequest.getAccessGroups()); } catch (AccessRestrictionException e) { // If the user doesn't have any access groups, they don't have access to anything, return null. LOG.debug("User had no access groups", e); return null; } // Add query solrQuery.setQuery(query.toString()); if (searchState.getResultFields() != null) { for (String field : searchState.getResultFields()) { String solrFieldName = solrSettings.getFieldName(field); if (solrFieldName != null) solrQuery.addField(solrFieldName); } } if (searchState.getRollup() != null && searchState.getRollup()) { solrQuery.set(GroupParams.GROUP, true); if (searchState.getRollupField() == null) solrQuery.set(GroupParams.GROUP_FIELD, solrSettings.getFieldName(SearchFieldKeys.ROLLUP_ID.name())); else solrQuery.set(GroupParams.GROUP_FIELD, solrSettings.getFieldName(searchState.getRollupField())); solrQuery.set(GroupParams.GROUP_TOTAL_COUNT, true); if (searchState.getFacetsToRetrieve() != null && searchState.getFacetsToRetrieve().size() > 0) { solrQuery.set(GroupParams.GROUP_FACET, true); } } // Add sort parameters List<SearchSettings.SortField> sortFields = searchSettings.sortTypes.get(searchState.getSortType()); if (sortFields != null) { for (int i = 0; i < sortFields.size(); i++) { SearchSettings.SortField sortField = sortFields.get(i); SolrQuery.ORDER sortOrder = SolrQuery.ORDER.valueOf(sortField.getSortOrder()); if (!searchState.getSortNormalOrder()) sortOrder = sortOrder.reverse(); solrQuery.addSort(solrSettings.getFieldName(sortField.getFieldName()), sortOrder); } } // Set requested resource types String resourceTypeFilter = this.getResourceTypeFilter(searchState.getResourceTypes()); if (resourceTypeFilter != null) { solrQuery.addFilterQuery(resourceTypeFilter); } // Turn on faceting if (searchRequest.isRetrieveFacets()) { solrQuery.setFacet(true); solrQuery.setFacetMinCount(1); if (searchState.getBaseFacetLimit() != null) solrQuery.setFacetLimit(searchState.getBaseFacetLimit()); if (searchState.getFacetsToRetrieve() != null) { // Add facet fields for (String facetName : searchState.getFacetsToRetrieve()) { String facetField = solrSettings.getFieldName(facetName); if (facetField != null) solrQuery.addFacetField(solrSettings.getFieldName(facetName)); } } } // Override the base facet limit if overrides are given. if (searchState.getFacetLimits() != null) { for (Entry<String, Integer> facetLimit : searchState.getFacetLimits().entrySet()) { solrQuery.add("f." + solrSettings.getFieldName(facetLimit.getKey()) + ".facet.limit", facetLimit.getValue().toString()); } } // Add facet limits Map<String, Object> facets = searchState.getFacets(); if (facets != null) { Iterator<Entry<String, Object>> facetIt = facets.entrySet().iterator(); while (facetIt.hasNext()) { Entry<String, Object> facetEntry = facetIt.next(); if (facetEntry.getValue() instanceof String) { LOG.debug("Adding facet " + facetEntry.getKey() + " as a String"); // Add Normal facets solrQuery.addFilterQuery(solrSettings.getFieldName(facetEntry.getKey()) + ":\"" + SolrSettings.sanitize((String) facetEntry.getValue()) + "\""); } else { LOG.debug("Adding facet " + facetEntry.getKey() + " as a " + facetEntry.getValue().getClass().getName()); facetFieldUtil.addToSolrQuery(facetEntry.getValue(), solrQuery); } } } // Scope hierarchical facet results to the highest tier selected within the facet tree if (searchRequest.isRetrieveFacets() && searchRequest.isApplyCutoffs() && searchState.getFacetsToRetrieve() != null) { Set<String> facetsQueried = searchState.getFacets().keySet(); // Apply closing cutoff to all cutoff facets that are being retrieved but not being queried for for (String fieldKey : searchState.getFacetsToRetrieve()) { if (!facetsQueried.contains(fieldKey)) { facetFieldUtil.addDefaultFacetPivot(fieldKey, solrQuery); } } // Add individual facet field sorts if they are present. if (searchState.getFacetSorts() != null) { for (Entry<String, String> facetSort : searchState.getFacetSorts().entrySet()) { solrQuery.add("f." + solrSettings.getFieldName(facetSort.getKey()) + ".facet.sort", facetSort.getValue()); } } } // Set Navigation options if (searchState.getStartRow() != null) solrQuery.setStart(searchState.getStartRow()); if (searchState.getRowsPerPage() != null) solrQuery.setRows(searchState.getRowsPerPage()); return solrQuery; }
From source file:edu.unc.lib.dl.ui.service.SolrQueryLayerService.java
License:Apache License
public void getChildrenCounts(List<BriefObjectMetadata> resultList, AccessGroupSet accessGroups, String countName, String queryAddendum, SolrQuery baseQuery) { long startTime = System.currentTimeMillis(); if (resultList == null || resultList.size() == 0) return;/*www . j ava 2 s . c om*/ String ancestorPathField = solrSettings.getFieldName(SearchFieldKeys.ANCESTOR_PATH.name()); SolrQuery solrQuery; if (baseQuery == null) { // Create a base query since we didn't receive one solrQuery = new SolrQuery(); StringBuilder query = new StringBuilder("*:*"); 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; } solrQuery.setStart(0); solrQuery.setRows(0); solrQuery.setQuery(query.toString()); } else { // Starting from a base query solrQuery = baseQuery.getCopy(); // Make sure we aren't returning any normal results solrQuery.setRows(0); // Remove all facet fields so we are only getting ancestor path if (solrQuery.getFacetFields() != null) { for (String facetField : solrQuery.getFacetFields()) { solrQuery.removeFacetField(facetField); } } } if (queryAddendum != null) { solrQuery.setQuery(solrQuery.getQuery() + " AND " + queryAddendum); } solrQuery.setFacet(true); solrQuery.setFacetMinCount(1); solrQuery.addFacetField(ancestorPathField); Integer countPageSize; try { countPageSize = new Integer(searchSettings.getProperty("search.facet.countPageSize")); } catch (NumberFormatException e) { countPageSize = 20; } solrQuery.add("f." + ancestorPathField + ".facet.limit", Integer.toString(Integer.MAX_VALUE)); // Sort by value rather than count so that earlier tiers will come first in case the result gets cut off solrQuery.setFacetSort("index"); java.util.Map<Integer, StringBuilder> tierQueryMap = new java.util.HashMap<Integer, StringBuilder>(); java.util.Map<Integer, List<BriefObjectMetadata>> containerMap = new java.util.HashMap<Integer, List<BriefObjectMetadata>>(); // Pare the list of ids we are searching for and assigning counts to down to just containers for (BriefObjectMetadata metadataObject : resultList) { if (metadataObject.getPath() != null && metadataObject.getContentModel() != null && metadataObject.getContentModel().contains(ContentModelHelper.Model.CONTAINER.toString())) { CutoffFacetNode highestTier = metadataObject.getPath().getHighestTierNode(); StringBuilder tierQuery = tierQueryMap.get(highestTier.getTier()); List<BriefObjectMetadata> containerObjects = containerMap.get(highestTier.getTier()); if (tierQuery == null) { tierQuery = new StringBuilder(); tierQueryMap.put(highestTier.getTier(), tierQuery); containerObjects = new ArrayList<BriefObjectMetadata>(); containerMap.put(highestTier.getTier(), containerObjects); } if (tierQuery.length() == 0) { tierQuery.append(ancestorPathField).append(":("); } else { tierQuery.append(" OR "); } tierQuery.append(SolrSettings.sanitize(highestTier.getSearchValue())).append(",*"); containerObjects.add(metadataObject); // If there are a lot of results, then do a partial lookup if (containerObjects.size() >= countPageSize) { tierQuery.append(")"); this.executeChildrenCounts(tierQuery, containerObjects, solrQuery, countName, highestTier.getTier()); LOG.info("Partial query done at " + System.currentTimeMillis() + " (" + (System.currentTimeMillis() - startTime) + ")"); containerMap.remove(highestTier.getTier()); tierQueryMap.remove(highestTier.getTier()); } } } Iterator<java.util.Map.Entry<Integer, StringBuilder>> queryIt = tierQueryMap.entrySet().iterator(); while (queryIt.hasNext()) { java.util.Map.Entry<Integer, StringBuilder> tierQueryEntry = queryIt.next(); tierQueryEntry.getValue().append(')'); this.executeChildrenCounts(tierQueryEntry.getValue(), containerMap.get(tierQueryEntry.getKey()), solrQuery, countName, tierQueryEntry.getKey()); } LOG.info("Child count query done at " + System.currentTimeMillis() + " (" + (System.currentTimeMillis() - startTime) + ")"); }
From source file:edu.vt.vbi.patric.portlets.GenomeBrowser.java
License:Apache License
private List<Integer> getFeatureCountHistogram(ResourceRequest request) throws IOException { String accession = request.getParameter("accession"); String annotation = request.getParameter("annotation"); String genomeId = request.getParameter("genomeId"); SolrQuery query = new SolrQuery("accession:" + accession + " AND genome_id:" + genomeId); query.setFilterQueries("annotation:" + annotation + " AND !(feature_type:source)"); query.setRows(0);/*from w w w.j a v a2 s .c om*/ query.setFacet(true); query.setFacetMinCount(1); query.addNumericRangeFacet("start", 0, 10000000, 10000); List<Integer> results = new ArrayList<>(); DataApiHandler dataApi = new DataApiHandler(request); LOGGER.trace("[{}] {}", SolrCore.FEATURE.getSolrCoreName(), query.toString()); String apiResponse = dataApi.solrQuery(SolrCore.FEATURE, query); Map resp = jsonReader.readValue(apiResponse); Map facetCounts = (Map) resp.get("facet_counts"); Map facetRanges = (Map) facetCounts.get("facet_ranges"); List counts = (List) ((Map) facetRanges.get("start")).get("counts"); for (int i = 0; i < counts.size(); i = i + 2) { int value = (Integer) counts.get(i + 1); results.add(value); } return results; }
From source file:eu.europeana.core.BeanQueryModelFactory.java
License:EUPL
@Override public QueryResponse getSolrResponse(SolrQuery solrQuery, boolean isBriefDoc, Map<String, String[]> params) throws EuropeanaQueryException { // add bean to ??? // since we make a defensive copy before the start is decremented we must do it here if (solrQuery.getStart() != null && solrQuery.getStart() > 0) { solrQuery.setStart(solrQuery.getStart() - 1); }/*w w w. jav a2 s . c o m*/ // set facets if (isBriefDoc) { // only show spelling-suggestion on the first result page if ((solrQuery.getStart() == null || solrQuery.getStart() == 0) && solrQuery.getFilterQueries() == null) { // give spelling suggestions solrQuery.setParam("spellcheck", true); solrQuery.setParam("spellcheck.collate", true); solrQuery.setParam("spellcheck.extendedResults", true); solrQuery.setParam("spellcheck.onlyMorePopular", true); // solrQuery.setParam("spellcheck.count", "4"); } solrQuery.setFacet(true); solrQuery.setFacetMinCount(1); //solrQuery.setFacetLimit(100); solr default is 100 so doesn't need to be set explicitly if (solrQuery.getRows() == null) { solrQuery.setRows(12); } solrQuery.addFacetField(ThemeFilter.getTheme().getRecordDefinition().getFacetFieldStrings()); // todo now hard-coded but these values must be retrieved from the RecordDefinition later if (solrQuery.getFields() == null) { solrQuery.setFields( "europeana_uri,dc_title,europeana_object,dc_creator,europeana_year,europeana_provider," + "europeana_dataProvider,europeana_language,europeana_type,dc_description,dc_type"); // solrQuery.setFields("*,score"); // solrQuery.setFields(metadataModel.getRecordDefinition().getFieldStrings()); } if (solrQuery.getQueryType().equalsIgnoreCase(QueryType.SIMPLE_QUERY.toString())) { solrQuery.setQueryType(queryAnalyzer .findSolrQueryType(solrQuery.getQuery(), ThemeFilter.getTheme().getRecordDefinition()) .toString()); } } SolrQuery dCopy = addHiddenQueryFilters(solrQuery, params); return getSolrResponseFromServer(dCopy, false); }
From source file:fr.cnes.sitools.metacatalogue.resources.opensearch.AbstractOpensearchSearchResource.java
License:Open Source License
private void setFacet(SolrQuery solrQuery) { solrQuery.addFacetField(MetacatalogField._RESOLUTION_DOMAIN.getField()); // Date dateStart; // try {//from w w w. jav a 2 s .c o m // dateStart = DateUtils.parse("1980-01-01T00:00:00.0"); // solrQuery.addDateRangeFacet("characterisationAxis.temporalAxis.min", dateStart, new Date(), "+1YEAR"); // } // catch (ParseException e) { // e.printStackTrace(); // } List<String> plateformIntrument = new ArrayList<String>(); plateformIntrument.add(MetacatalogField.PLATFORM.getField()); plateformIntrument.add(MetacatalogField.INSTRUMENT.getField()); List<String> location = new ArrayList<String>(); location.add(MetacatalogField.COUNTRY.getField()); location.add(MetacatalogField.REGION.getField()); location.add(MetacatalogField.DEPARTMENT.getField()); location.add(MetacatalogField.CITY.getField()); solrQuery.add("facet.pivot", Joiner.on(",").join(plateformIntrument)); solrQuery.add("facet.pivot", Joiner.on(",").join(location)); solrQuery.addFacetField(MetacatalogField.PROCESSING_LEVEL.getField()); solrQuery.addFacetField(MetacatalogField.PRODUCT.getField()); solrQuery.add("facet.pivot.mincount", "0"); solrQuery.setFacetLimit(10); solrQuery.setFacetMinCount(1); }
From source file:fr.hoteia.qalingo.core.solr.service.impl.CategorySolrServiceImpl.java
License:Apache License
/** * //from w w w.ja v a 2s . c om */ public CategoryResponseBean searchCategory() throws SolrServerException, IOException { SolrQuery solrQuery = new SolrQuery(); solrQuery.setQuery("*"); solrQuery.setFacet(true); solrQuery.setFacetMinCount(1); solrQuery.setFacetLimit(8); solrQuery.addFacetField("name"); solrQuery.addFacetField("code"); SolrRequest request = new QueryRequest(solrQuery, METHOD.POST); request.setPath(getRequestPath()); QueryResponse response = new QueryResponse(solrServer.request(request), solrServer); List<CategorySolr> productSolrList = response.getBeans(CategorySolr.class); List<FacetField> productSolrFacetFieldList = response.getFacetFields(); CategoryResponseBean categoryResponseBean = new CategoryResponseBean(); categoryResponseBean.setCategorySolrList(productSolrList); categoryResponseBean.setCategorySolrFacetFieldList(productSolrFacetFieldList); return categoryResponseBean; }