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

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

Introduction

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

Prototype

public Integer getRows() 

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:au.org.ala.biocache.dao.SearchDAOImpl.java

License:Open Source License

/**
 * Process the {@see org.apache.solr.client.solrj.response.QueryResponse} from a SOLR search and return
 * a {@link au.org.ala.biocache.dto.SearchResultDTO}
 *
 * @param qr//  w  w w  .j a  va 2  s  .co m
 * @param solrQuery
 * @return
 */
private SearchResultDTO processSolrResponse(SearchRequestParams params, QueryResponse qr, SolrQuery solrQuery,
        Class resultClass) {
    SearchResultDTO searchResult = new SearchResultDTO();
    SolrDocumentList sdl = qr.getResults();
    // Iterator it = qr.getResults().iterator() // Use for download
    List<FacetField> facets = qr.getFacetFields();
    List<FacetField> facetDates = qr.getFacetDates();
    Map<String, Integer> facetQueries = qr.getFacetQuery();
    if (facetDates != null) {
        if (logger.isDebugEnabled()) {
            logger.debug("Facet dates size: " + facetDates.size());
        }
        facets.addAll(facetDates);
    }

    List<OccurrenceIndex> results = qr.getBeans(resultClass);

    //facet results
    searchResult.setTotalRecords(sdl.getNumFound());
    searchResult.setStartIndex(sdl.getStart());
    searchResult.setPageSize(solrQuery.getRows()); //pageSize
    searchResult.setStatus("OK");
    String[] solrSort = StringUtils.split(solrQuery.getSortField(), " "); // e.g. "taxon_name asc"
    if (logger.isDebugEnabled()) {
        logger.debug("sortField post-split: " + StringUtils.join(solrSort, "|"));
    }
    searchResult.setSort(solrSort[0]); // sortField
    searchResult.setDir(solrSort[1]); // sortDirection
    searchResult.setQuery(params.getUrlParams()); //this needs to be the original URL>>>>
    searchResult.setOccurrences(results);

    List<FacetResultDTO> facetResults = buildFacetResults(facets);

    //all belong to uncertainty range for now
    if (facetQueries != null && !facetQueries.isEmpty()) {
        Map<String, String> rangeMap = rangeBasedFacets.getRangeMap("uncertainty");
        List<FieldResultDTO> fqr = new ArrayList<FieldResultDTO>();
        for (String value : facetQueries.keySet()) {
            if (facetQueries.get(value) > 0)
                fqr.add(new FieldResultDTO(rangeMap.get(value), facetQueries.get(value), value));
        }
        facetResults.add(new FacetResultDTO("uncertainty", fqr));
    }

    //handle all the range based facets
    if (qr.getFacetRanges() != null) {
        for (RangeFacet rfacet : qr.getFacetRanges()) {
            List<FieldResultDTO> fqr = new ArrayList<FieldResultDTO>();
            if (rfacet instanceof Numeric) {
                Numeric nrfacet = (Numeric) rfacet;
                List<RangeFacet.Count> counts = nrfacet.getCounts();
                //handle the before
                if (nrfacet.getBefore().intValue() > 0) {
                    fqr.add(new FieldResultDTO("[* TO "
                            + getUpperRange(nrfacet.getStart().toString(), nrfacet.getGap(), false) + "]",
                            nrfacet.getBefore().intValue()));
                }
                for (RangeFacet.Count count : counts) {
                    String title = getRangeValue(count.getValue(), nrfacet.getGap());
                    fqr.add(new FieldResultDTO(title, count.getCount()));
                }
                //handle the after
                if (nrfacet.getAfter().intValue() > 0) {
                    fqr.add(new FieldResultDTO("[" + nrfacet.getEnd().toString() + " TO *]",
                            nrfacet.getAfter().intValue()));
                }
                facetResults.add(new FacetResultDTO(nrfacet.getName(), fqr));
            }
        }
    }

    //update image URLs
    for (OccurrenceIndex oi : results) {
        updateImageUrls(oi);
    }

    searchResult.setFacetResults(facetResults);
    // The query result is stored in its original format so that all the information
    // returned is available later on if needed
    searchResult.setQr(qr);
    return searchResult;
}

From source file:com.liferay.portal.search.solr.SolrIndexSearcherImpl.java

License:Open Source License

public Hits search(String searchEngineId, long companyId, Query query, Sort[] sorts, int start, int end)
        throws SearchException {

    try {/*  ww  w.ja va2s.co  m*/
        SolrQuery solrQuery = translateQuery(companyId, query, sorts, start, end);

        QueryResponse queryResponse = _solrServer.query(solrQuery);

        boolean allResults = false;

        if (solrQuery.getRows() == 0) {
            allResults = true;
        }

        return subset(solrQuery, query, query.getQueryConfig(), queryResponse, allResults);
    } catch (Exception e) {
        _log.error(e, e);

        if (!_swallowException) {
            throw new SearchException(e.getMessage());
        }

        return new HitsImpl();
    }
}

From source file:com.liferay.portal.search.solr.SolrIndexSearcherImpl.java

License:Open Source License

protected Hits doSearch(SearchContext searchContext, Query query) throws Exception {

    SolrQuery solrQuery = translateQuery(searchContext.getCompanyId(), query, searchContext.getSorts(),
            searchContext.getStart(), searchContext.getEnd());

    Map<String, Facet> facets = searchContext.getFacets();

    for (Facet facet : facets.values()) {
        if (facet.isStatic()) {
            continue;
        }/*from w  w w  .  j  a  va  2s . co  m*/

        FacetConfiguration facetConfiguration = facet.getFacetConfiguration();

        if (facet instanceof RangeFacet) {
            solrQuery.addFacetField(facetConfiguration.getFieldName());

            JSONObject dataJSONObject = facetConfiguration.getData();

            JSONArray rangesJSONArray = dataJSONObject.getJSONArray("ranges");

            if (rangesJSONArray == null) {
                continue;
            }

            for (int i = 0; i < rangesJSONArray.length(); i++) {
                JSONObject rangeJSONObject = rangesJSONArray.getJSONObject(i);

                String range = rangeJSONObject.getString("range");

                String facetQuery = facetConfiguration.getFieldName() + StringPool.COLON + range;

                solrQuery.addFacetQuery(facetQuery);
            }
        } else {
            solrQuery.addFacetField(facetConfiguration.getFieldName());
        }
    }

    solrQuery.setFacetLimit(-1);

    QueryResponse queryResponse = _solrServer.query(solrQuery);

    boolean allResults = false;

    if (solrQuery.getRows() == 0) {
        allResults = true;
    }

    List<FacetField> facetFields = queryResponse.getFacetFields();

    if (facetFields != null) {
        for (FacetField facetField : facetFields) {
            Facet facet = facets.get(facetField.getName());

            FacetCollector facetCollector = null;

            if (facet instanceof RangeFacet) {
                facetCollector = new SolrFacetQueryCollector(facetField.getName(),
                        queryResponse.getFacetQuery());
            } else {
                facetCollector = new SolrFacetFieldCollector(facetField.getName(), facetField);
            }

            facet.setFacetCollector(facetCollector);
        }
    }

    return subset(solrQuery, query, query.getQueryConfig(), queryResponse, allResults);
}

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)./* w  w w.  j  a v  a 2  s.c  om*/
 * <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>/*from   w w  w.  j a  v a  2  s.  co  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. //from ww w .  j  a va 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);
    }
}

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 ww  w. j  ava2  s.  com*/
    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 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);
    }//from www  .ja  v  a  2  s  . 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);
}