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.opencastproject.search.impl.solr.SolrRequester.java

License:Educational Community License

/**
 * Converts the query object into a solr query and returns the results.
 * //w w  w  . j  av a2 s  .  c  o  m
 * @param q
 *          the query
 * @param action
 *          one of {@link org.opencastproject.search.api.SearchService#READ_PERMISSION},
 *          {@link org.opencastproject.search.api.SearchService#WRITE_PERMISSION}
 * @param applyPermissions
 *          whether to apply the permissions to the query. Set to false for administrative queries.
 * @return the search results
 */
private SolrQuery getForAction(SearchQuery q, String action, boolean applyPermissions)
        throws SolrServerException {
    StringBuilder sb = new StringBuilder();

    if (StringUtils.isNotBlank(q.getQuery()))
        sb.append(q.getQuery());

    String solrIdRequest = StringUtils.trimToNull(q.getId());
    if (solrIdRequest != null) {
        String cleanSolrIdRequest = SolrUtils.clean(solrIdRequest);
        if (sb.length() > 0)
            sb.append(" AND ");
        sb.append("(");
        sb.append(Schema.ID);
        sb.append(":");
        sb.append(cleanSolrIdRequest);
        if (q.isIncludeEpisodes() && q.isIncludeSeries()) {
            sb.append(" OR ");
            sb.append(Schema.DC_IS_PART_OF);
            sb.append(":");
            sb.append(cleanSolrIdRequest);
        }
        sb.append(")");
    }

    String solrSeriesIdRequest = StringUtils.trimToNull(q.getSeriesId());
    if (solrSeriesIdRequest != null) {
        String cleanSolrSeriesIdRequest = SolrUtils.clean(solrSeriesIdRequest);
        if (sb.length() > 0) {
            sb.append(" AND ");
        }
        sb.append("(");
        sb.append(Schema.DC_IS_PART_OF);
        sb.append(":");
        sb.append(cleanSolrSeriesIdRequest);
        sb.append(")");
    }

    String solrTextRequest = StringUtils.trimToNull(q.getText());
    if (solrTextRequest != null) {
        String cleanSolrTextRequest = SolrUtils.clean(q.getText());
        if (StringUtils.isNotEmpty(cleanSolrTextRequest)) {
            if (sb.length() > 0)
                sb.append(" AND ");
            sb.append("*:");
            sb.append(boost(cleanSolrTextRequest));
        }
    }

    if (q.getElementTags() != null && q.getElementTags().length > 0) {
        if (sb.length() > 0)
            sb.append(" AND ");
        StringBuilder tagBuilder = new StringBuilder();
        for (int i = 0; i < q.getElementTags().length; i++) {
            String tag = SolrUtils.clean(q.getElementTags()[i]);
            if (StringUtils.isEmpty(tag))
                continue;
            if (tagBuilder.length() == 0) {
                tagBuilder.append("(");
            } else {
                tagBuilder.append(" OR ");
            }
            tagBuilder.append(Schema.OC_ELEMENTTAGS);
            tagBuilder.append(":");
            tagBuilder.append(tag);
        }
        if (tagBuilder.length() > 0) {
            tagBuilder.append(") ");
            sb.append(tagBuilder);
        }
    }

    if (q.getElementFlavors() != null && q.getElementFlavors().length > 0) {
        if (sb.length() > 0)
            sb.append(" AND ");
        StringBuilder flavorBuilder = new StringBuilder();
        for (int i = 0; i < q.getElementFlavors().length; i++) {
            String flavor = SolrUtils.clean(q.getElementFlavors()[i].toString());
            if (StringUtils.isEmpty(flavor))
                continue;
            if (flavorBuilder.length() == 0) {
                flavorBuilder.append("(");
            } else {
                flavorBuilder.append(" OR ");
            }
            flavorBuilder.append(Schema.OC_ELEMENTFLAVORS);
            flavorBuilder.append(":");
            flavorBuilder.append(flavor);
        }
        if (flavorBuilder.length() > 0) {
            flavorBuilder.append(") ");
            sb.append(flavorBuilder);
        }
    }

    if (q.getDeletedDate() != null) {
        if (sb.length() > 0)
            sb.append(" AND ");
        sb.append(Schema.OC_DELETED + ":"
                + SolrUtils.serializeDateRange(option(q.getDeletedDate()), Option.<Date>none()));
    }

    if (sb.length() == 0)
        sb.append("*:*");

    if (applyPermissions) {
        sb.append(" AND ").append(Schema.OC_ORGANIZATION).append(":")
                .append(SolrUtils.clean(securityService.getOrganization().getId()));
        User user = securityService.getUser();
        String[] roles = user.getRoles();
        boolean userHasAnonymousRole = false;
        if (roles.length > 0) {
            sb.append(" AND (");
            StringBuilder roleList = new StringBuilder();
            for (String role : roles) {
                if (roleList.length() > 0)
                    roleList.append(" OR ");
                roleList.append(Schema.OC_ACL_PREFIX).append(action).append(":").append(SolrUtils.clean(role));
                if (role.equalsIgnoreCase(securityService.getOrganization().getAnonymousRole())) {
                    userHasAnonymousRole = true;
                }
            }
            if (!userHasAnonymousRole) {
                if (roleList.length() > 0)
                    roleList.append(" OR ");
                roleList.append(Schema.OC_ACL_PREFIX).append(action).append(":")
                        .append(SolrUtils.clean(securityService.getOrganization().getAnonymousRole()));
            }

            sb.append(roleList.toString());
            sb.append(")");
        }
    }

    if (!q.isIncludeEpisodes()) {
        if (sb.length() > 0)
            sb.append(" AND ");
        sb.append("-" + Schema.OC_MEDIATYPE + ":" + SearchResultItemType.AudioVisual);
    }

    if (!q.isIncludeSeries()) {
        if (sb.length() > 0)
            sb.append(" AND ");
        sb.append("-" + Schema.OC_MEDIATYPE + ":" + SearchResultItemType.Series);
    }

    if (q.getDeletedDate() == null) {
        if (sb.length() > 0)
            sb.append(" AND ");
        sb.append("-" + Schema.OC_DELETED + ":[* TO *]");
    }

    SolrQuery query = new SolrQuery(sb.toString());

    if (q.getLimit() > 0) {
        query.setRows(q.getLimit());
    } else {
        query.setRows(Integer.MAX_VALUE);
    }

    if (q.getOffset() > 0)
        query.setStart(q.getOffset());

    if (q.isSortByPublicationDate()) {
        query.addSortField(Schema.OC_MODIFIED, ORDER.desc);
    } else if (q.isSortByCreationDate()) {
        query.addSortField(Schema.DC_CREATED, ORDER.desc);
        // If the dublin core field dc:created has not been filled in...
        query.addSortField(Schema.OC_MODIFIED, ORDER.desc);
    }

    query.setFields("* score");
    return query;
}

