List of usage examples for org.apache.solr.client.solrj SolrQuery setQuery
public SolrQuery setQuery(String query)
From source file:edu.unc.lib.dl.cdr.services.rest.ContainerManifestController.java
License:Apache License
@SuppressWarnings("unchecked") @RequestMapping(value = "/edit/manifest-json/{pid}") public @ResponseBody Map<String, Object> getJSON(@PathVariable("pid") String pid) throws SolrServerException { if (server == null) initializeSolrServer();/*from ww w .jav a 2s .c o m*/ SolrQuery parameters = new SolrQuery(); parameters.setQuery("ancestorPath:*" + ClientUtils.escapeQueryChars("," + pid + ",") + "*"); parameters.addSort("ancestorNames", ORDER.asc); parameters.addSort("isPart", ORDER.asc); parameters.addSort("displayOrder", ORDER.asc); parameters.addField("ancestorNames"); parameters.addField("ancestorPath"); parameters.addField("id"); parameters.addField("filesizeTotal"); parameters.addField("title"); QueryResponse solrResponse = server.query(parameters); // objects map is a local index of pid to map Map<String, Map<String, Object>> objects = new HashMap<String, Map<String, Object>>(); Map<String, Object> coll = new HashMap<String, Object>(); coll.put("pid", pid); String title = tripleStoreQueryService.lookupLabel(pid); coll.put("title", title); objects.put(pid, coll); for (SolrDocument doc : solrResponse.getResults()) { Map<String, Object> line = new HashMap<String, Object>(); objects.put((String) doc.getFieldValue("id"), line); Collection<Object> ancestorPaths = doc.getFieldValues("ancestorPath"); line.put("depth", String.valueOf(ancestorPaths.size())); // get parent id String[] ancestorPathsArray = ancestorPaths.toArray(new String[] {}); String lastAncestor = ancestorPathsArray[ancestorPathsArray.length - 1]; int start = lastAncestor.indexOf(",") + 1; int end = lastAncestor.indexOf(",", start); String parent = lastAncestor.substring(start, end); // file object record line.put("pid", doc.getFieldValue("id")); line.put("parentPid", parent); line.put("title", doc.getFieldValue("title")); line.put("filesizeTotal", doc.getFieldValue("filesizeTotal")); // TODO get checksum of data file } for (Map<String, Object> record : objects.values()) { if (pid.equals(record.get("pid"))) continue; String parentPid = (String) record.get("parentPid"); // file object as child Map<String, Object> parentHash = objects.get(parentPid); if (parentHash == null) { LOG.warn("Cannot find expected pid in index: {}", parentPid); continue; } List<Map<String, Object>> children = null; if (!parentHash.containsKey("children")) { children = new ArrayList<Map<String, Object>>(); parentHash.put("children", children); } else { children = (List<Map<String, Object>>) parentHash.get("children"); } children.add(record); } return coll; }
From source file:edu.unc.lib.dl.cdr.services.rest.ContainerManifestController.java
License:Apache License
@RequestMapping(value = "/edit/manifest-csv/{pid}") public void downloadCSV(@PathVariable("pid") String pid, HttpServletResponse response) throws SolrServerException, IOException { if (server == null) initializeSolrServer();/* w w w. jav a 2 s. co m*/ SolrQuery parameters = new SolrQuery(); parameters.setQuery("ancestorPath:*" + ClientUtils.escapeQueryChars("," + pid + ",") + "*"); parameters.addSort("ancestorNames", ORDER.asc); parameters.addSort("isPart", ORDER.asc); parameters.addSort("displayOrder", ORDER.asc); parameters.addField("ancestorPath"); parameters.addField("ancestorNames"); parameters.addField("id"); parameters.addField("title"); QueryResponse solrResponse = server.query(parameters); String id = pid.replace(":", "_"); response.addHeader("Content-Disposition", "attachment; filename=\"" + id + "-manifest.csv\""); try (ServletOutputStream out = response.getOutputStream()) { out.print("depth"); out.print(','); out.print("pid"); out.print(','); out.println("title"); for (SolrDocument doc : solrResponse.getResults()) { String title = (String) doc.getFieldValue("title"); String p = (String) doc.getFieldValue("id"); String anc = (String) doc.getFieldValue("ancestorNames"); int depth = doc.getFieldValues("ancestorPath").size(); outputCSV(p, title, depth, anc, out); } } }
From source file:edu.unc.lib.dl.search.solr.service.SolrSearchService.java
License:Apache License
/** * Retrieves the Solr tuple representing the object identified by id. * /* w w w. j a v a 2s . c o m*/ * @param id * identifier (uuid) of the object to retrieve. * @param userAccessGroups * @return */ public BriefObjectMetadataBean getObjectById(SimpleIdRequest idRequest) { LOG.debug("In getObjectbyID"); QueryResponse queryResponse = null; SolrQuery solrQuery = new SolrQuery(); StringBuilder query = new StringBuilder(); query.append(solrSettings.getFieldName(SearchFieldKeys.ID.name())).append(':') .append(SolrSettings.sanitize(idRequest.getId())); try { // Add access restrictions to query addAccessRestrictions(query, idRequest.getAccessGroups()); /* * if (idRequest.getAccessTypeFilter() != null) { addAccessRestrictions(query, idRequest.getAccessGroups(), * idRequest.getAccessTypeFilter()); } */ } catch (AccessRestrictionException e) { // If the user doesn't have any access groups, they don't have access to anything, return null. LOG.error("Error while attempting to add access restrictions to object " + idRequest.getId(), e); return null; } // Restrict the result fields if set if (idRequest.getResultFields() != null) { for (String field : idRequest.getResultFields()) { solrQuery.addField(solrSettings.getFieldName(field)); } } solrQuery.setQuery(query.toString()); solrQuery.setRows(1); LOG.debug("getObjectById query: " + solrQuery.toString()); try { queryResponse = server.query(solrQuery); } catch (SolrServerException e) { LOG.error("Error retrieving Solr object request: " + e); return null; } List<BriefObjectMetadataBean> results = queryResponse.getBeans(BriefObjectMetadataBean.class); if (results != null && results.size() > 0) { return results.get(0); } return null; }
From source file:edu.unc.lib.dl.search.solr.service.SolrSearchService.java
License:Apache License
@SuppressWarnings("unchecked") public List<BriefObjectMetadata> getObjectsById(IdListRequest listRequest) { QueryResponse queryResponse = null;/*from www . ja v a 2 s . co m*/ SolrQuery solrQuery = new SolrQuery(); StringBuilder query = new StringBuilder("*:* "); try { // Add access restrictions to query addAccessRestrictions(query, listRequest.getAccessGroups()); } catch (AccessRestrictionException e) { // If the user doesn't have any access groups, they don't have access to anything, return null. LOG.error("Error while attempting to add access restrictions to object " + listRequest.getId(), e); return null; } query.append(" AND ("); boolean first = true; for (String id : listRequest.getIds()) { if (first) first = false; else query.append(" OR "); query.append(solrSettings.getFieldName(SearchFieldKeys.ID.name())).append(':') .append(SolrSettings.sanitize(id)); } query.append(")"); // Restrict the result fields if set if (listRequest.getResultFields() != null) { for (String field : listRequest.getResultFields()) { solrQuery.addField(solrSettings.getFieldName(field)); } } solrQuery.setQuery(query.toString()); solrQuery.setRows(listRequest.getIds().size()); LOG.debug("getObjectsById query: " + solrQuery.toString()); try { queryResponse = server.query(solrQuery); } catch (SolrServerException e) { LOG.error("Error retrieving Solr object request: " + e); return null; } List<?> results = queryResponse.getBeans(BriefObjectMetadataBean.class); return (List<BriefObjectMetadata>) results; }
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 ww w .j av a2s . c o m * @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
public Date getTimestamp(String pid, AccessGroupSet accessGroups) { QueryResponse queryResponse = null;/*from www . j a v a2s . c o m*/ SolrQuery solrQuery = new SolrQuery(); StringBuilder query = new StringBuilder(); query.append(solrSettings.getFieldName(SearchFieldKeys.ID.name())).append(':') .append(SolrSettings.sanitize(pid)); 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("Error while attempting to add access restrictions to object " + pid, e); return null; } solrQuery.addField(solrSettings.getFieldName(SearchFieldKeys.TIMESTAMP.name())); solrQuery.setQuery(query.toString()); solrQuery.setRows(1); LOG.debug("query: " + solrQuery.toString()); try { queryResponse = server.query(solrQuery); } catch (SolrServerException e) { LOG.error("Error retrieving Solr object request: " + e); return null; } if (queryResponse.getResults().getNumFound() == 0) return null; return (Date) queryResponse.getResults().get(0).getFieldValue("timestamp"); }
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. * // w w w . jav a 2s. 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.search.solr.service.SolrSearchService.java
License:Apache License
/** * Returns the value of a single field from the object identified by pid. * /* w w w.ja v a2s . co m*/ * @param pid * @param field * @return The value of the specified field or null if it wasn't found. */ public Object getField(String pid, String field) throws SolrServerException { QueryResponse queryResponse = null; SolrQuery solrQuery = new SolrQuery(); StringBuilder query = new StringBuilder(); query.append("id:").append(SolrSettings.sanitize(pid)); solrQuery.setQuery(query.toString()); solrQuery.addField(field); queryResponse = server.query(solrQuery); if (queryResponse.getResults().getNumFound() > 0) { return queryResponse.getResults().get(0).getFieldValue(field); } return null; }
From source file:edu.unc.lib.dl.search.solr.service.SolrSearchService.java
License:Apache License
/** * Returns a combined set of distinct field values for one or more fields, limited by the set of access groups * provided//from ww w .j a v a2 s.c o m * * @param fields * Solr field names to retrieve distinct values for * @param maxValuesPerField * Max number of distinct values to retrieve for each field * @param accessGroups * @return * @throws AccessRestrictionException * @throws SolrServerException */ public java.util.Collection<String> getDistinctFieldValues(String[] fields, int maxValuesPerField, AccessGroupSet accessGroups) throws AccessRestrictionException, SolrServerException { SolrQuery solrQuery = new SolrQuery(); StringBuilder query = new StringBuilder("*:*"); addAccessRestrictions(query, accessGroups); solrQuery.setQuery(query.toString()); solrQuery.setFacet(true); for (String facetField : fields) solrQuery.addFacetField(facetField); solrQuery.setFacetLimit(maxValuesPerField); solrQuery.setFacetSort("index"); QueryResponse queryResponse = server.query(solrQuery); // Determine initial capacity for the result list int numberValues = 0; for (FacetField facet : queryResponse.getFacetFields()) numberValues += facet.getValueCount(); java.util.Collection<String> fieldValues = new java.util.HashSet<String>(numberValues); for (FacetField facet : queryResponse.getFacetFields()) for (Count count : facet.getValues()) fieldValues.add(count.getName()); return fieldValues; }
From source file:edu.unc.lib.dl.ui.service.SolrQueryLayerService.java
License:Apache License
/** * Retrieves metadata fields for the parent collection pids contained by the supplied facet object. * /* w w w .ja va2 s .co m*/ * @param parentCollectionFacet * Facet object containing parent collection ids to lookup * @param accessGroups * @return */ public List<BriefObjectMetadataBean> getParentCollectionValues(FacetFieldObject parentCollectionFacet) { if (parentCollectionFacet == null || parentCollectionFacet.getValues() == null || parentCollectionFacet.getValues().size() == 0) { return null; } QueryResponse queryResponse = null; SolrQuery solrQuery = new SolrQuery(); StringBuilder query = new StringBuilder(); boolean first = true; query.append('('); for (GenericFacet pidFacet : parentCollectionFacet.getValues()) { if (pidFacet.getSearchValue() != null && pidFacet.getSearchValue().length() > 0) { if (first) { first = false; } else { query.append(" OR "); } query.append(solrSettings.getFieldName(SearchFieldKeys.ID.name())).append(':') .append(SolrSettings.sanitize(pidFacet.getSearchValue())); } } query.append(')'); // If no pids were added to the query, then there's nothing to look up if (first) { return null; } try { // Add access restrictions to query addAccessRestrictions(query); } catch (AccessRestrictionException e) { // If the user doesn't have any access groups, they don't have access to anything, return null. LOG.error("No access groups", e); return null; } solrQuery.setQuery(query.toString()); solrQuery.setFacet(true); solrQuery.setFields(solrSettings.getFieldName(SearchFieldKeys.ID.name()), solrSettings.getFieldName(SearchFieldKeys.ANCESTOR_PATH.name()), solrSettings.getFieldName(SearchFieldKeys.TITLE.name())); solrQuery.setRows(parentCollectionFacet.getValues().size()); try { queryResponse = this.executeQuery(solrQuery); return queryResponse.getBeans(BriefObjectMetadataBean.class); } catch (SolrServerException e) { LOG.error("Failed to execute query " + solrQuery.toString(), e); } return null; }