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

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

Introduction

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

Prototype

public SolrQuery setStart(Integer start) 

Source Link

Usage

From source file:uk.co.flax.biosolr.ontology.search.solr.SolrDocumentSearch.java

License:Apache License

@Override
public ResultsList<Document> searchByEfoUri(int start, int rows, String term, String... uris)
        throws SearchEngineException {
    ResultsList<Document> results;

    try {//from  ww w . ja  va  2  s  .c  o  m
        SolrQuery query = new SolrQuery(term + " OR " + EFO_URI_FIELD + ":" + buildUriFilter(uris));
        // query.addFilterQuery(EFO_URI_FIELD + ":" + buildUriFilter(uris));
        query.setStart(start);
        query.setRows(rows);
        query.setRequestHandler(config.getDocumentUriRequestHandler());

        LOGGER.debug("Solr query: {}", query);

        QueryResponse response = server.query(query);
        List<Document> docs = response.getBeans(Document.class);
        results = new ResultsList<>(docs, start, (start / rows), response.getResults().getNumFound());
    } catch (SolrServerException | IOException e) {
        throw new SearchEngineException(e);
    }

    return results;
}

From source file:uk.co.flax.biosolr.ontology.search.solr.SolrOntologySearch.java

License:Apache License

@Override
public ResultsList<OntologyEntryBean> searchOntology(String term, List<String> filters, int start, int rows,
        List<String> fields) throws SearchEngineException {
    ResultsList<OntologyEntryBean> results = null;

    try {/* w ww .j  a  v  a2 s.c o m*/
        SolrQuery query = new SolrQuery(term);
        if (filters != null && !filters.isEmpty()) {
            query.addFilterQuery(filters.toArray(new String[filters.size()]));
        }
        if (fields != null && !fields.isEmpty()) {
            query.setFields(fields.toArray(new String[fields.size()]));
        }
        query.setStart(start);
        query.setRows(rows);
        query.setRequestHandler(config.getOntologyRequestHandler());

        LOGGER.trace("Ontology search URL: {}", getQueryUrl(query, config.getOntologyUrl()));

        QueryResponse response = server.query(query);
        List<OntologyEntryBean> annotations = response.getBeans(OntologyEntryBean.class);
        results = new ResultsList<>(annotations, rows, (start / rows), response.getResults().getNumFound());
    } catch (SolrServerException e) {
        throw new SearchEngineException(e);
    }

    return results;
}

From source file:uk.co.flax.ukmp.search.solr.SolrSearchEngine.java

License:Apache License

@Override
public SearchResults search(Query query) throws SearchEngineException {
    SearchResults results;//  w w  w  . j  a  v  a  2  s .  c o  m

    SolrQuery sQuery = new SolrQuery(query.getQuery());
    sQuery.setRows(query.getPageSize());
    int start = query.getPageSize() * query.getPageNumber();
    sQuery.setStart(start);
    sQuery.setSort(query.getSortField(), query.isSortAscending() ? ORDER.asc : ORDER.desc);

    if (query.getFilters() != null) {
        for (String fq : query.getFilters()) {
            sQuery.addFilterQuery(fq);
        }
    }

    // Set the request handler
    sQuery.setRequestHandler(config.getQueryHandler());

    try {
        QueryResponse response = server.query(sQuery);
        SolrDocumentList docs = response.getResults();

        Map<String, FacetList> availableFilters = extractAvailableFilters(response);
        availableFilters.putAll(extractFacetQueries(response));
        Map<String, FacetList> appliedFilters = extractAppliedFilters(query);
        trimAvailableFilters(availableFilters, appliedFilters);

        SearchState search = new SearchState(query.getQuery(), query.getSortField(), query.isSortAscending(),
                query.getPageNumber(), availableFilters, null, appliedFilters, query.isHighlightingEnabled());
        List<Tweet> tweets = extractTweets(docs, response.getHighlighting(), query.isHighlightingEnabled());

        results = new SearchResults(start, docs.getNumFound(), query.getPageSize(), tweets, search);
    } catch (SolrServerException e) {
        LOGGER.error("Server exception caught for query {}: {}", sQuery.toString(), e.getMessage());
        throw new SearchEngineException(e);
    }

    return results;
}