From source file:org.opencastproject.series.impl.solr.SeriesServiceSolrIndex.java

License:Educational Community License

/**
 * {@inheritDoc}/*from  w  ww  . ja v  a  2 s  .c  o  m*/
 */
@Override
public DublinCoreCatalogList search(SeriesQuery query) throws SeriesServiceDatabaseException {
    int count = query.getCount() > 0 ? (int) query.getCount() : 20; // default to 20 items if not specified
    int startPage = query.getStartPage() > 0 ? (int) query.getStartPage() : 0; // default to page zero

    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setRows(count);
    solrQuery.setStart(startPage * count);

    String solrQueryString = null;
    solrQueryString = buildSolrQueryString(query, query.isEdit());
    solrQuery.setQuery(solrQueryString);

    if (query.getSort() != null) {
        SolrQuery.ORDER order = query.isSortAscending() ? SolrQuery.ORDER.asc : SolrQuery.ORDER.desc;
        solrQuery.addSortField(getSortField(query.getSort()) + "_sort", order);
    }

    if (!SeriesQuery.Sort.CREATED.equals(query.getSort())) {
        solrQuery.addSortField(getSortField(SeriesQuery.Sort.CREATED) + "_sort", SolrQuery.ORDER.desc);
    }

    List<DublinCoreCatalog> result;

    try {
        QueryResponse response = solrServer.query(solrQuery);
        SolrDocumentList items = response.getResults();

        result = new LinkedList<DublinCoreCatalog>();

        // Iterate through the results
        for (SolrDocument doc : items) {
            DublinCoreCatalog item = parseDublinCore((String) doc.get(SolrFields.XML_KEY));
            result.add(item);
        }
        return new DublinCoreCatalogList(result, response.getResults().getNumFound());
    } catch (Exception e) {
        logger.error("Could not retrieve results: {}", e.getMessage());
        throw new SeriesServiceDatabaseException(e);
    }
}

From source file:org.opencastproject.workflow.impl.WorkflowServiceSolrIndex.java

License:Educational Community License

