Example usage for org.apache.solr.client.solrj SolrQuery setQuery

List of usage examples for org.apache.solr.client.solrj SolrQuery setQuery

Introduction

In this page you can find the example usage for org.apache.solr.client.solrj SolrQuery setQuery.

Prototype

public SolrQuery setQuery(String query) 

Source Link

Usage

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;
}