List of usage examples for org.apache.solr.client.solrj SolrQuery SolrQuery
public SolrQuery(String q)
From source file:com.pearson.openideas.cq5.components.services.solr.SolrHelper.java
License:Open Source License
/** * Build a SolrQuery object based on the parameters. * // w w w .j a v a2 s .c o m * @param parameters * the search parameters * @return the SolrQuery object */ public static SolrQuery buildQuery(final SolrSearchParameters parameters) { log.debug("Building SolrQuery."); log.info("Build the base query."); String q = "*:*"; if (parameters.getQuery() != null) { q = parameters.getQuery(); } SolrQuery query = new SolrQuery(q); if (parameters.getType() != null) { log.debug("set query query type to {}", parameters.getType()); query.setQueryType(parameters.getType()); } if (parameters.getDisplayCount() > 0) { log.debug("set query display count to {}", parameters.getDisplayCount()); query.setRows(parameters.getDisplayCount()); } if (parameters.getCurrentRecord() > 0) { log.debug("set query start to {}", parameters.getCurrentRecord()); query.setStart(parameters.getCurrentRecord()); } log.info("Done building the base query."); log.info("Adding facet to query."); addFacet(parameters.getFacetField(), query); log.info("Done adding facet to query."); log.info("Adding search criteria to query."); addSearchCriteria(parameters.getSearchCriteria(), query); log.info("Done adding search criteria to query."); log.info("Adding filter criteria to query."); addFilterCriteria(parameters.getFilterCriteria(), query); log.info("Done adding filter criteria to query."); log.info("Adding sort fields to query."); addSortFields(parameters.getSortFields(), query); log.info("Done adding sort fields to query."); log.debug("done building SolrQuery, returning."); return query; }
From source file:com.shaie.solr.CreateAndDeleteCollectionTest.java
License:Apache License
@Test public void create_and_delete_collection_concurrently_works() { solrCluster.startSolrNodes("node1"); final AtomicBoolean failed = new AtomicBoolean(false); final int timeToRunSec = 30; final Thread[] threads = new Thread[4]; for (int i = 0; i < threads.length; i++) { final String collectionName = "collection" + i; threads[i] = new Thread("thread-" + i) { @SuppressWarnings("synthetic-access") @Override//from w ww .ja va 2 s. c o m public void run() { synchronized (solrClient) { SolrCloudUtils.uploadConfigToZk(solrClient, collectionName, Utils.getPathResource("solr/conf")); } final long timeToStop = System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(timeToRunSec); while (System.currentTimeMillis() < timeToStop && !failed.get()) { createCollection(collectionName); deleteCollection(); assertCollectionDoesNotExist(); } } @SuppressWarnings("synthetic-access") private void assertCollectionDoesNotExist() { try (final HttpSolrClient httpSolrClient = new HttpSolrClient( solrCluster.getBaseUrl("node1"))) { final QueryResponse response = httpSolrClient.query(collectionName, new SolrQuery("*")); if (response.getStatus() != 0) { failed.set(true); } } catch (Exception e) { if (!e.getMessage().contains("not found") && !e.getMessage().contains("Can not find")) { Throwables.propagate(e); } } } @SuppressWarnings("synthetic-access") private void createCollection(String collectionName) { collectionAdminHelper.createCollection(collectionName, 1, 1, collectionName); } @SuppressWarnings("synthetic-access") private void deleteCollection() { final DeleteCollectionResponse response = collectionAdminHelper .deleteCollection(collectionName); if (response != null) { assertThat(response.isSuccess()).isTrue(); } } }; } startAll(threads); joinAll(threads); assertThat(failed.get()).isFalse(); }
From source file:com.shaie.solr.SplitShardTest.java
License:Apache License
@Test public void split_shard_does_what_it_says() throws SolrServerException, IOException { System.out.println("ZK connection string: " + solrClusterResource.getConnectString()); solrCluster.startSolrNodes("node1", "node2"); createCollectionAndWaitForRecoveries(); indexDocs(5000);//w w w .ja v a2s . c o m final QueryResponse queryResponse = solrClient.query(new SolrQuery("*:*")); System.out.println("numResults=" + queryResponse.getResults().getNumFound()); System.out.println("Press ENTER to print cluster status"); System.in.read(); printClusterStatus(); System.out.println("Press ENTER to split shard1"); System.in.read(); splitShard(); printClusterStatus(); System.out.println("Press ENTER to start polling for request status"); System.in.read(); requestStatus(); System.out.println("Press ENTER to print cluster status"); System.in.read(); printClusterStatus(); System.out.println("Press ENTER to finish"); System.in.read(); // final boolean success = SolrCloudUtils.waitForNodeToDisappearFromLiveNodes(solrClient, node2Name, // WAIT_TIMEOUT_SECONDS); // assertThat(success).overridingErrorMessage("node " + node2Name + " didn't disappear from cluster's live // nodes") // .isTrue(); // // final CollectionsStateHelper collectionsStateHelper = new // CollectionsStateHelper(solrClient.getZkStateReader()); // final List<Replica> replicas = collectionsStateHelper.getAllCollectionReplicas(COLLECTION_NAME); // assertThat(replicas.size()).isEqualTo(2); // for (final Replica replica : replicas) { // assertThat(replica.getState()).isEqualTo(Replica.State.ACTIVE); // } }
From source file:com.sp.Parser.Sorter.java
License:Open Source License
private SolrDocumentList getSolrEmptyDoc() { try {/*www.j a v a2 s . co m*/ LOG.debug("Getting Empty Solr Document"); SolrServer solr = new HttpSolrServer(SearchHandler.solr_url); QueryResponse Response = solr.query(new SolrQuery("product_id:999999")); LOG.debug("Query Execution Time : " + Response.getQTime()); if (Response.getResults().isEmpty()) { LOG.info("Query Executed, But Returned Empty Results"); return null; } LOG.debug("Query Executed, Returning Results"); SolrDocumentList list = Response.getResults(); return list; } catch (SolrServerException ex) { LOG.error("mmh : " + ex); } return null; }
From source file:com.sp.Parser.Utils.java
License:Open Source License
public static SolrDocumentList getTop(SolrDocumentList docs, ArrayList<String> prices, ArrayList<String> filters) { SolrDocumentList SolrDocList = null; try {//from www .j a v a 2 s . co m SolrDocument PivotDoc = docs.get(0); //store pId book to put it in the index 0 of the final SolrDocList Collection<Object> Top20Product_ids = PivotDoc.getFieldValues("top20"); //store pId book to put it in the index 0 of the final SolrDocList PivotDoc.removeFields("top20"); // get current book top20 with products ids PivotDoc.removeFields("keywords"); Collection<Object> BackupTop20Product_ids = Top20Product_ids; String QueryString = "product_id:("; ArrayList<String> TempQuery = new ArrayList<>(); for (Object product_id : BackupTop20Product_ids) { QueryString += product_id.toString() + " "; TempQuery.add(product_id.toString()); } QueryString += ")"; String prices_fields = ""; for (String string : prices) { prices_fields += string + " "; } SolrQuery Query = new SolrQuery(QueryString); Query.setRows(101); for (String filter : filters) { LOG.info("Top20 Filtering : " + filter); Query.addFilterQuery(filter); } Query.setParam("fl", "product_id book_id author_searchable author_id format_name description title author_firstname" + " file_size publishing_date author_lastname author_rank publisher_id publisher_name" + " permalink nb_pages isbn " + prices_fields); SolrServer solr = new HttpSolrServer(SearchHandler.solr_url); QueryResponse response = solr.query(Query); SolrDocList = response.getResults(); if (!SolrDocList.isEmpty()) { SolrDocList = Utils.SortListByProductId(TempQuery, SolrDocList); if (!SolrDocList.isEmpty()) { SolrDocument temp = SolrDocList.get(0); SolrDocList.set(0, PivotDoc); SolrDocList.add(1, temp); } } else { SolrDocList.add(0, PivotDoc); } } catch (SolrServerException ex) { LOG.info("mmh : ", ex); } LOG.info("SolrDocList Size int getTop : " + SolrDocList.size()); return SolrDocList; }
From source file:com.thinkaurelius.titan.diskstorage.solr.Solr5Index.java
License:Apache License
@Override public List<String> query(IndexQuery query, KeyInformation.IndexRetriever informations, BaseTransaction tx) throws BackendException { List<String> result; String collection = query.getStore(); String keyIdField = getKeyFieldId(collection); SolrQuery solrQuery = new SolrQuery("*:*"); String queryFilter = buildQueryFilter(query.getCondition(), informations.get(collection)); solrQuery.addFilterQuery(queryFilter); if (!query.getOrder().isEmpty()) { List<IndexQuery.OrderEntry> orders = query.getOrder(); for (IndexQuery.OrderEntry order1 : orders) { String item = order1.getKey(); SolrQuery.ORDER order = order1.getOrder() == Order.ASC ? SolrQuery.ORDER.asc : SolrQuery.ORDER.desc; solrQuery.addSort(new SolrQuery.SortClause(item, order)); }//from www.ja va 2 s . c om } solrQuery.setStart(0); if (query.hasLimit()) { solrQuery.setRows(query.getLimit()); } else { solrQuery.setRows(maxResults); } try { QueryResponse response = solrClient.query(collection, solrQuery); if (logger.isDebugEnabled()) logger.debug("Executed query [{}] in {} ms", query.getCondition(), response.getElapsedTime()); int totalHits = response.getResults().size(); if (!query.hasLimit() && totalHits >= maxResults) logger.warn("Query result set truncated to first [{}] elements for query: {}", maxResults, query); result = new ArrayList<String>(totalHits); for (SolrDocument hit : response.getResults()) { result.add(hit.getFieldValue(keyIdField).toString()); } } catch (IOException e) { logger.error("Query did not complete : ", e); throw new PermanentBackendException(e); } catch (SolrServerException e) { logger.error("Unable to query Solr index.", e); throw new PermanentBackendException(e); } return result; }
From source file:com.thinkaurelius.titan.diskstorage.solr.Solr5Index.java
License:Apache License
@Override public Iterable<RawQuery.Result<String>> query(RawQuery query, KeyInformation.IndexRetriever informations, BaseTransaction tx) throws BackendException { List<RawQuery.Result<String>> result; String collection = query.getStore(); String keyIdField = getKeyFieldId(collection); SolrQuery solrQuery = new SolrQuery(query.getQuery()).addField(keyIdField).setIncludeScore(true) .setStart(query.getOffset()).setRows(query.hasLimit() ? query.getLimit() : maxResults); try {//from w w w. ja va 2 s . c om QueryResponse response = solrClient.query(collection, solrQuery); if (logger.isDebugEnabled()) logger.debug("Executed query [{}] in {} ms", query.getQuery(), response.getElapsedTime()); int totalHits = response.getResults().size(); if (!query.hasLimit() && totalHits >= maxResults) { logger.warn("Query result set truncated to first [{}] elements for query: {}", maxResults, query); } result = new ArrayList<RawQuery.Result<String>>(totalHits); for (SolrDocument hit : response.getResults()) { double score = Double.parseDouble(hit.getFieldValue("score").toString()); result.add(new RawQuery.Result<String>(hit.getFieldValue(keyIdField).toString(), score)); } } catch (IOException e) { logger.error("Query did not complete : ", e); throw new PermanentBackendException(e); } catch (SolrServerException e) { logger.error("Unable to query Solr index.", e); throw new PermanentBackendException(e); } return result; }
From source file:com.tripod.solr.query.StandardSolrQueryTransformer.java
License:Apache License
@Override public SolrQuery transform(final Q query) { final SolrQuery solrQuery = new SolrQuery(query.getQuery()); solrQuery.setStart(query.getOffset()); solrQuery.setRows(query.getRows());//from w ww . j ava2 s .c o m solrQuery.setParam("q.op", query.getDefaultOperator().name()); if (query.getReturnFields() != null) { query.getReturnFields().stream().forEach(f -> solrQuery.addField(f.getName())); } if (query.getHighlightFields() != null && !query.getHighlightFields().isEmpty()) { solrQuery.setHighlight(true); query.getHighlightFields().stream().forEach(hf -> solrQuery.addHighlightField(hf.getName())); } if (query.getFacetFields() != null) { query.getFacetFields().stream().forEach(ff -> solrQuery.addFacetField(ff.getName())); } if (query.getSorts() != null) { for (Sort sort : query.getSorts()) { SolrQuery.ORDER solrOrder = sort.getSortOrder() == SortOrder.ASC ? SolrQuery.ORDER.asc : SolrQuery.ORDER.desc; SolrQuery.SortClause sortClause = new SolrQuery.SortClause(sort.getField().getName(), solrOrder); solrQuery.addSort(sortClause); } } if (query.getFilterQueries() != null) { query.getFilterQueries().stream().forEach(fq -> solrQuery.addFilterQuery(fq)); } if (query.getParams() != null) { query.getParams().entrySet().stream().forEach(e -> solrQuery.add(e.getKey(), e.getValue())); } return solrQuery; }
From source file:com.villemos.ispace.solr.SolrConsumer.java
License:Open Source License
@Override protected int poll() throws Exception { String queryString = getSolrEndpoint().getQuery(); queryString = queryString.replaceAll("FROMLAST", format.format(lastRetrievalTime)); lastRetrievalTime = new Date(); SolrQuery query = new SolrQuery(queryString); if (getSolrEndpoint().getQueryHandler() != null) { query.setQueryType(getSolrEndpoint().getQueryHandler()); }// ww w.j a va 2s . c o m /** Search and set result set. Notice that this will return the results upto the * configured number of rows. More results may thus be in the repository. */ QueryResponse response = getSolrEndpoint().getServer().query(query); if (response.getStatus() != 0) { log.error("Failed to execute retrieval request. Failed with status '" + response.getStatus() + "'."); } /** Get the result set. */ ResultSet results = Utilities.getResultSet(response, (int) response.getResults().getNumFound(), queryString); /** Either deliver the complete result set as on batch, or as a stream. */ if (getSolrEndpoint().getDeliveryMode().equals("batch")) { Exchange exchange = getEndpoint().createExchange(); exchange.getIn().setBody(results); getAsyncProcessor().process(exchange, new AsyncCallback() { public void done(boolean doneSync) { LOG.trace("Done processing sending Batch."); } }); } else { /** Iterate through the result set and inject the io objects. */ for (Object io : results.informationobjects) { Exchange exchange = getEndpoint().createExchange(); exchange.getIn().setBody(io); getAsyncProcessor().process(exchange, new AsyncCallback() { public void done(boolean doneSync) { LOG.trace("Done processing streaming information objects."); } }); } for (Facet facet : results.facets) { Exchange exchange = getEndpoint().createExchange(); exchange.getIn().setBody(facet); getAsyncProcessor().process(exchange, new AsyncCallback() { public void done(boolean doneSync) { LOG.trace("Done streaming facets."); } }); } /** TODO Should the suggestions and statistics also be injected? */ } return 0; }
From source file:com.villemos.ispace.solr.SolrProducer.java
License:Open Source License
/** * Retrieves a number of entries from the repository, based on the configured * query. /*from www .j av a 2 s . com*/ * * @param exchange * @throws SolrServerException * @throws InvocationTargetException * @throws IllegalAccessException * @throws IllegalArgumentException * @throws RemoteException */ protected void retrieve(Exchange exchange) throws SolrServerException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, RemoteException { /** Configure the request. * * One keywords are supported * FROMLAST. Will be replaced with the timestamp of the last retrieval (initial is 0). */ String queryString = endpoint.getQuery(); queryString = queryString.replaceAll("FROMLAST", Long.toString(lastRetrievalTime)); SolrQuery query = new SolrQuery(queryString); configureQuery(query); if (queryString.equals("*:*")) { query.setQueryType("basic"); } /** If we are asked for facets, then add the facets. */ if (endpoint.getFacets()) { query.setFacet(true); query.addFacetField(endpoint.getFacetField()); } /** Search and set result set. Notice that this will return the results upto the * configured number of rows. More results may thus be in the repository. */ /** Data is either returned as a batch contained in the body of the exchange, or as * a stream send to the callback object in the body. The exchange header field * 'solr.stream' is used to indicate which delivery mode is used. */ if (endpoint.isStream() == false) { QueryResponse response = endpoint.getServer().query(query); if (response.getStatus() != 0) { log.error( "Failed to execute retrieval request. Failed with status '" + response.getStatus() + "'."); } exchange.getOut().getHeaders().put(SolrOptions.count, (int) response.getResults().getNumFound()); if (endpoint.isCount() == false) { ResultSet results; try { results = Utilities.getResultSet(response, query.getRows(), queryString); exchange.getOut().setBody(results); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } else { /***/ Statistics statistics = new Statistics(); int maxNumberOfHits = query.getRows(); /** When streaming, we retrieve in chunks. */ int streamBatchSize = 100 > maxNumberOfHits ? maxNumberOfHits : 100; query.setRows(streamBatchSize); Integer index = query.getStart() == null ? 0 : query.getStart(); QueryResponse response = endpoint.getServer().query(query); if (response.getStatus() != 0) { log.error( "Failed to execute retrieval request. Failed with status '" + response.getStatus() + "'."); } int numberOfHits = (int) response.getResults().getNumFound(); if (numberOfHits > maxNumberOfHits) { numberOfHits = maxNumberOfHits; } boolean deliverOnes = false; do { ResultSet set; try { set = Utilities.getResultSet(response, maxNumberOfHits, queryString); /** Update the statistics. */ statistics.maxScore = statistics.maxScore > set.statistics.maxScore ? statistics.maxScore : set.statistics.maxScore; statistics.totalFound = set.statistics.totalFound; statistics.totalRequested = set.statistics.totalRequested; statistics.queryTime += set.statistics.queryTime; statistics.totalReturned += set.statistics.totalReturned; /** Deliver latest statistics. */ Exchange newExchange = new DefaultExchange(endpoint.getCamelContext()); newExchange.getIn().setBody(statistics); endpoint.getCamelContext().createProducerTemplate().send("direct:results", newExchange); /** Deliver the data that is the same for each sequential query, i.e. facets and suggestions. */ if (deliverOnes == false) { for (Facet facet : set.facets) { newExchange = new DefaultExchange(endpoint.getCamelContext()); newExchange.getIn().setBody(facet); endpoint.getCamelContext().createProducerTemplate().send("direct:results", newExchange); } for (Suggestion suggestion : set.suggestions) { newExchange = new DefaultExchange(endpoint.getCamelContext()); newExchange.getIn().setBody(suggestion); endpoint.getCamelContext().createProducerTemplate().send("direct:results", newExchange); } deliverOnes = true; } /** Deliver the found information objects. */ for (Object document : set.informationobjects) { newExchange = new DefaultExchange(endpoint.getCamelContext()); newExchange.getIn().setBody(document); endpoint.getCamelContext().createProducerTemplate().send("direct:results", newExchange); } index += streamBatchSize; if (numberOfHits > index && statistics.totalReturned < statistics.totalFound) { query.setStart(index); long numberMissing = numberOfHits - statistics.totalReturned; if (numberMissing < streamBatchSize) { query.setRows((int) numberMissing); } response = endpoint.getServer().query(query); } else { break; } } catch (ClassNotFoundException e) { e.printStackTrace(); } } while (true); } }