List of usage examples for org.apache.solr.client.solrj SolrQuery addField
public SolrQuery addField(String field)
From source file:uk.ac.ebi.phenotype.service.StatisticalResultService.java
License:Apache License
public Map<String, List<StatisticalResultBean>> getPvaluesByAlleleAndPhenotypingCenterAndPipeline( String alleleAccession, String phenotypingCenter, String pipelineStableId, List<String> procedureStableIds, ArrayList<String> resource) throws NumberFormatException, SolrServerException { Map<String, List<StatisticalResultBean>> results = new HashMap<String, List<StatisticalResultBean>>(); SolrQuery query = new SolrQuery(); query.setQuery(StatisticalResultDTO.PHENOTYPING_CENTER + ":\"" + phenotypingCenter + "\" AND " + StatisticalResultDTO.PIPELINE_STABLE_ID + ":" + pipelineStableId + " AND " + StatisticalResultDTO.ALLELE_ACCESSION_ID + ":\"" + alleleAccession + "\""); if (procedureStableIds != null) { query.addFilterQuery("(" + StatisticalResultDTO.PROCEDURE_STABLE_ID + ":" + StringUtils.join(procedureStableIds, " OR " + StatisticalResultDTO.PROCEDURE_STABLE_ID + ":") + ")"); }/* w w w . j av a2 s . c om*/ if (resource != null) { query.addFilterQuery("(" + StatisticalResultDTO.RESOURCE_NAME + ":" + StringUtils.join(resource, " OR " + StatisticalResultDTO.RESOURCE_NAME + ":") + ")"); } query.setRows(Integer.MAX_VALUE); query.addField(StatisticalResultDTO.P_VALUE).addField(StatisticalResultDTO.EFFECT_SIZE) .addField(StatisticalResultDTO.STATUS).addField(StatisticalResultDTO.STATISTICAL_METHOD) .addField(StatisticalResultDTO.ZYGOSITY).addField(StatisticalResultDTO.MALE_CONTROL_COUNT) .addField(StatisticalResultDTO.MALE_MUTANT_COUNT) .addField(StatisticalResultDTO.FEMALE_CONTROL_COUNT) .addField(StatisticalResultDTO.FEMALE_MUTANT_COUNT) .addField(StatisticalResultDTO.PARAMETER_STABLE_ID).addField(StatisticalResultDTO.METADATA_GROUP); query.set("sort", StatisticalResultDTO.P_VALUE + " asc"); for (SolrDocument doc : solr.query(query).getResults()) { String parameterStableId = doc.getFieldValue(StatisticalResultDTO.PARAMETER_STABLE_ID).toString(); List<StatisticalResultBean> lb = null; if (results.containsKey(parameterStableId)) { lb = results.get(parameterStableId); } else { lb = new ArrayList<StatisticalResultBean>(); results.put(parameterStableId, lb); } Double effectSize = doc.containsKey(StatisticalResultDTO.EFFECT_SIZE) ? Double.parseDouble(doc.getFieldValue(StatisticalResultDTO.EFFECT_SIZE).toString()) : 1000000000; String status = doc.containsKey(StatisticalResultDTO.STATUS) ? doc.getFieldValue(StatisticalResultDTO.STATUS).toString() : "no status found"; lb.add(new StatisticalResultBean( Double.parseDouble(doc.getFieldValue(StatisticalResultDTO.P_VALUE).toString()), effectSize, status, doc.getFieldValue(StatisticalResultDTO.STATISTICAL_METHOD).toString(), "don't know", doc.getFieldValue(StatisticalResultDTO.ZYGOSITY).toString(), Integer.parseInt(doc.getFieldValue(StatisticalResultDTO.MALE_CONTROL_COUNT).toString()), Integer.parseInt(doc.getFieldValue(StatisticalResultDTO.MALE_MUTANT_COUNT).toString()), Integer.parseInt(doc.getFieldValue(StatisticalResultDTO.FEMALE_CONTROL_COUNT).toString()), Integer.parseInt(doc.getFieldValue(StatisticalResultDTO.FEMALE_MUTANT_COUNT).toString()), doc.getFieldValue(StatisticalResultDTO.METADATA_GROUP).toString())); } return results; }
From source file:uk.bl.wa.indexer.WARCIndexer.java
License:Open Source License
/** * This extracts metadata from the ArchiveRecord and creates a suitable SolrRecord. * Removes the text field if flag set.//from w w w .java 2 s .c o m * * @param archiveName * @param record * @param isTextIncluded * @return * @throws IOException */ public SolrRecord extract(String archiveName, ArchiveRecord record, boolean isTextIncluded) throws IOException { final long start = System.nanoTime(); ArchiveRecordHeader header = record.getHeader(); SolrRecord solr = new SolrRecord(archiveName, header); if (!header.getHeaderFields().isEmpty()) { if (header.getHeaderFieldKeys().contains(HEADER_KEY_TYPE)) { if (!checkRecordType((String) header.getHeaderValue(HEADER_KEY_TYPE))) { return null; } } // else we're processing ARCs if (header.getUrl() == null) return null; String fullUrl = header.getUrl(); log.debug( "Current heap usage: " + FileUtils.byteCountToDisplaySize(Runtime.getRuntime().totalMemory())); log.debug("Processing " + fullUrl + " from " + archiveName); // Check the filters: if (this.checkProtocol(fullUrl) == false) return null; if (this.checkUrl(fullUrl) == false) return null; if (this.checkExclusionFilter(fullUrl) == false) return null; // --- Basic headers --- // Basic metadata: solr.setField(SolrFields.SOURCE_FILE, archiveName + "@" + header.getOffset()); // solr.setField(SolrFields.SOURCE_FILE_OFFSET, // "" + header.getOffset()); byte[] md5digest = md5.digest(fullUrl.getBytes("UTF-8")); String md5hex = new String(Base64.encodeBase64(md5digest)); solr.setField(SolrFields.SOLR_URL, fullUrl); if (addNormalisedURL) { solr.setField(SolrFields.SOLR_URL_NORMALISED, urlNormaliser.canonicalize(fullUrl)); } // Get the length, but beware, this value also includes the HTTP headers (i.e. it is the payload_length): long content_length = header.getLength(); // Also pull out the file extension, if any: solr.addField(SolrFields.CONTENT_TYPE_EXT, parseExtension(fullUrl)); // Strip down very long URLs to avoid "org.apache.commons.httpclient.URIException: Created (escaped) uuri > 2083" // Trac #2271: replace string-splitting with URI-based methods. URL url = null; if (fullUrl.length() > 2000) fullUrl = fullUrl.substring(0, 2000); try { url = new URL(fullUrl); } catch (MalformedURLException e) { // Some URIs causing problem, so try the canonicalizer; in which // case try with the full URL. log.error(e.getMessage()); try { url = new URL("http://" + canon.urlStringToKey(fullUrl)); } catch (Exception e2) { // If this fails, abandon all hope. log.error(e2.getMessage()); return null; } } // Spot 'slash pages': if (url.getPath().equals("/") || url.getPath().equals("") || url.getPath().matches("/index\\.[a-z]+$")) { solr.setField(SolrFields.SOLR_URL_TYPE, SolrFields.SOLR_URL_TYPE_SLASHPAGE); // Spot 'robots.txt': } else if (url.getPath().equals("/robots.txt")) { solr.setField(SolrFields.SOLR_URL_TYPE, SolrFields.SOLR_URL_TYPE_ROBOTS_TXT); } else { solr.setField(SolrFields.SOLR_URL_TYPE, SolrFields.SOLR_URL_TYPE_NORMAL); } // Record the domain (strictly, the host): String host = url.getHost(); solr.setField(SolrFields.SOLR_HOST, host); solr.setField(SolrFields.DOMAIN, LinkExtractor.extractPrivateSuffixFromHost(host)); solr.setField(SolrFields.PUBLIC_SUFFIX, LinkExtractor.extractPublicSuffixFromHost(host)); Instrument.timeRel("WARCIndexer.extract#total", "WARCIndexer.extract#archeaders", start); InputStream tikainput = null; // Only parse HTTP headers for HTTP URIs if (fullUrl.startsWith("http")) { // Parse HTTP headers: String statusCode = null; if (record instanceof WARCRecord) { // There are not always headers! The code should check first. String statusLine = HttpParser.readLine(record, "UTF-8"); if (statusLine != null && statusLine.startsWith("HTTP")) { String firstLine[] = statusLine.split(" "); if (firstLine.length > 1) { statusCode = firstLine[1].trim(); try { this.processHeaders(solr, statusCode, HttpParser.parseHeaders(record, "UTF-8")); } catch (ProtocolException p) { log.error("ProtocolException [" + statusCode + "]: " + header.getHeaderValue(WARCConstants.HEADER_KEY_FILENAME) + "@" + header.getHeaderValue(WARCConstants.ABSOLUTE_OFFSET_KEY), p); } } else { log.warn("Could not parse status line: " + statusLine); } } else { log.warn("Invalid status line: " + header.getHeaderValue(WARCConstants.HEADER_KEY_FILENAME) + "@" + header.getHeaderValue(WARCConstants.ABSOLUTE_OFFSET_KEY)); } // No need for this, as the headers have already been read from the InputStream (above): // WARCRecordUtils.getPayload(record); tikainput = record; } else if (record instanceof ARCRecord) { ARCRecord arcr = (ARCRecord) record; statusCode = "" + arcr.getStatusCode(); this.processHeaders(solr, statusCode, arcr.getHttpHeaders()); arcr.skipHttpHeader(); tikainput = arcr; } else { log.error("FAIL! Unsupported archive record type."); return solr; } // Skip recording non-content URLs (i.e. 2xx responses only please): if (this.checkResponseCode(statusCode) == false) { log.debug("Skipping this record based on status code " + statusCode + ": " + header.getUrl()); return null; } } // Update the content_length based on what's available: content_length = tikainput.available(); // Record the length: solr.setField(SolrFields.CONTENT_LENGTH, "" + content_length); // ----------------------------------------------------- // Headers have been processed, payload ready to cache: // ----------------------------------------------------- // Create an appropriately cached version of the payload, to allow analysis. final long hashStreamStart = System.nanoTime(); HashedCachedInputStream hcis = new HashedCachedInputStream(header, tikainput, content_length); tikainput = hcis.getInputStream(); String hash = hcis.getHash(); Instrument.timeRel("WARCIndexer.extract#total", "WARCIndexer.extract#hashstreamwrap", hashStreamStart); // Prepare crawl date information: String waybackDate = (header.getDate().replaceAll("[^0-9]", "")); Date crawlDate = getWaybackDate(waybackDate); String crawlDateString = parseCrawlDate(waybackDate); // Optionally use a hash-based ID to store only one version of a URL: String id = null; if (hashUrlId) { id = hash + "/" + md5hex; } else { id = waybackDate + "/" + md5hex; } // Set these last: solr.setField(SolrFields.ID, id); solr.setField(SolrFields.HASH, hash); // ----------------------------------------------------- // Payload has been cached, ready to check crawl dates: // ----------------------------------------------------- // Query for currently known crawl dates: HashSet<Date> currentCrawlDates = new HashSet<Date>(); if (this.checkSolrForDuplicates && solrServer != null) { SolrQuery q = new SolrQuery("id:\"" + id + "\""); q.addField(SolrFields.CRAWL_DATES); try { QueryResponse results = solrServer.query(q); if (results.getResults().size() > 0) { SolrDocument fr = results.getResults().get(0); if (fr.containsKey(SolrFields.CRAWL_DATES)) { for (Object cds : fr.getFieldValues(SolrFields.CRAWL_DATES)) { currentCrawlDates.add((Date) cds); } } } else { log.debug("No matching entries found."); } } catch (SolrServerException e) { e.printStackTrace(); // FIXME retry? } } // Is the current date unknown? (inc. no-solr-check case): if (!currentCrawlDates.contains(crawlDate)) { // Dates to be merged under the CRAWL_DATES field: solr.mergeField(SolrFields.CRAWL_DATES, crawlDateString); solr.mergeField(SolrFields.CRAWL_YEARS, extractYear(header.getDate())); } else { // Otherwise, ensure the all the known dates (i.e. including this one) are copied over: for (Date ccd : currentCrawlDates) { solr.addField(SolrFields.CRAWL_DATES, formatter.format(ccd)); solr.addField(SolrFields.CRAWL_YEARS, getYearFromDate(ccd)); } // TODO This could optionally skip re-submission instead? } // Sort the dates and find the earliest: List<Date> dateList = new ArrayList<Date>(currentCrawlDates); dateList.add(crawlDate); Collections.sort(dateList); Date firstDate = dateList.get(0); solr.getSolrDocument().setField(SolrFields.CRAWL_DATE, firstDate); solr.setField(SolrFields.CRAWL_YEAR, getYearFromDate(firstDate)); // Use the current value as the waybackDate: solr.setField(SolrFields.WAYBACK_DATE, waybackDate); // If this is a revisit record, we should just return an update to the crawl_dates: if (WARCConstants.WARCRecordType.revisit.name().equals(header.getHeaderValue(HEADER_KEY_TYPE))) { if (currentCrawlDates.contains(crawlDate)) { return null; } SolrRecord revisited = new SolrRecord(); revisited.setField(SolrFields.ID, id); revisited.mergeField(SolrFields.CRAWL_DATES, crawlDateString); revisited.mergeField(SolrFields.CRAWL_YEARS, extractYear(header.getDate())); return revisited; } // ----------------------------------------------------- // Apply any annotations: // ----------------------------------------------------- if (ant != null) { try { ant.applyAnnotations(url.toURI(), solr.getSolrDocument()); } catch (URISyntaxException e) { e.printStackTrace(); log.error("Failed to annotate " + url + " : " + e); } } // ----------------------------------------------------- // Payload duplication has been checked, ready to parse: // ----------------------------------------------------- final long analyzeStart = System.nanoTime(); // Mark the start of the payload. tikainput.mark((int) content_length); // Pass on to other extractors as required, resetting the stream before each: this.wpa.analyse(header, tikainput, solr); Instrument.timeRel("WARCIndexer.extract#total", "WARCIndexer.extract#analyzetikainput", analyzeStart); // Clear up the caching of the payload: hcis.cleanup(); // Derive normalised/simplified content type: processContentType(solr, header, content_length); // ----------------------------------------------------- // Payload analysis complete, now performing text analysis: // ----------------------------------------------------- this.txa.analyse(solr); // Remove the Text Field if required if (!isTextIncluded) { solr.removeField(SolrFields.SOLR_EXTRACTED_TEXT); } else { // Otherwise, decide whether to store or both store and index // the text: if (storeText == false) { // Copy the text into the indexed (but not stored) field: solr.setField(SolrFields.SOLR_EXTRACTED_TEXT_NOT_STORED, (String) solr.getField(SolrFields.SOLR_EXTRACTED_TEXT).getFirstValue()); // Take the text out of the original (stored) field. solr.removeField(SolrFields.SOLR_EXTRACTED_TEXT); } } } Instrument.timeRel("WARCIndexerCommand.parseWarcFiles#solrdocCreation", "WARCIndexer.extract#total", start); return solr; }
From source file:xc.mst.action.browse.BrowseRecords.java
License:Open Source License
/** * Search for records//from w ww. j a v a 2 s. 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 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 ww w .ja 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; }