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

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

Introduction

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

Prototype

public Integer getStart() 

Source Link

Usage

From source file:at.pagu.soldockr.core.QueryParserTest.java

License:Apache License

private void assertPaginationNotPresent(SolrQuery solrQuery) {
    Assert.assertNull(solrQuery.getStart());
    Assert.assertNull(solrQuery.getRows());
}

From source file:at.pagu.soldockr.core.QueryParserTest.java

License:Apache License

private void assertPaginationPresent(SolrQuery solrQuery, int start, int rows) {
    Assert.assertEquals(Integer.valueOf(start), solrQuery.getStart());
    Assert.assertEquals(Integer.valueOf(rows), solrQuery.getRows());
}

From source file:com.nridge.ds.solr.SolrDS.java

License:Open Source License

/**
 * Returns a <i>Document</i> representation of all documents
 * fetched from the underlying content source (using a wildcard
 * criteria)./*www .j a  v  a  2 s  . c o m*/
 * <p>
 * <b>Note:</b> Depending on the size of the content source
 * behind this data source, this method could consume large
 * amounts of heap memory.  Therefore, it should only be
 * used when the number of column and rows is known to be
 * small in size.
 * </p>
 *
 * @return Document hierarchy representing all documents in
 * the content source.
 *
 * @throws com.nridge.core.base.ds.DSException Data source related exception.
 */
@Override
public Document fetch() throws DSException {
    Document solrDocument;
    Logger appLogger = mAppMgr.getLogger(this, "fetch");

    appLogger.trace(mAppMgr.LOGMSG_TRACE_ENTER);

    initialize();

    DSCriteria dsCriteria = new DSCriteria("Solr Query");
    dsCriteria.add(Solr.FIELD_QUERY_NAME, Field.Operator.EQUAL, Solr.QUERY_ALL_DOCUMENTS);

    SolrQuery solrQuery = mSolrQueryBuilder.create(dsCriteria);
    solrQuery.setStart(Solr.QUERY_OFFSET_DEFAULT);
    solrQuery.setRows(Solr.QUERY_PAGESIZE_DEFAULT);

    appLogger.debug(String.format("%s: %s %s", dsCriteria.getName(), mSolrIdentity, solrQuery.toString()));

    SolrResponseBuilder solrResponseBuilder = createResponseBuilder();
    QueryResponse queryResponse = queryExecute(solrQuery);
    solrDocument = solrResponseBuilder.extract(queryResponse);
    DataBag headerBag = Solr.getHeader(solrDocument);
    if (headerBag != null)
        headerBag.setValueByName("collection_name", getCollectionName());
    String requestHandler = solrQuery.getRequestHandler();
    solrResponseBuilder.updateHeader(mBaseSolrURL, solrQuery.getQuery(), requestHandler, solrQuery.getStart(),
            solrQuery.getRows());

    appLogger.trace(mAppMgr.LOGMSG_TRACE_DEPART);

    return solrDocument;
}

From source file:com.nridge.ds.solr.SolrDS.java

License:Open Source License

/**
 * Returns a <i>Document</i> representation of the documents
 * that match the <i>DSCriteria</i> specified in the parameter.
 * <p>/*w  ww .  j  ava2 s. c  o m*/
 * <b>Note:</b> Depending on the size of the content source
 * behind this data source and the criteria specified, this
 * method could consume large amounts of heap memory.
 * Therefore, the developer is encouraged to use the alternative
 * method for fetch where an offset and limit parameter can be
 * specified.
 * </p>
 *
 * @param aDSCriteria Data source criteria.
 *
 * @return Document hierarchy representing all documents that
 * match the criteria in the content source.
 *
 * @throws com.nridge.core.base.ds.DSException Data source related exception.
 *
 *  @see <a href="http://lucene.apache.org/solr/guide/7_6/common-query-parameters.html">Solr Common Query Parametersr</a>
 *    @see <a href="https://lucene.apache.org/solr/guide/7_6/the-standard-query-parser.html">Solr Standard Query Parserr</a>
 */
