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

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

Introduction

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

Prototype

public SolrQuery addField(String field) 

Source Link

Usage

From source file:de.dlr.knowledgefinder.webapp.webservice.solr.query.AbstractSolrQueryFactory.java

License:Apache License

private void addDefaultFieldsToSolrQuery(SolrQuery solrQuery) {
    for (String f : getDefaultFields()) {
        solrQuery.addField(f.trim());
    }//from ww  w  .ja  v  a 2  s  .  c  om
}

From source file:de.qaware.chronix.examples.exploration.ui.MainController.java

License:Apache License

private void queryTimeSeries() {
    Task task = new Task<Void>() {
        @Override//from w  ww.j av  a 2s.co  m
        protected Void call() throws Exception {
            String queryString = query.getText().trim();
            String fq = fqQuery.getText().trim();

            Platform.runLater(() -> {
                chart.getData().clear();
                rows.clear();
                //Start the query
                chart.setTitle("Your Query was q=" + queryString + " fq=" + fq);
            });

            SolrQuery query = new SolrQuery(queryString);
            query.addField("+data");

            boolean hasFilterQueries = !fq.isEmpty();

            if (hasFilterQueries) {
                query.addFilterQuery(fq);
            }

            long queryStart = System.currentTimeMillis();
            List<MetricTimeSeries> result = chronix.stream(solr, query).collect(Collectors.toList());
            long queryEnd = System.currentTimeMillis();
            LOGGER.info("Query took: {} ms for {} points", (queryEnd - queryStart), size(result));
            queryStart = System.currentTimeMillis();
            result.forEach(ts -> {
                if (hasFilterQueries) {
                    addFunctionsToTable(ts);
                }
                convertTsToSeries(ts);
            });
            queryEnd = System.currentTimeMillis();
            LOGGER.info("Charting took: {} ms", (queryEnd - queryStart));
            return null;
        }
    };
    new Thread(task).start();

}

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  a va  2 s .co  m*/
 */
@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.unc.lib.dl.cdr.services.rest.ContainerDataFileChecksumsController.java

License:Apache License

@RequestMapping(value = "/edit/fileinfo/{pid}")
public void get(@PathVariable("pid") String pid, HttpServletResponse response)
        throws SolrServerException, IOException {
    String fid = pid.replace(":", "_");
    response.addHeader("Content-Disposition", "attachment; filename=\"" + fid + "-fileinfo.csv\"");
    try (ServletOutputStream out = response.getOutputStream()) {
        out.print("title");
        out.print(',');
        out.print("pid");
        out.print(',');
        out.print("mimetype");
        out.print(',');
        out.print("length");
        out.print(',');
        out.println("checksum");

        if (server == null)
            initializeSolrServer();/*from   ww  w  . j a v  a 2 s . c o  m*/
        SolrQuery parameters = new SolrQuery();
        parameters.setQuery("contentModel:" + ClientUtils.escapeQueryChars("info:fedora/cdr-model:Simple")
                + " ancestorPath:*" + ClientUtils.escapeQueryChars("," + pid + ",") + "*");
        parameters.addSort("filesizeTotal", ORDER.desc);
        parameters.addField("title");
        parameters.addField("id");
        parameters.addField("datastream");
        QueryResponse solrResponse = server.query(parameters);

        for (SolrDocument doc : solrResponse.getResults()) {
            Map<String, String> line = new HashMap<String, String>();
            line.put("pid", (String) doc.getFieldValue("id"));
            line.put("title", (String) doc.getFieldValue("title"));
            String[] dsValues = new String[5];
            for (Object ds : doc.getFieldValues("datastream")) {
                String dstr = (String) ds;
                if (dstr.startsWith("DATA_FILE|")) {
                    dsValues = dstr.split(Pattern.quote("|"));
                    break;
                }
            }
            line.put("md5sum", dsValues[4]);
            line.put("length", dsValues[3]);
            line.put("mimetype", dsValues[1]);
            outputCSV(line, out);
        }
    }
}

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 w  ww.j  a va 2 s  . 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 ww. j  ava2  s.  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("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 ww.j a  va2  s  . 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.j  av  a  2 s . com
    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

public Date getTimestamp(String pid, AccessGroupSet accessGroups) {
    QueryResponse queryResponse = null;/*from   www . j  ava  2s . 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.
 * //from w ww .j  a  va  2 s .  c  o m
 * @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;
}