/**
 * {@inheritDoc}//from w w w. j  a va  2 s . c o  m
 * 
 * @see org.opencastproject.workflow.impl.WorkflowServiceIndex#getWorkflowInstances(org.opencastproject.workflow.api.WorkflowQuery,
 *      String, boolean)
 */
@Override
public WorkflowSet getWorkflowInstances(WorkflowQuery query, String action, boolean applyPermissions)
        throws WorkflowDatabaseException {
    int count = query.getCount() > 0 ? (int) query.getCount() : 20; // default to 20 items if not specified
    int startPage = query.getStartPage() > 0 ? (int) query.getStartPage() : 0; // default to page zero

    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setRows(count);
    solrQuery.setStart(startPage * count);

    String solrQueryString = createQuery(query, action, applyPermissions);
    solrQuery.setQuery(solrQueryString);

    if (query.getSort() != null) {
        ORDER order = query.isSortAscending() ? ORDER.asc : ORDER.desc;
        solrQuery.addSortField(getSortField(query.getSort()) + "_sort", order);
    }

    if (!Sort.DATE_CREATED.equals(query.getSort())) {
        solrQuery.addSortField(getSortField(Sort.DATE_CREATED) + "_sort", ORDER.desc);
    }

    long totalHits;
    long time = System.currentTimeMillis();
    WorkflowSetImpl set = null;
    try {
        QueryResponse response = solrServer.query(solrQuery);
        SolrDocumentList items = response.getResults();
        long searchTime = System.currentTimeMillis() - time;
        totalHits = items.getNumFound();

        set = new WorkflowSetImpl();
        set.setPageSize(count);
        set.setTotalCount(totalHits);
        set.setStartPage(query.getStartPage());
        set.setSearchTime(searchTime);

        // Iterate through the results
        for (SolrDocument doc : items) {
            String xml = (String) doc.get(XML_KEY);
            try {
                set.addItem(WorkflowParser.parseWorkflowInstance(xml));
            } catch (Exception e) {
                throw new IllegalStateException("can not parse workflow xml", e);
            }
        }
    } catch (Exception e) {
        throw new WorkflowDatabaseException(e);
    }
    long totalTime = System.currentTimeMillis() - time;
    logger.debug("Workflow query took {} ms", totalTime);
    return set;
}

From source file:org.opencb.opencga.storage.core.search.solr.SolrQueryParser.java

License:Apache License

/**
 * Create a SolrQuery object from Query and QueryOptions.
 *
 * @param query         Query/*from   ww w  . j  a  v  a2 s  .co  m*/
 * @param queryOptions  Query Options
 * @return              SolrQuery
 */