From source file:uk.co.flax.ukmp.search.solr.SolrSearchEngine.java

License:Apache License

@Override
public SearchResults getTextBatch(int batchNum) throws SearchEngineException {
    SearchResults results;// w w  w. ja v a  2  s.c o  m
    TermsConfiguration termsConfig = config.getTermsConfiguration();

    SolrQuery query = new SolrQuery("*:*");
    query.setRequestHandler(termsConfig.getHandler());
    query.setFields(termsConfig.getField());
    query.setRows(termsConfig.getBatchSize());
    query.setStart(batchNum * termsConfig.getBatchSize());
    query.addFilterQuery(termsConfig.getFilters().toArray(new String[0]));

    try {
        QueryResponse response = server.query(query);
        SolrDocumentList docs = response.getResults();

        // Attempt to ensure we always return at least one batch of results
        if (docs.getNumFound() == 0) {
            LOGGER.debug("No tweets found in text batch - running again without filters");
            docs = runQueryWithoutFilters(query, termsConfig.getFilters());
        }

        List<Tweet> tweets = new ArrayList<Tweet>(docs.size());
        for (SolrDocument doc : docs) {
            Tweet tweet = new Tweet();
            tweet.setText((String) doc.getFieldValue(termsConfig.getField()));
            tweets.add(tweet);
        }

        results = new SearchResults(query.getStart(), docs.getNumFound(), query.getRows(), tweets, null);
    } catch (SolrServerException e) {
        LOGGER.error("Server exception caught getting text batch {}: {}", batchNum, e.getMessage());
        throw new SearchEngineException(e);
    }

    return results;
}

From source file:xc.mst.action.browse.BrowseRecords.java

License:Open Source License

/**
 * Search for records// ww  w.j  a  v  a  2s  . c o m
 */
