List of usage examples for org.apache.solr.client.solrj SolrQuery setStart
public SolrQuery setStart(Integer start)
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); }