List of usage examples for org.apache.solr.common SolrDocumentList getNumFound
public long getNumFound()
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; }