public String browse() {
    RecordService recordService = (RecordService) MSTConfiguration.getInstance().getBean("RecordService");
    if (log.isDebugEnabled()) {
        log.debug("User entered query::" + query);
    }
    try {
        SolrQuery solrQuery = new SolrQuery();

        // If Query is empty retrieve all records
        if ((query == null) || (query.equals(""))) {
            solrQuery.setQuery("*:*");
        } else {
            if (!StringUtils.isEmpty(identifier)) {
                String qFld = getIdentifiers().get(identifier);
                if (query.indexOf(" ") != -1) {
                    query = "(" + query + ")";
                }
                if (qFld != null) {
                    query = query.replaceAll(":", "\\\\:"); // replacing with \\: and solr ends up thinking the token before : is a field
                                                            //  warning:  replacing the 1st : (the delim between field and text) breaks
                                                            //             the search, no results returned.
                    String q = new String(qFld + ":" + query);
                    solrQuery.setQuery(q);
                    if (log.isDebugEnabled()) {
                        LOG.debug("*** browse() ident=" + qFld + " query=" + q);
                    }
                } else {
                    if (log.isDebugEnabled()) {
                        LOG.debug("*** NO field associated with IDENTIFIER! " + " query=" + query
                                + " identifier=" + identifier);
                    }
                    // solr schema: <copyField source="*_key"  dest="text" />
                    if (query.indexOf(" ") != -1) {
                        query = "(" + query + ")";
                    }
                    // TODO having trouble getting this working, leave as a TODO for now, and drop back to default search on record_id.
                    // (should never get here anyways, an identifier will always be picked.
                    //solrQuery.setQuery("text:"+ query);
                    solrQuery.setQuery(query.replaceAll(":", "\\\\:"));
                }
            } else {
                if (log.isDebugEnabled()) {
                    LOG.debug("*** NO IDENTIFIER FOUND! " + " query=" + query);
                }
                solrQuery.setQuery("*:*");
            }
        }

        StringTokenizer nameTokenizer = new StringTokenizer(selectedFacetNames, "|");
        StringTokenizer valueTokenizer = new StringTokenizer(selectedFacetValues, "|");

        while (nameTokenizer.hasMoreTokens()) {
            String name = nameTokenizer.nextToken();
            String value = valueTokenizer.nextToken();
            addFilterQuery(solrQuery, name, value);
        }

        // Add selected facet to query
        if (addFacetName != null && addFacetName.length() > 0) {
            addFilterQuery(solrQuery, addFacetName, addFacetValue);
            // Add facet names and values to | separated list
            selectedFacetNames = selectedFacetNames + "|" + addFacetName;
            selectedFacetValues = selectedFacetValues + "|" + addFacetValue;
        }

        // Remove selected facet from query
        if (removeFacetName != null && removeFacetName.length() > 0) {
            solrQuery.removeFilterQuery(
                    removeFacetName + ":\"" + removeFacetValue.replaceAll(":", "\\\\:") + "\"");
        }

        if (log.isDebugEnabled()) {
            log.debug("Query after adding/removing facet ::" + query);
            log.debug("After Adding facet names ::" + selectedFacetNames);
            log.debug("After Adding facet values ::" + selectedFacetValues);
        }
        // Create facet names and values List
        StringTokenizer facetNameTokenizer = new StringTokenizer(selectedFacetNames, "|");
        List<String> facetNamesList = new ArrayList<String>();

        StringTokenizer facetValueTokenizer = new StringTokenizer(selectedFacetValues, "|");
        List<String> facetValuesList = new ArrayList<String>();

        StringBuffer newSelectedFacetNames = new StringBuffer();
        StringBuffer newSelectedFacetValues = new StringBuffer();
        String myNameToken = "";
        String myValueToken = "";
        while (facetNameTokenizer.hasMoreTokens()) {
            myNameToken = facetNameTokenizer.nextToken();
            myValueToken = facetValueTokenizer.nextToken();
            if (removeFacetName != null && removeFacetName.length() > 0) {
                // Create facet names String separated by |
                if (!(removeFacetName.equalsIgnoreCase(myNameToken)
                        && removeFacetValue.equalsIgnoreCase(myValueToken))) {
                    newSelectedFacetNames.append("|");
                    newSelectedFacetNames.append(myNameToken);
                    facetNamesList.add(myNameToken);

                    newSelectedFacetValues.append("|");
                    newSelectedFacetValues.append(myValueToken);
                    facetValuesList.add(myValueToken);
                }
            } else {
                facetNamesList.add(myNameToken);
                facetValuesList.add(myValueToken);
            }
        }

        if (removeFacetValue != null && removeFacetValue.length() > 0) {
            selectedFacetNames = newSelectedFacetNames.toString();
            selectedFacetValues = newSelectedFacetValues.toString();
        }

        if (log.isDebugEnabled()) {
            log.debug("After removing facet names(final):" + selectedFacetNames);
            log.debug("After removing facet values(final):" + selectedFacetValues);
        }

        // Query formation
        solrQuery.setFacet(true).setFacetMinCount(1);
        solrQuery.addFacetField("status");
        solrQuery.addFacetField("provider_name");
        solrQuery.addFacetField("service_name");
        solrQuery.addFacetField("format_name");
        solrQuery.addFacetField("set_name");
        solrQuery.addFacetField("error");

        // Fields to load
        solrQuery.addField(RecordService.FIELD_RECORD_ID);
        solrQuery.addField(RecordService.FIELD_FORMAT_ID);
        solrQuery.addField(RecordService.FIELD_PROVIDER_ID);
        solrQuery.addField(RecordService.FIELD_SERVICE_ID);
        solrQuery.addField(RecordService.FIELD_HARVEST_SCHEDULE_NAME);
        solrQuery.addField(RecordService.FIELD_ERROR);
        solrQuery.addField(RecordService.FIELD_PROCESSED_FROM);
        solrQuery.addField(RecordService.FIELD_SUCCESSOR);
        solrQuery.addField(RecordService.FIELD_OAI_IDENTIFIER);

        getIdentifiers();

        rowEnd = rowStart + numberOfResultsToShow;

        // In initial page load, we are not going to show any records. Only facets will be shown
        if (isInitialLoad) {
            solrQuery.setStart(0);
            solrQuery.setRows(0);
        } else {
            solrQuery.setStart(rowStart);
            solrQuery.setRows(numberOfResultsToShow);
        }
        BrowseRecordService browseRecordService = (BrowseRecordService) MSTConfiguration.getInstance()
                .getBean("BrowseRecordService");
        result = browseRecordService.search(solrQuery);

        if (log.isDebugEnabled()) {
            log.debug("Search result::" + result);
        }

        if ((result != null) && (rowEnd > result.getTotalNumberOfResults())) {
            rowEnd = result.getTotalNumberOfResults();
        }

        // Add facet name and value list to SolrBrowseResult(result) object for display in UI
        if (result != null) {
            for (int i = 0; i < facetNamesList.size(); i++) {
                // Get successor/predecessor of the record to display its information
                if (facetNamesList.get(i).equalsIgnoreCase("successor")) {
                    successorRecord = recordService.getById(Long.parseLong(facetValuesList.get(i)));
                }
                if (facetNamesList.get(i).equalsIgnoreCase("processed_from")) {

                    predecessorRecord = recordService.getById(Long.parseLong(facetValuesList.get(i)));
                }

                result.addFacetFilter(new FacetFilter(facetNamesList.get(i), facetValuesList.get(i)));
            }
        }
    } catch (DatabaseConfigException dce) {
        log.error(
                "Search failed. Problem with connecting to database using the parameters in configuration file.",
                dce);
        errorType = "error";
        addFieldError("dbError",
                "Search failed.Problem with connecting to database using the parameters in configuration file.");
        return INPUT;
    } catch (IndexException ie) {
        log.error("Search failed. Problem with connecting to Solr server. Check the path to solr folder.", ie);
        errorType = "error";
        addFieldError("dbError",
                "Search failed. Problem with connecting to Solr server. Check the path to solr folder.");
        return INPUT;
    }

    return SUCCESS;
}

