Example usage for org.apache.solr.client.solrj SolrQuery SolrQuery

List of usage examples for org.apache.solr.client.solrj SolrQuery SolrQuery

Introduction

In this page you can find the example usage for org.apache.solr.client.solrj SolrQuery SolrQuery.

Prototype

public SolrQuery(String q) 

Source Link

Document

Create a new SolrQuery

Usage

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);
    }
}