@Override
public Document fetch(DSCriteria aDSCriteria) throws DSException {
    Document solrDocument;
    Logger appLogger = mAppMgr.getLogger(this, "fetch");

    appLogger.trace(mAppMgr.LOGMSG_TRACE_ENTER);

    initialize();

    SolrQuery solrQuery = mSolrQueryBuilder.create(aDSCriteria);

    appLogger.debug(String.format("%s: %s %s", aDSCriteria.getName(), mSolrIdentity, solrQuery.toString()));

    SolrResponseBuilder solrResponseBuilder = createResponseBuilder();
    QueryResponse queryResponse = queryExecute(solrQuery);
    solrDocument = solrResponseBuilder.extract(queryResponse);
    DataBag headerBag = Solr.getHeader(solrDocument);
    if (headerBag != null)
        headerBag.setValueByName("collection_name", getCollectionName());
    String requestHandler = solrQuery.getRequestHandler();
    Integer startPosition = solrQuery.getStart();
    if (startPosition == null)
        startPosition = Solr.QUERY_OFFSET_DEFAULT;
    Integer totalRows = solrQuery.getRows();
    if (totalRows == null)
        totalRows = Solr.QUERY_PAGESIZE_DEFAULT;
    solrResponseBuilder.updateHeader(mBaseSolrURL, solrQuery.getQuery(), requestHandler, startPosition,
            totalRows);
    if (Solr.isCriteriaParentChild(aDSCriteria)) {
        SolrParentChild solrParentChild = new SolrParentChild(mAppMgr, this);
        solrParentChild.expand(solrDocument, aDSCriteria);
    }

    appLogger.trace(mAppMgr.LOGMSG_TRACE_DEPART);

    return solrDocument;
}

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. /*w w  w.j ava  2 s.co  m*/
 * 
 * @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);
    }
}

From source file:de.dlr.knowledgefinder.webapp.webservice.service.impl.KnowledgeFinderServiceImpl.java

License:Apache License

