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

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

Introduction

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

Prototype

public SolrQuery setStart(Integer start) 

Source Link

Usage

From source file:org.emonocot.persistence.dao.hibernate.SearchableDaoImpl.java

License:Open Source License

/**
 * Prepares a {@link SolrQuery} with the parameters passed in
 * @param query//from  w w  w. j av a  2 s .c  om
 * @param sort
 * @param pageSize
 * @param pageNumber
 * @param selectedFacets
 * @return A {@link SolrQuery} that can be customised before passing to a {@link SolrServer}
 */
protected SolrQuery prepareQuery(String query, String sort, Integer pageSize, Integer pageNumber,
        Map<String, String> selectedFacets) {
    SolrQuery solrQuery = new SolrQuery();

    if (query != null && !query.trim().equals("")) {
        String searchString = null;
        if (query.indexOf(":") != -1) {
            searchString = query;
        } else {
            // replace spaces with '+' so that we search on terms
            searchString = query.trim().replace(" ", "+");
            solrQuery.set("defType", "edismax");
            solrQuery.set("qf", "searchable.label_sort searchable.solrsummary_t");
        }
        solrQuery.setQuery(searchString);

    } else {
        solrQuery.set("defType", "edismax");
        solrQuery.set("qf", "searchable.label_sort searchable.solrsummary_t");
        solrQuery.setQuery("*:*");
    }

    if (sort != null && sort.length() != 0) {
        for (String singleSort : sort.split(",")) {
            if (singleSort.equals("_asc")) {
                //Do nothing
            } else if (singleSort.endsWith("_asc")) {
                String sortField = singleSort.substring(0, singleSort.length() - 4);
                solrQuery.addSortField(sortField, SolrQuery.ORDER.asc);
            } else if (singleSort.endsWith("_desc")) {
                String sortField = singleSort.substring(0, singleSort.length() - 5);
                solrQuery.addSortField(sortField, SolrQuery.ORDER.desc);
            }
        }
    }

    if (pageSize != null) {
        solrQuery.setRows(pageSize);
        if (pageNumber != null) {
            solrQuery.setStart(pageSize * pageNumber);
        }
    }

    if (selectedFacets != null && !selectedFacets.isEmpty()) {
        for (String facetName : selectedFacets.keySet()) {
            String facetValue = selectedFacets.get(facetName);
            if (StringUtils.isNotEmpty(facetValue)) {
                solrQuery.addFilterQuery(facetName + ":" + selectedFacets.get(facetName));
            } else {//Subtract/Exclude documents with any value for the facet
                solrQuery.addFilterQuery("-" + facetName + ":[* TO *]");
            }
        }
    }

    return solrQuery;
}

From source file:org.entrystore.repository.util.SolrSupport.java

License:Apache License

private long sendQueryForEntryURIs(SolrQuery query, Set<URI> result, SolrServer solrServer, int offset,
        int limit) {
    if (offset > -1) {
        query.setStart(offset);
    }/*from   w  ww  .ja  va  2 s .com*/
    if (limit > -1) {
        query.setRows(limit);
    }

    long hits = -1;

    Date before = new Date();
    QueryResponse r = null;
    try {
        r = solrServer.query(query);
        SolrDocumentList docs = r.getResults();
        hits = docs.getNumFound();
        for (SolrDocument solrDocument : docs) {
            if (solrDocument.containsKey("uri")) {
                String uri = (String) solrDocument.getFieldValue("uri");
                if (uri != null) {
                    result.add(URI.create(uri));
                }
            }
        }
    } catch (SolrServerException e) {
        log.error(e.getMessage());
    }
    log.info("Solr query took " + (new Date().getTime() - before.getTime()) + " ms");

    return hits;
}

From source file:org.gbif.occurrence.download.file.OccurrenceFileWriterJob.java

/**
 * Executes the job.query and creates a data file that will contains the records from job.from to job.to positions.
 *///from  w  w w . j  a va2 s . co m