public SolrQuery parse(Query query, QueryOptions queryOptions) {
    List<String> filterList = new ArrayList<>();

    SolrQuery solrQuery = new SolrQuery();

    //-------------------------------------
    // QueryOptions processing
    //-------------------------------------
    if (queryOptions.containsKey(QueryOptions.INCLUDE)) {
        solrQuery.setFields(queryOptions.getAsStringList(QueryOptions.INCLUDE).toString());
    }

    if (queryOptions.containsKey(QueryOptions.LIMIT)) {
        solrQuery.setRows(queryOptions.getInt(QueryOptions.LIMIT));
    }

    if (queryOptions.containsKey(QueryOptions.SKIP)) {
        solrQuery.setStart(queryOptions.getInt(QueryOptions.SKIP));
    }

    if (queryOptions.containsKey(QueryOptions.SORT)) {
        solrQuery.addSort(queryOptions.getString(QueryOptions.SORT), getSortOrder(queryOptions));
    }

    //-------------------------------------
    // Query processing
    //-------------------------------------

    // OR conditions
    // create a list for xrefs (without genes), genes, regions and cts
    // the function classifyIds function differentiates xrefs from genes
    List<String> xrefs = new ArrayList<>();
    List<String> genes = new ArrayList<>();
    List<Region> regions = new ArrayList<>();
    List<String> consequenceTypes = new ArrayList<>();

    // xref
    classifyIds(VariantQueryParams.ANNOT_XREF.key(), query, xrefs, genes);
    classifyIds(VariantQueryParams.ID.key(), query, xrefs, genes);
    classifyIds(VariantQueryParams.GENE.key(), query, xrefs, genes);
    classifyIds(VariantQueryParams.ANNOT_CLINVAR.key(), query, xrefs, genes);
    classifyIds(VariantQueryParams.ANNOT_COSMIC.key(), query, xrefs, genes);
    //        classifyIds(VariantQueryParams.ANNOT_HPO.key(), query, xrefs, genes);

    // Convert region string to region objects
    if (query.containsKey(VariantQueryParams.REGION.key())) {
        regions = Region.parseRegions(query.getString(VariantQueryParams.REGION.key()));
    }

    // consequence types (cts)
    if (query.containsKey(VariantQueryParams.ANNOT_CONSEQUENCE_TYPE.key())
            && StringUtils.isNotEmpty(query.getString(VariantQueryParams.ANNOT_CONSEQUENCE_TYPE.key()))) {
        consequenceTypes = Arrays
                .asList(query.getString(VariantQueryParams.ANNOT_CONSEQUENCE_TYPE.key()).split("[,;]"));
    }

    // goal: [((xrefs OR regions) AND cts) OR (genes AND cts)] AND ... AND ...
    if (consequenceTypes.size() > 0) {
        if (genes.size() > 0) {
            // consequence types and genes
            String or = buildXrefOrRegionAndConsequenceType(xrefs, regions, consequenceTypes);
            if (xrefs.size() == 0 && regions.size() == 0) {
                // no xrefs or regions: genes AND cts
                filterList.add(buildGeneAndCt(genes, consequenceTypes));
            } else {
                // otherwise: [((xrefs OR regions) AND cts) OR (genes AND cts)]
                filterList.add("(" + or + ") OR (" + buildGeneAndCt(genes, consequenceTypes) + ")");
            }
        } else {
            // consequence types but no genes: (xrefs OR regions) AND cts
            // in this case, the resulting string will never be null, because there are some consequence types!!
            filterList.add(buildXrefOrRegionAndConsequenceType(xrefs, regions, consequenceTypes));
        }
    } else {
        // no consequence types: (xrefs OR regions) but we must add "OR genes", i.e.: xrefs OR regions OR genes
        // no consequence types: (xrefs OR regions) but we must add "OR genMINes", i.e.: xrefs OR regions OR genes
        // we must make an OR with xrefs, genes and regions and add it to the "AND" filter list
        String orXrefs = buildXrefOrGeneOrRegion(xrefs, genes, regions);
        if (!orXrefs.isEmpty()) {
            filterList.add(orXrefs);
        }
    }

    // now we continue with the other AND conditions...
    // type (t)
    String key = VariantQueryParams.STUDIES.key();
    if (isValidParam(query, VariantQueryParams.STUDIES)) {
        try {
            String value = query.getString(key);
            VariantDBAdaptorUtils.QueryOperation op = checkOperator(value);
            Set<Integer> studyIds = new HashSet<>(
                    variantDBAdaptorUtils.getStudyIds(splitValue(value, op), queryOptions));
            List<String> studyNames = new ArrayList<>(studyIds.size());
            Map<String, Integer> map = variantDBAdaptorUtils.getStudyConfigurationManager().getStudies(null);
            if (map != null && map.size() > 1) {
                map.forEach((name, id) -> {
                    if (studyIds.contains(id)) {
                        String[] s = name.split(":");
                        studyNames.add(s[s.length - 1]);
                    }
                });

                if (op == null || op == VariantDBAdaptorUtils.QueryOperation.OR) {
                    filterList.add(parseCategoryTermValue("studies", StringUtils.join(studyNames, ",")));
                } else {
                    filterList.add(parseCategoryTermValue("studies", StringUtils.join(studyNames, ";")));
                }
            }
        } catch (NullPointerException e) {
            logger.error(e.getMessage());
            e.printStackTrace();
        }
    }

    // type (t)
    key = VariantQueryParams.TYPE.key();
    if (StringUtils.isNotEmpty(query.getString(key))) {
        filterList.add(parseCategoryTermValue("type", query.getString(key)));
    }

    // Gene biotype
    key = VariantQueryParams.ANNOT_BIOTYPE.key();
    if (StringUtils.isNotEmpty(query.getString(key))) {
        filterList.add(parseCategoryTermValue("biotypes", query.getString(key)));
    }

    // protein-substitution
    key = VariantQueryParams.ANNOT_PROTEIN_SUBSTITUTION.key();
    if (StringUtils.isNotEmpty(query.getString(key))) {
        filterList.add(parseScoreValue(query.getString(key)));
    }

    // conservation
    key = VariantQueryParams.ANNOT_CONSERVATION.key();
    if (StringUtils.isNotEmpty(query.getString(key))) {
        filterList.add(parseScoreValue(query.getString(key)));
    }

    // cadd, functional score
    key = VariantQueryParams.ANNOT_FUNCTIONAL_SCORE.key();
    if (StringUtils.isNotEmpty(query.getString(key))) {
        filterList.add(parseScoreValue(query.getString(key)));
    }

    // maf population frequency
    // in the model: "popFreq__1kG_phase3__CLM":0.005319148767739534
    key = VariantQueryParams.ANNOT_POPULATION_MINOR_ALLELE_FREQUENCY.key();
    if (StringUtils.isNotEmpty(query.getString(key))) {
        filterList.add(parsePopValue("popFreq", query.getString(key)));
    }

    // stats maf
    // in the model: "stats__1kg_phase3__ALL"=0.02
    key = VariantQueryParams.STATS_MAF.key();
    if (StringUtils.isNotEmpty(query.getString(key))) {
        filterList.add(parsePopValue("stats", query.getString(key)));
    }

    // GO
    key = VariantQueryParams.ANNOT_GO.key();
    if (StringUtils.isNotEmpty(query.getString(key))) {
        List<String> gos = Arrays.asList(query.getString(key).split(","));
        Set genesByGo = variantDBAdaptorUtils.getGenesByGo(gos);
        if (genesByGo != null && genesByGo.size() > 0) {
            filterList.add(parseCategoryTermValue("xrefs", StringUtils.join(genesByGo, ",")));
        }
    }

    // hpo
    key = VariantQueryParams.ANNOT_HPO.key();
    if (StringUtils.isNotEmpty(query.getString(key))) {
        filterList.add(parseCategoryTermValue("traits", query.getString(key)));
    }

    // clinvar
    key = VariantQueryParams.ANNOT_CLINVAR.key();
    if (StringUtils.isNotEmpty(query.getString(key))) {
        filterList.add(parseCategoryTermValue("traits", query.getString(key)));
    }

    // traits
    key = VariantQueryParams.ANNOT_TRAITS.key();
    if (StringUtils.isNotEmpty(query.getString(key))) {
        filterList.add(parseCategoryTermValue("traits", query.getString(key)));
    }

    //-------------------------------------
    // Facet processing
    //-------------------------------------

    if (query.containsKey("facet.field")) {
        solrQuery.addFacetField((query.get("facet.field").toString()));
    }

    if (query.containsKey("facet.fields")) {
        solrQuery.addFacetField((query.get("facet.fields").toString().split(",")));
    }

    if (query.containsKey("facet.query")) {
        solrQuery.addFacetQuery(query.get("facet.query").toString());
    }

    if (query.containsKey("facet.prefix")) {
        solrQuery.setFacetPrefix(query.get("facet.prefix").toString());
    }

    if (query.containsKey("facet.range")) {

        Map<String, Map<String, Number>> rangeFields = (Map<String, Map<String, Number>>) query
                .get("facet.range");

        for (String k : rangeFields.keySet()) {
            Number rangeStart = rangeFields.get(k).get("facet.range.start");
            Number rangeEnd = rangeFields.get(k).get("facet.range.end");
            Number rangeGap = rangeFields.get(k).get("facet.range.gap");
            solrQuery.addNumericRangeFacet(k, rangeStart, rangeEnd, rangeGap);
        }
    }

    logger.debug("query = {}\n", query.toJson());

    solrQuery.setQuery("*:*");
    filterList.forEach(filter -> {
        solrQuery.addFilterQuery(filter);
        logger.debug("Solr fq: {}\n", filter);
    });

    return solrQuery;
}