From source file:xc.mst.manager.record.DefaultRecordService.java

License:Open Source License

@Override
public Record getLastCreatedRecord(int serviceId) throws IndexException, DatabaseConfigException {
    if (log.isDebugEnabled())
        log.debug("Getting the last created record with service ID " + serviceId);

    // Create a query to get the Documents with the requested service ID
    SolrQuery query = new SolrQuery();
    query.setQuery(FIELD_SERVICE_ID + ":" + Integer.toString(serviceId));
    query.setSortField(FIELD_RECORD_ID, ORDER.desc);
    query.setRows(1);/*w  w w.  ja  va 2 s.co m*/
    query.setStart(0);

    // Get the result of the query
    SolrDocumentList docs = null;
    SolrIndexManager sim = (SolrIndexManager) config.getBean("SolrIndexManager");
    docs = sim.getDocumentList(query);

    // Return null if we couldn't find the record with the correct ID
    if (docs == null || docs.size() == 0) {
        if (log.isDebugEnabled())
            log.debug("There are no records available for service Id = " + serviceId + " .");

        return null;
    } // end if(record not found)

    return getRecordFromDocument(docs.get(0));

}

From source file:xc.mst.manager.record.DefaultRecordService.java

License:Open Source License

@Override
public SolrBrowseResult getOutgoingRecordsInRange(Date from, Date until, Set set, int formatId, int offset,
        int numResults, int serviceId) throws IndexException {
    // True if we're getting the records for a specific set, false if we're getting all records
    boolean useSet = (set != null);

    // True if we're getting the count for a specific metadataPrefix, false if we're getting it for all records
    boolean useMetadataPrefix = (formatId > 0);

    if (log.isDebugEnabled())
        log.debug("Getting the records updated later than " + from + " and earlier than " + until
                + (useSet ? " in set with setSPec " + set.getSetSpec() : "")
                + (useMetadataPrefix ? " with format ID " + formatId : ""));

    // Create a query to get the Documents for unprocessed records
    SolrQuery query = new SolrQuery();
    StringBuffer queryBuffer = new StringBuffer();

    if (useSet)//  w ww. j a va2 s.  c om
        queryBuffer.append(FIELD_SET_SPEC).append(":").append(set.getSetSpec());
    if (useSet && useMetadataPrefix)
        queryBuffer.append(" AND ");
    if (useMetadataPrefix)
        queryBuffer.append(FIELD_FORMAT_ID + ":").append(Integer.toString(formatId));

    if (useSet || useMetadataPrefix)
        queryBuffer.append(" AND ");

    queryBuffer.append(FIELD_SERVICE_ID).append(":").append(Integer.toString(serviceId));

    // Get only fields OAI header & OAI XML
    query.addField(FIELD_OAI_HEADER);
    query.addField(FIELD_OAI_XML);
    query.addField(FIELD_DELETED);
    query.setQuery(queryBuffer.toString());
    if (from != null && until != null) {
        query.addFilterQuery(
                FIELD_UPDATED_AT + ":[" + (new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(from))
                        + " TO " + (new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(until)) + "]");
    }

    if (from != null && until == null) {
        query.addFilterQuery(FIELD_UPDATED_AT + ":["
                + (new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(from)) + " TO *]");
    }

    if (from == null && until != null) {
        query.addFilterQuery(FIELD_UPDATED_AT + ":[ * TO "
                + (new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(until)) + "]");
    }

    query.setStart(offset);
    query.setRows(numResults);
    SolrDocumentList docs = ((SolrIndexManager) config.getBean("SolrIndexManager")).getDocumentList(query);
    Iterator<SolrDocument> iteration = docs.iterator();
    List<Record> records = new ArrayList<Record>();

    while (iteration.hasNext()) {
        records.add(getRecordXMLFromDocument(iteration.next()));
    }

    SolrBrowseResult result = new SolrBrowseResult(records);
    result.setTotalNumberOfResults(docs.getNumFound());

    // Return the empty list if we couldn't find the records
    if (result.getTotalNumberOfResults() == 0) {
        if (log.isDebugEnabled())
            log.debug("Could not find any records updated later than " + from + " and earlier than " + until
                    + (useSet ? " in set with setSPec " + set.getSetSpec() : "")
                    + (useMetadataPrefix ? " with format ID " + formatId : ""));

    } else {
        if (log.isDebugEnabled())
            log.debug("Found " + records.size() + " records updated later than " + from + " and earlier than "
                    + until + (useSet ? " in set with setSPec " + set.getSetSpec() : "")
                    + (useMetadataPrefix ? " with format ID " + formatId : ""));
    }

    return result;
}