@Override
public Result call() throws IOException {
    // Creates a closer
    Closer closer = Closer.create();

    // Calculates the amount of output records
    final int nrOfOutputRecords = fileJob.getTo() - fileJob.getFrom();
    Map<UUID, Long> datasetUsages = Maps.newHashMap();

    // Creates a search request instance using the search request that comes in the fileJob
    SolrQuery solrQuery = createSolrQuery(fileJob.getQuery());

    try {
        ICsvMapWriter intCsvWriter = closer.register(
                new CsvMapWriter(new FileWriterWithEncoding(fileJob.getInterpretedDataFile(), Charsets.UTF_8),
                        CsvPreference.TAB_PREFERENCE));
        ICsvMapWriter verbCsvWriter = closer.register(
                new CsvMapWriter(new FileWriterWithEncoding(fileJob.getVerbatimDataFile(), Charsets.UTF_8),
                        CsvPreference.TAB_PREFERENCE));
        ICsvBeanWriter multimediaCsvWriter = closer.register(
                new CsvBeanWriter(new FileWriterWithEncoding(fileJob.getMultimediaDataFile(), Charsets.UTF_8),
                        CsvPreference.TAB_PREFERENCE));
        int recordCount = 0;
        while (recordCount < nrOfOutputRecords) {
            solrQuery.setStart(fileJob.getFrom() + recordCount);
            // Limit can't be greater than the maximum number of records assigned to this job
            solrQuery
                    .setRows(recordCount + LIMIT > nrOfOutputRecords ? nrOfOutputRecords - recordCount : LIMIT);
            final QueryResponse response = solrServer.query(solrQuery);
            for (Iterator<SolrDocument> itResults = response.getResults().iterator(); itResults
                    .hasNext(); recordCount++) {
                final Integer occKey = (Integer) itResults.next()
                        .getFieldValue(OccurrenceSolrField.KEY.getFieldName());
                // Writes the occurrence record obtained from HBase as Map<String,Object>.
                org.apache.hadoop.hbase.client.Result result = occurrenceMapReader.get(occKey);
                Map<String, String> occurrenceRecordMap = OccurrenceMapReader.buildOccurrenceMap(result);
                Map<String, String> verbOccurrenceRecordMap = OccurrenceMapReader
                        .buildVerbatimOccurrenceMap(result);
                if (occurrenceRecordMap != null) {
                    incrementDatasetUsage(datasetUsages, occurrenceRecordMap);
                    intCsvWriter.write(occurrenceRecordMap, INT_COLUMNS);
                    verbCsvWriter.write(verbOccurrenceRecordMap, VERB_COLUMNS);
                    writeMediaObjects(multimediaCsvWriter, result, occKey);
                } else {
                    LOG.error(String.format("Occurrence id %s not found!", occKey));
                }
            }
        }
    } catch (Exception e) {
        Throwables.propagate(e);
    } finally {
        closer.close();
        // Unlock the assigned lock.
        lock.unlock();
        LOG.info("Lock released, job detail: {} ", fileJob.toString());
    }
    return new Result(fileJob, datasetUsages);
}

From source file:org.geotools.data.solr.SolrDataStore.java

License:Open Source License

/**
 * Builds the SolrJ query with support of subset of fields, limit/offset, sorting, OGC filter
 * encoding and viewParams <br>//from ww w. j ava2  s.  c om
 * The SOLR query always need the order by PK field to enable pagination and efficient data
 * retrieving <br>
 * Currently only additional "q" and "fq" SOLR parameters can be passed using vireParams, this
 * conditions are added in AND with others
 * 
 * @param featureType the feature type to query
 * @param q the OGC query to translate in SOLR request
 * 
 * @see {@link Hints#VIRTUAL_TABLE_PARAMETERS}
 * 
 */