From source file:org.opencommercesearch.RuleManager.java

License:Apache License

/**
 * Loads the rules that matches the given query
 * // w  w w  .  ja v a2  s  . c  om
 * @param q is the user query
 * @param categoryPath is the current category path, used to filter out rules (i.e. rule based pages)
 * @param categoryFilterQuery is the current category search token that will be used for filtering out rules and facets
 * @param isSearch indicates if we are browsing or searching the site
 * @param isRuleBasedPage tells whether or not we are on a rule based page
 * @param catalog the current catalog we are browsing/searching
 * @param isOutletPage tells whether or not the current page is outlet
 * @param brandId is the current brand id currently browsed, if any.
 * @throws RepositoryException if an exception happens retrieving a rule from the repository
 * @throws SolrServerException if an exception happens querying the search engine
 */
void loadRules(String q, String categoryPath, String categoryFilterQuery, boolean isSearch,
        boolean isRuleBasedPage, RepositoryItem catalog, boolean isOutletPage, String brandId,
        Set<String> includeExperiments, Set<String> excludeExperiments)
        throws RepositoryException, SolrServerException {
    if (isSearch && StringUtils.isBlank(q)) {
        throw new IllegalArgumentException("Missing query");
    }

    SolrQuery query = new SolrQuery("*:*");
    query.setStart(DEFAULT_START);
    query.setRows(DEFAULT_ROWS);
    query.addSort(FIELD_SORT_PRIORITY, ORDER.asc);
    query.addSort(FIELD_SCORE, ORDER.asc);
    query.addSort(FIELD_ID, ORDER.asc);
    query.add(CommonParams.FL, FIELD_ID, FIELD_BOOST_FUNCTION, FIELD_FACET_FIELD, FIELD_COMBINE_MODE,
            FIELD_QUERY, FIELD_CATEGORY, FIELD_EXPERIMENTAL);

    StringBuilder reusableStringBuilder = new StringBuilder();
    query.addFilterQuery(getTargetFilter(reusableStringBuilder, isSearch, q));
    query.addFilterQuery(getCategoryFilter(reusableStringBuilder, categoryFilterQuery, categoryPath));
    query.addFilterQuery(getSiteFilter(reusableStringBuilder, catalog));
    query.addFilterQuery(getBrandFilter(reusableStringBuilder, brandId));
    query.addFilterQuery(getSubTargetFilter(reusableStringBuilder, isOutletPage));

    StringBuilder catalogFilter = reuseStringBuilder(reusableStringBuilder);
    catalogFilter.append("catalogId:").append(WILDCARD).append(" OR ").append("catalogId:")
            .append(catalog.getRepositoryId());
    query.addFilterQuery(catalogFilter.toString());

    //Notice how the current datetime (NOW wildcard on Solr) is rounded to days (NOW/DAY). This allows filter caches
    //to be reused and hopefully improve performance. If you don't round to day, NOW is very precise (up to milliseconds); so every query
    //would need a new entry on the filter cache...
    //Also, notice that NOW/DAY is midnight from last night, and NOW/DAY+1DAY is midnight today.
    //The below query is intended to match rules with null start or end dates, or start and end dates in the proper range.
    query.addFilterQuery(
            "-(((startDate:[* TO *]) AND -(startDate:[* TO NOW/DAY+1DAY])) OR (endDate:[* TO *] AND -endDate:[NOW/DAY+1DAY TO *]))");

    int queryTime = 0;
    QueryResponse res = server.query(query);
    queryTime += res.getQTime();

    if (res.getResults() == null || res.getResults().getNumFound() == 0) {
        rules = Collections.emptyMap();
        loadRulesTime = queryTime;
        return;
    }

    rules = new HashMap<String, List<RepositoryItem>>(RuleType.values().length);
    ruleDocs = new HashMap<String, SolrDocument>();
    SolrDocumentList docs = res.getResults();
    int total = (int) docs.getNumFound();
    int processed = 0;
    while (processed < total) {
        for (int i = 0; i < docs.size(); i++) {
            ++processed;
            SolrDocument doc = docs.get(i);

            if (isSearch && !matchesQuery(q, doc)) {
                // skip this rule
                continue;
            }

            RepositoryItem rule = searchRepository.getItem((String) doc.getFieldValue("id"),
                    SearchRepositoryItemDescriptor.RULE);

            //for rule based categories, include all facet rules and ranking rules of only that category
            if (rule != null) {

                if (excludeExperiments.contains(rule.getRepositoryId())) {
                    continue;
                }

                Boolean experimental = (Boolean) doc.getFieldValue(FIELD_EXPERIMENTAL);
                if (experimental != null && experimental
                        && !includeExperiments.contains(rule.getRepositoryId())) {
                    continue;
                }

                String ruleType = (String) rule.getPropertyValue(RuleProperty.RULE_TYPE);
                if (ruleType.equals(RuleProperty.TYPE_FACET_RULE)) {
                    buildRuleLists(ruleType, rule, doc);
                } else {
                    if (categoryPath != null && isRuleBasedPage) {
                        List<String> ruleCategories = (List<String>) doc.getFieldValue(FIELD_CATEGORY);
                        if (ruleCategories != null) {
                            if (ruleCategories.contains(categoryPath)) {
                                buildRuleLists(ruleType, rule, doc);
                            }
                        }
                    } else {
                        buildRuleLists(ruleType, rule, doc);
                    }
                }
            } else {
                //TODO gsegura: add logging that we couldn't find the rule item in the DB
            }
        }
        if (processed < total) {
            query.setStart(processed);
            res = server.query(query);
            queryTime += res.getQTime();
            docs = res.getResults();
        }
    }

    loadRulesTime = queryTime;
}

