Example usage for org.apache.solr.common SolrDocumentList getNumFound

List of usage examples for org.apache.solr.common SolrDocumentList getNumFound

Introduction

In this page you can find the example usage for org.apache.solr.common SolrDocumentList getNumFound.

Prototype

public long getNumFound() 

Source Link

Usage

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

License:Apache License

@Override
public SearchResults search(Query query) throws SearchEngineException {
    SearchResults results;//from w  w  w .j  a  va 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;//from   w w  w.j a v a 2  s.c  om
    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:uk.co.flax.ukmp.search.solr.SolrSearchEngine.java

License:Apache License

/**
 * Run the given query, removing the given list of filters from the query itself.
 * @param query the query to be run./*from   www.  j  a v  a2  s.c  o  m*/
 * @param filters the list of filters to remove.
 * @return a list of documents returned from the query.
 * @throws SolrServerException if a problem occurs accessing Solr.
 */
private SolrDocumentList runQueryWithoutFilters(SolrQuery query, List<String> filters)
        throws SolrServerException {
    for (String fq : filters) {
        // Re-query without the filter queries set
        query.removeFilterQuery(fq);
    }
    QueryResponse response = server.query(query);
    SolrDocumentList docs = response.getResults();

    // Set numFound to the results list size, avoid reading every tweet in
    // the search engine
    if (docs.getNumFound() > 0) {
        docs.setNumFound(docs.size());
    }

    return docs;
}

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

License:Open Source License

/**
 * Method to search the index for records
 * //from  ww w  .  ja  v  a  2  s.c o  m
 * @param query
 *            Query to perform the search
 * @return Search results
 * @throws DatabaseConfigException
 */
public SolrBrowseResult search(SolrQuery query) throws IndexException, DatabaseConfigException {

    SolrServer server = getMSTSolrService().getServer();
    SolrBrowseResult result = null;

    // Discard deleted records
    // query.addFilterQuery("deleted:false");

    if (log.isDebugEnabled()) {
        log.debug("Querying Solr server with query:" + query);
    }

    if (server == null) {
        log.error("Solr server is null. Check the path to solr folder.");
        throw new IndexException("Solr server is null. Check the path to solr folder.");
    }

    QueryResponse rsp = null;
    try {
        rsp = server.query(query);
    } catch (SolrServerException sse) {
        log.error("Exception occured while executing the query. Check the path to solr folder.", sse);
        throw new IndexException(sse.getMessage());
    }

    // Load the records in the SolrBrowseResilt object
    SolrDocumentList docs = rsp.getResults();

    RecordService recordService = (RecordService) config.getBean("RecordService");
    Iterator<SolrDocument> iteration = docs.iterator();
    List<Record> records = new ArrayList<Record>();

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

    // Load the facets in the SolrBrowseResult object
    List<FacetField> facets = rsp.getFacetFields();
    result = new SolrBrowseResult(records, facets);
    result.setTotalNumberOfResults(docs.getNumFound());

    return result;

}

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)/*from w w  w  .j  a  v a 2s  .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.services.example.test.CustomTest.java

License:Open Source License

@Test
public void testStuff() throws Exception {

    getRepositoryDAO().getRecordsWSets("test_repo", null, null, null);

    SolrQuery sq = new SolrQuery("*:*");
    SolrDocumentList sdl = getSolrIndexManager().getDocumentList(sq);
    LOG.debug("sdl.size(): " + sdl.size());

    sq = new SolrQuery("dc");
    sdl = getSolrIndexManager().getDocumentList(sq);
    LOG.debug("sdl.size(): " + sdl.size());
    LOG.debug("sdl.getNumFound(): " + sdl.getNumFound());

    Repository repo = (Repository) MSTConfiguration.getInstance().getBean("Repository");
    repo.setName("test_repo");
    List<Record> records = ((DefaultRepository) repo).getRecordsWSets(
            new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24 * 50), new Date(), null,
            new char[] { Record.ACTIVE, Record.DELETED });

    for (Record r : records) {
        LOG.debug(r.getId() + " " + r.getSets());
    }//from   w  ww  . j  a  va2  s  .  c o m
}

From source file:xc.mst.services.example.test.StartToFinishTest.java

License:Open Source License

public void finalTest() throws Exception {
    boolean useAsserts = true;
    Record r = getRepositoryService().getRecord(1999);
    if (useAsserts)
        assert r.getPredecessors().get(0).getId() == 999;

    r = getRepositoryService().getRecord(999);
    if (useAsserts) {
        assert r.getSuccessors().get(0).getId() == 1999;
        assert getHarvestRepository().getNumRecords() == 1000;
        assert getServiceRepository().getNumRecords() == 1000;
    }/*from  ww  w . j  a v a 2 s .  c  om*/

    SolrQuery sq = new SolrQuery("*:*");
    SolrDocumentList sdl = getSolrIndexManager().getDocumentList(sq);
    LOG.debug("sdl.getNumFound(): " + sdl.getNumFound());
    if (useAsserts) {
        assert sdl.getNumFound() == 2000;
    }

    verifySets();

    getRepositoryDAO().setAllLastModifiedOais(getHarvestRepository().getName(), new Date(0));
    Date beforeGettingSameRecords = new Date();
    createHarvestSchedule();
    LOG.debug("160");
    waitUntilFinished();

    if (useAsserts) {
        assert beforeGettingSameRecords.before(getHarvestRepository().getLastModified());
        assert getHarvestRepository().getNumRecords() == 1000;
        assert getServiceRepository().getNumRecords() == 1000;
    }
    verifySets();
    LOG.debug("getHarvestRepository().getNumRecords(): " + getHarvestRepository().getNumRecords());
    LOG.debug("getServiceRepository().getNumRecords(): " + getServiceRepository().getNumRecords());
    sq = new SolrQuery("*:*");
    sdl = getSolrIndexManager().getDocumentList(sq);
    LOG.debug("sdl.getNumFound(): " + sdl.getNumFound());
    if (useAsserts)
        assert sdl.getNumFound() == 2000;

    LOG.debug("180");
    LOG.debug("200");
    updateHarvestSchedule();
    LOG.debug("220");
    waitUntilFinished();
    LOG.debug("240");

    LOG.debug("getHarvestRepository().getNumRecords(): " + getHarvestRepository().getNumRecords());
    LOG.debug("getServiceRepository().getNumRecords(): " + getServiceRepository().getNumRecords());
    if (useAsserts) {
        assert getHarvestRepository().getNumRecords() > 1000;
        assert getServiceRepository().getNumRecords() > 1000;
    }

    sq = new SolrQuery("*:*");
    sdl = getSolrIndexManager().getDocumentList(sq);
    LOG.debug("sdl.getNumFound(): " + sdl.getNumFound());
    if (useAsserts)
        assert sdl.getNumFound() > 2000;

}