protected SolrQuery select(SimpleFeatureType featureType, Query q) {
    SolrQuery query = new SolrQuery();
    query.setParam("omitHeader", true);
    try {
        // Column names
        if (q.getPropertyNames() != null) {
            for (String prop : q.getPropertyNames()) {
                query.addField(prop);
            }
        }
        query.setQuery("*:*");

        // Encode limit/offset, if necessary
        if (q.getStartIndex() != null && q.getStartIndex() >= 0) {
            query.setStart(q.getStartIndex());
        }
        if (q.getMaxFeatures() > 0) {
            query.setRows(q.getMaxFeatures());
        }

        // Sort
        ORDER naturalSortOrder = ORDER.asc;
        if (q.getSortBy() != null) {
            for (SortBy sort : q.getSortBy()) {
                if (sort.getPropertyName() != null) {
                    query.addSort(sort.getPropertyName().getPropertyName(),
                            sort.getSortOrder().equals(SortOrder.ASCENDING) ? ORDER.asc : ORDER.desc);
                } else {
                    naturalSortOrder = sort.getSortOrder().equals(SortOrder.ASCENDING) ? ORDER.asc : ORDER.desc;
                }
            }
        }

        // Always add natural sort by PK to support pagination
        query.addSort(getPrimaryKey(featureType.getTypeName()).getName(), naturalSortOrder);

        // Encode OGC filer
        FilterToSolr f2s = initializeFilterToSolr(featureType);
        String fq = this.field + ":" + featureType.getTypeName();
        Filter simplified = SimplifyingFilterVisitor.simplify(q.getFilter());
        String ffq = f2s.encodeToString(simplified);
        if (ffq != null && !ffq.isEmpty()) {
            fq = fq + " AND " + ffq;
        }
        query.setFilterQueries(fq);

        // Add viewpPrams
        addViewparams(q, query);

    } catch (Exception e) {
        LOGGER.log(Level.SEVERE, e.getMessage(), e);
    }
    return query;
}

From source file:org.geotools.data.solr.SolrDataStore.java

License:Open Source License