From source file:org.opengeoportal.harvester.api.client.solr.SolrSearchParams.java

License:Open Source License

/**
 * Transform the record in {@link SolrQuery} executable by an
 * {@link org.apache.solr.client.solrj.impl.HttpSolrServer}.
 * //  www  . j av  a2  s. c  o  m
 * @return the {@link SolrQuery} built with the data page this.
 */
public SolrQuery toSolrQuery() {
    SolrQuery solrQuery = new SolrQuery();

    if (StringUtils.isNotBlank(customSolrQuery)) {
        solrQuery.setQuery(customSolrQuery);
    } else {
        solrQuery.setQuery("*:*");
        // data repositories
        if (dataRepositories != null && dataRepositories.size() > 0) {
            Criteria institutionCriteria = null;
            for (String institution : dataRepositories) {
                if (institutionCriteria == null) {
                    institutionCriteria = new Criteria(SolrRecord.INSTITUTION).is(institution);
                } else {
                    institutionCriteria = institutionCriteria
                            .or(new Criteria(SolrRecord.INSTITUTION).is(institution));
                }
            }

            SimpleQuery query = new SimpleQuery(institutionCriteria);
            DefaultQueryParser parser = new DefaultQueryParser();
            String queryString = parser.getQueryString(query);
            solrQuery.addFilterQuery(queryString);
        } else {
            solrQuery.addFilterQuery(SolrRecord.INSTITUTION + ":*");
        }

        // theme keywords
        if (StringUtils.isNotBlank(themeKeyword)) {
            solrQuery.addFilterQuery(SolrRecord.THEME_KEYWORDS + ":" + themeKeyword);
            solrQuery.add(PF, SolrRecord.THEME_KEYWORDS + ":'" + themeKeyword + "'^9.0");
            solrQuery.add(PF, SolrRecord.LAYER_DISPLAY_NAME + ":'" + themeKeyword + "'^9.0");
        }
        if (StringUtils.isNotBlank(placeKeyword)) {
            solrQuery.addFilterQuery(SolrRecord.PLACE_KEYWORDS + ":" + placeKeyword);
            solrQuery.add(PF, SolrRecord.PLACE_KEYWORDS + ":'" + placeKeyword + "'^9.0");
        }
        if (StringUtils.isNotBlank(topicCategory)) {
            solrQuery.addFilterQuery(SolrRecord.ISO_TOPIC_CATEGORY + ":" + this.topicCategory);

        }

        if (dateFrom != null || dateTo != null) {
            Criteria contentDateCriteria = Criteria.where(SolrRecord.CONTENT_DATE).between(dateFrom, dateTo);
            SimpleQuery query = new SimpleQuery(contentDateCriteria);
            DefaultQueryParser parser = new DefaultQueryParser();
            String queryString = parser.getQueryString(query);
            solrQuery.addFilterQuery(queryString);

        }
        if (StringUtils.isNotBlank(originator)) {
            String originatorCriteria = splitAndConcatenateUsingOperator(Operator.AND, SolrRecord.ORIGINATOR,
                    originator);
            solrQuery.addFilterQuery(originatorCriteria);
            solrQuery.add(PF, SolrRecord.ORIGINATOR + ":" + originator);
        }
        if (dataTypes != null && dataTypes.size() > 0) {
            StringBuilder concatenatedType = new StringBuilder();
            for (DataType dType : dataTypes) {
                concatenatedType.append(dType.toString().replace(" ", "+")).append(" ");
            }
            String dataTypeCriteria = splitAndConcatenateUsingOperator(Operator.OR, SolrRecord.DATA_TYPE,
                    concatenatedType.toString());
            solrQuery.add("fq", dataTypeCriteria);
        }

        if (excludeRestrictedData) {
            solrQuery.addFilterQuery(SolrRecord.ACCESS + ":" + AccessLevel.Public);
        }

        if (fromSolrTimestamp != null || toSolrTimestamp != null) {
            Criteria solrTimestampCriteria = Criteria.where(SolrRecord.TIMESTAMP).between(fromSolrTimestamp,
                    toSolrTimestamp);
            SimpleQuery query = new SimpleQuery(solrTimestampCriteria);
            DefaultQueryParser parser = new DefaultQueryParser();
            String queryString = parser.getQueryString(query);
            solrQuery.addFilterQuery(queryString);
        }
        // Add bbox filter only if user has not specified a custom solr
        // query.
        buildBoundigBoxQuery(solrQuery);

        String synonymsFilter = generateSynonymsQuery();
        if (StringUtils.isNotBlank(synonymsFilter)) {
            solrQuery.addFilterQuery(synonymsFilter);
        }

    }

    solrQuery.setRows(pageSize);
    solrQuery.setStart(page * pageSize);
    solrQuery.addSort(SortClause.desc("score"));

    return solrQuery;
}