@com.liferay.portal.security.ac.AccessControlled(guestAccessEnabled = true, hostAllowedValidationEnabled = false)
public Map<String, Object> getDocuments(String query, String filterQuery, String fields, String start,
        String rows, String sort, String highlightFields) throws PortalException {

    User user = null;/*from   w  w  w. j a  v  a 2s  .c om*/
    try {
        user = getGuestOrUser();
    } catch (SystemException e2) {
    }

    AbstractSolrQueryFactory qFactory = SolrQueryFactoryMaker.createSolrQueryFactory(user);

    Map<String, Object> resultMap = new HashMap<String, Object>();
    SolrClient client;
    String username;
    String password;
    try {
        client = SolrConnection.INSTANCE.getClient();
        username = SolrConnection.INSTANCE.getUsername();
        password = SolrConnection.INSTANCE.getPassword();
    } catch (IOException e1) {
        throw new PortalException(e1);
    }

    SolrQuery solrQuery = qFactory.createQuery(query, new String[] { filterQuery }, new String[] { fields },
            null, start, rows, new String[] { sort }, new String[] { highlightFields }, null);
    logger.info("getDocuments:" + solrQuery.toString());

    QueryResponse response;
    try {
        QueryRequest request = new QueryRequest(solrQuery);
        if (username != null && password != null)
            request.setBasicAuthCredentials(username, password);
        response = request.process(client);
        logger.debug("getDocuments - result:" + response.toString());
        Map<String, Map<String, List<String>>> hl = response.getHighlighting();
        SolrDocumentList docs = response.getResults();
        replaceHightlighting(docs, hl);

        resultMap.put("docs", docs);
        resultMap.put("numFound", response.getResults().getNumFound());
        resultMap.put("start", solrQuery.getStart());
        resultMap.put("rows", solrQuery.getRows());
    } catch (SolrServerException e) {
        logger.error(e.getMessage());
        throw new PortalException(e);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return resultMap;
}

From source file:eu.europeana.core.BeanQueryModelFactory.java

License:EUPL

@Override
public List<?> getDocIdList(Map<String, String[]> params, Locale locale)
        throws EuropeanaQueryException, SolrServerException {
    SolrQuery solrQuery = createFromQueryParams(params, locale);
    Integer start = solrQuery.getStart();
    if (start > 1) {
        solrQuery.setStart(start - 2);//w  ww.j  a  v  a  2s .  co m
    }
    solrQuery.setRows(3);
    solrQuery.setFields("europeana_uri");
    // Fetch results from server
    final PortalTheme theme = ThemeFilter.getTheme();
    if (theme != null) {
        solrServer.setBaseURL(theme.getSolrSelectUrl());
    }
    QueryResponse queryResponse = solrServer.query(solrQuery);
    // fetch beans
    return getDocIdsFromQueryResponse(queryResponse);
}

From source file:eu.europeana.core.BeanQueryModelFactory.java

License:EUPL

private List<? extends BriefDoc> addIndexToBriefDocList(SolrQuery solrQuery,
        List<? extends BriefDoc> briefDocList, QueryResponse solrResponse) {
    Boolean debug = solrQuery.getBool("debugQuery");
    Map<String, String> explainMap = solrResponse.getExplainMap();
    Integer start = solrQuery.getStart();
    int index = start == null ? 1 : start + 1;
    for (BriefDoc briefDoc : briefDocList) {
        briefDoc.setIndex(index++);//from w w  w.j  a  v  a  2  s .  co m
        briefDoc.setFullDocUrl(createFullDocUrl(briefDoc.getId()));
        if (debug != null && debug) {
            briefDoc.setDebugQuery(explainMap.get(briefDoc.getId()));
        }
    }
    return briefDocList;
}

From source file:eu.europeana.core.BeanQueryModelFactory.java

License:EUPL

private QueryResponse getSolrResponseFromServer(SolrQuery solrQuery, boolean decrementStart)
        throws EuropeanaQueryException {
    if (solrQuery.getStart() != null && solrQuery.getStart() < 0) {
        solrQuery.setStart(0);// w  ww  .j  a v  a 2  s  . c  om
        log.warn("Solr Start cannot be negative");
    }
    // solr query is 0 based
    if (decrementStart && solrQuery.getStart() != null && solrQuery.getStart() > 0) {
        solrQuery.setStart(solrQuery.getStart() - 1);
    }
    QueryResponse queryResponse;
    // todo: add view limitation to query
    try {
        final PortalTheme theme = ThemeFilter.getTheme();
        if (theme != null) {
            solrServer.setBaseURL(theme.getSolrSelectUrl());
        }
        queryResponse = solrServer.query(solrQuery);
    } catch (SolrException e) {
        log.error("unable to execute SolrQuery", e);
        throw new EuropeanaQueryException(QueryProblem.MALFORMED_QUERY.toString(), e);
    } catch (SolrServerException e) {
        //todo determine which errors the SolrServer can throw
        log.error("Unable to fetch result", e);
        if (e.getMessage().equalsIgnoreCase("Error executing query")) {
            throw new EuropeanaQueryException(QueryProblem.MALFORMED_QUERY.toString(), e);
        } else {
            throw new EuropeanaQueryException(QueryProblem.SOLR_UNREACHABLE.toString(), e);
        }
    }
    return queryResponse;
}

From source file:eu.europeana.core.BeanQueryModelFactory.java

License:EUPL

@Override
public QueryResponse getSolrResponse(SolrQuery solrQuery, boolean isBriefDoc, Map<String, String[]> params)
        throws EuropeanaQueryException { // add bean to ???
    // since we make a defensive copy before the start is decremented we must do it here
    if (solrQuery.getStart() != null && solrQuery.getStart() > 0) {
        solrQuery.setStart(solrQuery.getStart() - 1);
    }/*  w  w w.  j  av  a2s  .  c  om*/
    // set facets
    if (isBriefDoc) {
        // only show spelling-suggestion on the first result page
        if ((solrQuery.getStart() == null || solrQuery.getStart() == 0)
                && solrQuery.getFilterQueries() == null) {
            // give spelling suggestions
            solrQuery.setParam("spellcheck", true);
            solrQuery.setParam("spellcheck.collate", true);
            solrQuery.setParam("spellcheck.extendedResults", true);
            solrQuery.setParam("spellcheck.onlyMorePopular", true);
            //                solrQuery.setParam("spellcheck.count", "4");
        }
        solrQuery.setFacet(true);
        solrQuery.setFacetMinCount(1);
        //solrQuery.setFacetLimit(100); solr default is 100 so doesn't need to be set explicitly
        if (solrQuery.getRows() == null) {
            solrQuery.setRows(12);
        }
        solrQuery.addFacetField(ThemeFilter.getTheme().getRecordDefinition().getFacetFieldStrings());
        // todo now hard-coded but these values must be retrieved from the RecordDefinition later
        if (solrQuery.getFields() == null) {
            solrQuery.setFields(
                    "europeana_uri,dc_title,europeana_object,dc_creator,europeana_year,europeana_provider,"
                            + "europeana_dataProvider,europeana_language,europeana_type,dc_description,dc_type");
            //            solrQuery.setFields("*,score");
            //            solrQuery.setFields(metadataModel.getRecordDefinition().getFieldStrings());
        }
        if (solrQuery.getQueryType().equalsIgnoreCase(QueryType.SIMPLE_QUERY.toString())) {
            solrQuery.setQueryType(queryAnalyzer
                    .findSolrQueryType(solrQuery.getQuery(), ThemeFilter.getTheme().getRecordDefinition())
                    .toString());
        }
    }
    SolrQuery dCopy = addHiddenQueryFilters(solrQuery, params);
    return getSolrResponseFromServer(dCopy, false);
}