/**
 * Builds the SolrJ count query with support of limit/offset, OGC filter encoding and viewParams <br>
 * Currently only additional "q" and "fq" SOLR parameters can be passed using viewParams, this
 * conditions are added in AND with others
 * /* ww w  . j a  v a2s  . c  om*/
 * @param featureType the feature type to query
 * @param q the OGC query to translate in SOLR request
 * 
 * @see {@link Hints#VIRTUAL_TABLE_PARAMETERS}
 * 
 */
protected SolrQuery count(SimpleFeatureType featureType, Query q) {
    SolrQuery query = new SolrQuery();
    query.setParam("omitHeader", true);
    query.setQuery("*:*");
    query.setFields(this.getPrimaryKey(featureType.getName().getLocalPart()).getName());
    try {

        // Encode limit/offset, if necessary

        if (q.getStartIndex() != null && q.getStartIndex() >= 0) {
            query.setStart(q.getStartIndex());
        }
        query.setRows(0);

        // Encode OGC filer
        FilterToSolr f2s = initializeFilterToSolr(featureType);
        String fq = this.field + ":" + featureType.getTypeName();
        String ffq = f2s.encodeToString(q.getFilter());
        if (ffq != null && !ffq.isEmpty()) {
            fq = fq + " AND " + ffq;
        }
        query.setFilterQueries(fq);

        // Add viewparams parameters
        addViewparams(q, query);

    } catch (Exception e) {
        LOGGER.log(Level.SEVERE, e.getMessage(), e);
    }
    return query;
}

From source file:org.geotools.data.solr.SolrFeatureReader.java

License:Open Source License

private String getCursorMarkForStart(HttpSolrServer server, SolrQuery solrQuery) throws SolrServerException {
    Integer prevRows = solrQuery.getRows();
    solrQuery.setRows(solrQuery.getStart());
    solrQuery.setStart(0);
    solrQuery.set(CursorMarkParams.CURSOR_MARK_PARAM, CursorMarkParams.CURSOR_MARK_START);
    QueryResponse rsp = server.query(solrQuery);
    if (this.solrDataStore.getLogger().isLoggable(Level.FINE)) {
        this.solrDataStore.getLogger().log(Level.FINE, "SOLR query done: " + solrQuery.toString());
    }/* w w  w  .  jav a  2 s. c  o m*/
    String nextC = rsp.getNextCursorMark();
    solrQuery.setRows(prevRows);
    return nextC;
}

From source file:org.gss_project.gss.server.ejb.ExternalAPIBean.java

License:Open Source License

/**
  * Performs the search on the solr server and returns the results
  */*from  ww  w .  ja v a2  s.  co m*/
  *
   * @param userId
   * @param query
   * @param luceneQuery
   * @return a List of FileHeader objects
  */
 public SearchResult search(Long userId, String query, int start, boolean luceneQuery)
         throws ObjectNotFoundException {
     if (userId == null)
         throw new ObjectNotFoundException("No user specified");
     if (query == null)
         throw new ObjectNotFoundException("No query specified");

     final int maxRows = getConfiguration().getInt("searchResultsPerPage", 25);
     List<FileHeader> result = new ArrayList<FileHeader>();
     try {
         CommonsHttpSolrServer solr = new CommonsHttpSolrServer(getConfiguration().getString("solr.url"));
         List<Group> groups = dao.getGroupsContainingUser(userId);
         String escapedQuery = luceneQuery ? normalizeSearchQuery(query)
                 : escapeCharacters(normalizeSearchQuery(query));
         String constructedQuery = escapedQuery + " AND (public: true OR ureaders: " + userId;
         if (!groups.isEmpty()) {
             constructedQuery += " OR (";
             for (int i = 0; i < groups.size(); i++) {
                 Group g = groups.get(i);
                 constructedQuery += "greaders :" + g.getId();
                 if (i < groups.size() - 1)
                     constructedQuery += " OR ";
             }
             constructedQuery += ")";
         }
         constructedQuery += ")";
         SolrQuery solrQuery = new SolrQuery(constructedQuery);
         solrQuery.setRows(maxRows);
         if (start > 0)
             solrQuery.setStart(start);
         QueryResponse response = solr.query(solrQuery);
         SolrDocumentList results = response.getResults();
         if (results.getNumFound() > maxRows && start < 0) {
             solrQuery.setRows(Integer.valueOf((int) results.getNumFound()));
             response = solr.query(solrQuery);
             results = response.getResults();
         }
         for (SolrDocument d : results) {
             Long id = Long.valueOf((String) d.getFieldValue("id"));
             try {
                 FileHeader f = dao.getEntityById(FileHeader.class, id);
                 result.add(f);
             } catch (ObjectNotFoundException e) {
                 logger.warn("Search result id " + id + " cannot be found", e);
             }
         }
         return new SearchResult(results.getNumFound(), result);
     } catch (MalformedURLException e) {
         logger.error(e);
         throw new EJBException(e);
     } catch (SolrServerException e) {
         logger.error(e);
         throw new EJBException(e);
     }
 }

From source file:org.intermine.api.searchengine.solr.SolrKeywordSearchHandler.java

License:GNU General Public License

private QueryResponse performSearch(InterMineAPI im, String queryString, Map<String, String> facetValues,
        List<Integer> ids, int offSet, int rowSize) {

    SolrClient solrClient = SolrClientManager.getClientInstance(im.getObjectStore());

    QueryResponse resp = null;/*from   w  w w . j  ava 2s  . c o  m*/

    KeywordSearchPropertiesManager keywordSearchPropertiesManager = KeywordSearchPropertiesManager
            .getInstance(im.getObjectStore());

    Vector<KeywordSearchFacetData> facets = keywordSearchPropertiesManager.getFacets();

    Map<ClassDescriptor, Float> classBoost = keywordSearchPropertiesManager.getClassBoost();

    List<String> fieldNames = getFieldNamesFromSolrSchema(solrClient);

    try {

        SolrQuery newQuery = new SolrQuery();
        newQuery.setQuery(queryString);
        newQuery.setStart(offSet);
        newQuery.setRows(rowSize);
        newQuery.addField("score");
        newQuery.addField("id");
        newQuery.add("defType", "edismax");

        for (KeywordSearchFacetData keywordSearchFacetData : facets) {
            newQuery.addFacetField("facet_" + keywordSearchFacetData.getField());
        }

        // add faceting selections
        for (Map.Entry<String, String> facetValue : facetValues.entrySet()) {
            if (facetValue != null) {
                newQuery.addFilterQuery(facetValue.getKey() + ":" + facetValue.getValue());
            }
        }

        //limiting the query based on search bag
        if (ids != null && !ids.isEmpty()) {
            for (int id : ids) {
                newQuery.addFilterQuery("id", Integer.toString(id));
            }
        }

        String boostQuery = "";

        for (Map.Entry<ClassDescriptor, Float> boostValue : classBoost.entrySet()) {
            if (boostValue != null) {
                boostQuery += "classname:" + boostValue.getKey().getUnqualifiedName() + "^"
                        + boostValue.getValue() + " ";
            }
        }

        LOG.info("BoostQuery : " + boostQuery);

        String fieldListQuery = "";

        for (String field : fieldNames) {
            fieldListQuery = fieldListQuery + field;
            if (field.endsWith("_raw")) {
                fieldListQuery = fieldListQuery + "^2.0";
            }
            fieldListQuery = fieldListQuery + " ";
        }

        LOG.info("Field List Query : " + fieldListQuery);

        newQuery.add("bq", boostQuery);
        newQuery.add("qf", fieldListQuery);

        resp = solrClient.query(newQuery, SolrRequest.METHOD.POST);

        return resp;

    } catch (SolrServerException e) {
        LOG.error("Query performed on solr failed for search term : " + queryString, e);
        e.printStackTrace();

    } catch (IOException e) {
        LOG.error("Query performed on solr failed for search term : " + queryString, e);
        e.printStackTrace();

    }

    return resp;
}

From source file:org.janusgraph.diskstorage.solr.SolrIndex.java

License:Apache License

@Override
public Stream<String> query(IndexQuery query, KeyInformation.IndexRetriever information, BaseTransaction tx)
        throws BackendException {
    final String collection = query.getStore();
    final String keyIdField = getKeyFieldId(collection);
    final SolrQuery solrQuery = new SolrQuery("*:*");
    solrQuery.set(CommonParams.FL, keyIdField);
    final String queryFilter = buildQueryFilter(query.getCondition(), information.get(collection));
    solrQuery.addFilterQuery(queryFilter);
    if (!query.getOrder().isEmpty()) {
        addOrderToQuery(solrQuery, query.getOrder());
    }/*  w w  w  .ja  v a2 s. c  om*/
    solrQuery.setStart(0);
    if (query.hasLimit()) {
        solrQuery.setRows(Math.min(query.getLimit(), batchSize));
    } else {
        solrQuery.setRows(batchSize);
    }
    return executeQuery(query.hasLimit() ? query.getLimit() : null, 0, collection, solrQuery,
            doc -> doc.getFieldValue(keyIdField).toString());
}

From source file:org.kimios.kernel.controller.impl.SolrSearchController.java

License:Open Source License

private SearchResponse quickSearchIds(Session session, String query, DMEntity entity, int start, int pageSize,
        String sortField, String sortDir) {
    String documentNameQuery = QueryBuilder.documentNameQuery(query);

    SolrQuery indexQuery = new SolrQuery();

    ArrayList<String> filterQueries = new ArrayList<String>();
    if (!getSecurityAgent().isAdmin(session.getUserName(), session.getUserSource())) {
        String aclQuery = QueryBuilder.buildAclQuery(session);
        filterQueries.add(aclQuery);/*ww w  .j  ava  2s.com*/
    }
    if (entity != null) {
        DMEntity entityLoaded = dmsFactoryInstantiator.getDmEntityFactory().getEntity(entity.getUid());
        String pathQuery = "DocumentParent:" + entityLoaded.getPath() + "/*";
        filterQueries.add(pathQuery);
    }
    indexQuery.setFilterQueries(filterQueries.toArray(new String[] {}));
    if (sortField != null) {
        indexQuery.addSortField(sortField,
                SolrQuery.ORDER.valueOf((sortDir != null ? sortDir.toLowerCase() : "asc")));
    }
    indexQuery.addSortField("score", SolrQuery.ORDER.desc);
    indexQuery.setQuery(documentNameQuery);
    if (start > -1 && pageSize > -1) {
        indexQuery.setStart(start);
        indexQuery.setRows(pageSize);
    }

    SearchResponse searchResponse = solrIndexManager.executeSolrQuery(indexQuery);
    return searchResponse;
}