From source file:org.openjena.sarq.SolrServer.java

License:Apache License

public Iterator<SolrDocument> search(String queryString) {
    SolrQuery solrQuery = new SolrQuery(queryString);
    solrQuery.setRows(Integer.MAX_VALUE);
    solrQuery.setStart(0);
    solrQuery.setFields("*", "score");
    try {/* ww  w .  ja v a 2 s.com*/
        QueryResponse response = null;
        if (server != null) {
            response = server.query(solrQuery, SolrRequest.METHOD.GET);
        } else {
            response = queryServer.query(solrQuery, SolrRequest.METHOD.GET);
        }
        return response.getResults().iterator();
    } catch (SolrServerException e) {
        throw new SARQException(e.getMessage(), e);
    }
}

From source file:org.openmrs.module.chartsearch.solr.ChartSearchSearcher.java

License:Mozilla Public License

public List<ChartListItem> getDocumentList(Integer patientId, String searchText, Integer start, Integer length,
        List<String> selectedCategories) throws Exception {
    SolrServer solrServer = SolrSingleton.getInstance().getServer();
    SolrQuery query = new SolrQuery();
    List<ChartListItem> list = new ArrayList<ChartListItem>();
    ChartSearchNonFacetFiltering nonFaceting = new ChartSearchNonFacetFiltering();

    searchText = StringUtils.isNotBlank(searchText) ? searchText : "*";
    //check for existence of characters such as ", and : in the search text and submit as it is if so
    if (searchText.contains("\"")) {
        String searchWhole = "text:" + searchText;
        query.setQuery(searchWhole);//w  ww . j  a  v  a  2s.  c o m
    } else if (searchText.contains(":")) {
        query.setQuery(searchText);
    } else if (searchText.equals("*")) {
        query.setQuery(String.format("text:(%s)", searchText));
    } else {
        ChartSearchSyntax searchSyntax = new ChartSearchSyntax(searchText);
        searchText = searchSyntax.getSearchQuery();

        if (StringUtils.isNumeric(searchText)) {
            //this allows 36 returning 36.* for numerics
            searchText = searchText + ".*" + " || " + searchText;
        }
        query.setQuery(String.format("text:(%s)", searchText));
    }

    query.addFilterQuery(String.format("person_id:%d", patientId));
    addSelectedFilterQueriesToQuery(query, selectedCategories);
    query.setStart(start);
    query.setRows(length);
    query.setHighlight(true).setHighlightSnippets(1).setHighlightSimplePre("<b>")
            .setHighlightSimplePost("</b>");
    query.setParam("hl.fl", "text");

    query.remove(FacetParams.FACET_FIELD);
    query.setFacet(true);
    //adding facet field for concept_class
    query.addFacetField("concept_class_name");

    nonFaceting.applyNonFacetingLogicWhileSearching(patientId, searchText, selectedCategories, solrServer,
            query, list);

    return list;
}

From source file:org.openmrs.module.solr.web.DWRChartSearchService.java

License:Open Source License

private SolrDocumentList getDocumentList(Integer patientId, String searchText, Integer start, Integer length)
        throws Exception {
    SolrQuery query = new SolrQuery("*" + searchText + "* AND person_id:" + patientId);
    query.setStart(start);
    query.setRows(length);// www.  ja v  a2  s .  c o  m
    QueryResponse response = SolrEngine.getInstance().getServer().query(query);
    return response.getResults();
}

From source file:org.orcid.persistence.dao.impl.SolrDaoImpl.java

License:Open Source License

@Override
public OrcidSolrResults findByDocumentCriteria(String queryString, Integer start, Integer rows) {
    SolrQuery query = new SolrQuery(queryString).setFields(SCORE, ORCID, PUBLIC_PROFILE);
    if (start != null)
        query.setStart(start);
    if (rows != null)
        query.setRows(rows);//from w  w  w  .  j av  a2s.c o  m
    return querySolr(query);
}