From source file:xc.mst.utils.index.ExpressionList.java

License:Open Source License

/**
 * Constructs a ExpressionList around a Solr query. The docs returned by the query
 * are assumed to all be Expression Objects
 * /*  w ww  .j  av  a2 s.c o  m*/
 * @param query
 *            The Solr query for which the ExpressionList was built
 */
public ExpressionList(SolrQuery query) throws IndexException {
    this.query = query;
    query.setRows(MAX_RESULTS);
    query.setStart(currentOffset);
    docs = indexMgr.getDocumentList(query);
}

From source file:xc.mst.utils.index.HoldingsList.java

License:Open Source License

/**
 * Constructs a HoldingsList around a Solr query. The docs returned by the query
 * are assumed to all be Holdings Objects
 * // ww w  . ja  v  a  2  s  .c o m
 * @param query
 *            The Solr query for which the HoldingsList was built
 */
public HoldingsList(SolrQuery query) throws IndexException {
    this.query = query;
    query.setRows(MAX_RESULTS);
    query.setStart(currentOffset);
    docs = indexMgr.getDocumentList(query);
}

From source file:xc.mst.utils.index.ItemList.java

License:Open Source License

/**
 * Constructs a ItemList around a Solr query. The docs returned by the query
 * are assumed to all be Item Objects//from   w w  w  . j  a  va2 s. c o  m
 * 
 * @param query
 *            The Solr query for which the ItemList was built
 */
public ItemList(SolrQuery query) throws IndexException {
    this.query = query;
    query.setRows(MAX_RESULTS);
    query.setStart(currentOffset);
    docs = indexMgr.getDocumentList(query);
}