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

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

Introduction

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

Prototype

public SolrQuery setFields(String... fields) 

Source Link

Usage

From source file:org.mousephenotype.cda.solr.service.SolrIndex.java

License:Apache License

public QueryResponse getBatchQueryJson(String idlist, String fllist, String dataTypeName)
        throws SolrServerException, IOException {

    SolrClient server = null;//from   w w  w  .  j a v a 2  s  .  c om

    Map<String, String> coreIdQMap = coreIdQMap();
    String qField = coreIdQMap.get(dataTypeName);

    if (dataTypeName.equals("disease")) {
        server = getSolrServer("disease"); // points to new phenodigm
    }
    if (dataTypeName.equals("hp")) {
        server = getSolrServer("mp");
    } else if (dataTypeName.equals("ensembl") || dataTypeName.contains("marker_symbol")) {
        server = getSolrServer("gene");
    } else {
        server = getSolrServer(dataTypeName);
    }

    String[] idList = StringUtils.split(idlist, ",");
    String querystr = null;

    // search keyword by mouse symbol: check 2 fields in gene core (marker_symbol_lowercase, marker_synonym_lowercase)
    if (dataTypeName.equals("mouse_marker_symbol")) {
        querystr = "marker_symbol_lowercase:(" + StringUtils.join(idList, " OR ") + ")"
                + " OR marker_synonym_lowercase:(" + StringUtils.join(idList, " OR ") + ")";
    }
    // search keyword by human symbol: check 2 fields in gene core (human_gene_symbol_lowercase, human_symbol_synonym_lowercase)
    else if (dataTypeName.equals("human_marker_symbol")) {
        querystr = "human_gene_symbol_lowercase:(" + StringUtils.join(idList, " OR ") + ")"
                + " OR human_symbol_synonym_lowercase:(" + StringUtils.join(idList, " OR ") + ")";
    } else {
        querystr = qField + ":(" + StringUtils.join(idList, " OR ") + ")";
    }

    //System.out.println("BatchQuery: " + querystr);
    SolrQuery query = new SolrQuery();
    query.setQuery(querystr);

    if (dataTypeName.equals("disease")) { // points to phenodigm
        //query.setFilterQueries("type:hp_mp");
        query.setFilterQueries("type:disease_gene_summary");
    }

    query.setStart(0);

    query.setRows(0);

    QueryResponse response = server.query(query, METHOD.POST);
    long rowCount = response.getResults().getNumFound(); // so that we know how many rows is returned

    //      System.out.println("row count: "+rowCount);
    //query.setRows(idList.length);  // default
    query.setRows((int) rowCount);

    // retrieves wanted fields
    query.setFields(fllist);
    System.out.println("BATCHQUERY " + dataTypeName + " : " + query);

    QueryResponse response2 = server.query(query, METHOD.POST);
    //System.out.println("response: "+ response2);

    return response2;
}

From source file:org.ofbiz.solr.SolrProductSearch.java

License:Apache License

/**
 * Runs a query on the Solr Search Engine and returns the results.
 * <p>/*from   w w  w .  j a  v  a2  s  . c  o  m*/
 * This function only returns an object of type QueryResponse, so it is probably not a good idea to call it directly from within the
 * groovy files (As a decent example on how to use it, however, use keywordSearch instead).
 */
public static Map<String, Object> runSolrQuery(DispatchContext dctx, Map<String, Object> context) {
    // get Connection
    HttpSolrServer server = null;
    Map<String, Object> result;

    Integer viewIndex = (Integer) context.get("viewIndex");
    Integer viewSize = (Integer) context.get("viewSize");
    if (viewIndex < 1) {
        viewIndex = 1;
    }
    try {
        server = new HttpSolrServer(SolrUtil.solrUrl);
        // create Query Object
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery((String) context.get("query"));
        // solrQuery.setQueryType("dismax");
        boolean faceted = (Boolean) context.get("facet");
        if (faceted) {
            solrQuery.setFacet(faceted);
            //solrQuery.addFacetField("manu");
            solrQuery.addFacetField("features");
            solrQuery.addFacetField("cat");
            solrQuery.setFacetMinCount(1);
            solrQuery.setFacetLimit(8);

            solrQuery.addFacetQuery("listPrice:[0 TO 50]");
            solrQuery.addFacetQuery("listPrice:[50 TO 100]");
            solrQuery.addFacetQuery("listPrice:[100 TO 250]");
            solrQuery.addFacetQuery("listPrice:[250 TO 500]");
            solrQuery.addFacetQuery("listPrice:[500 TO 1000]");
            solrQuery.addFacetQuery("listPrice:[1000 TO 2500]");
            solrQuery.addFacetQuery("listPrice:[2500 TO 5000]");
            solrQuery.addFacetQuery("listPrice:[5000 TO 10000]");
            solrQuery.addFacetQuery("listPrice:[10000 TO 50000]");
            solrQuery.addFacetQuery("listPrice:[50000 TO *]");
        }

        boolean spellCheck = (Boolean) context.get("spellcheck");
        if (spellCheck) {
            solrQuery.setParam("spellcheck", spellCheck);
        }

        boolean highLight = (Boolean) context.get("highlight");
        if (highLight) {
            solrQuery.setHighlight(highLight);
            solrQuery.setHighlightSimplePre("<span class=\"highlight\">");
            solrQuery.addHighlightField("description");
            solrQuery.setHighlightSimplePost("</span>");
            solrQuery.setHighlightSnippets(2);
        }

        // Set additional Parameter
        // SolrQuery.ORDER order = SolrQuery.ORDER.desc;

        if (viewIndex != null && viewIndex > 0) {
            solrQuery.setStart((viewIndex - 1) * viewSize);
        }
        if (viewSize != null && viewSize > 0) {
            solrQuery.setRows(viewSize);
        }

        // if ((List) context.get("queryFilter") != null && ((ArrayList<SolrDocument>) context.get("queryFilter")).size() > 0) {
        // List filter = (List) context.get("queryFilter");
        // String[] tn = new String[filter.size()];
        // Iterator it = filter.iterator();
        // for (int i = 0; i < filter.size(); i++) {
        // tn[i] = (String) filter.get(i);
        // }
        // solrQuery.setFilterQueries(tn);
        // }
        String queryFilter = (String) context.get("queryFilter");
        if (UtilValidate.isNotEmpty(queryFilter))
            solrQuery.setFilterQueries(queryFilter.split(" "));
        if ((String) context.get("returnFields") != null) {
            solrQuery.setFields((String) context.get("returnFields"));
        }

        // if((Boolean)context.get("sortByReverse"))order.reverse();
        if ((String) context.get("sortBy") != null && ((String) context.get("sortBy")).length() > 0) {
            SolrQuery.ORDER order;
            if (!((Boolean) context.get("sortByReverse")))
                order = SolrQuery.ORDER.asc;
            else
                order = SolrQuery.ORDER.desc;
            solrQuery.setSort(((String) context.get("sortBy")).replaceFirst("-", ""), order);
        }

        if ((String) context.get("facetQuery") != null) {
            solrQuery.addFacetQuery((String) context.get("facetQuery"));
        }

        QueryResponse rsp = server.query(solrQuery);
        result = ServiceUtil.returnSuccess();
        result.put("queryResult", rsp);
    } catch (Exception e) {
        Debug.logError(e, e.getMessage(), module);
        result = ServiceUtil.returnError(e.toString());
    }
    return result;
}

From source file:org.ofbiz.solr.SolrUtil.java

License:Apache License

public static Map<String, Object> categoriesAvailable(String catalogId, String categoryId, String productId,
        String facetPrefix, boolean displayproducts, int viewIndex, int viewSize) {
    // create the data model
    Map<String, Object> result = FastMap.newInstance();
    HttpSolrServer server = null;//w  w  w  .j a  v  a2s  .c o m
    QueryResponse returnMap = new QueryResponse();
    try {
        // do the basic query
        server = new HttpSolrServer(solrUrl);
        // create Query Object
        String query = "inStock[1 TO *]";
        if (categoryId != null)
            query += " +cat:" + categoryId;
        else if (productId != null)
            query += " +productId:" + productId;
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery(query);

        if (catalogId != null)
            solrQuery.setFilterQueries("catalog:" + catalogId);
        if (displayproducts) {
            if (viewSize > -1) {
                solrQuery.setRows(viewSize);
            } else
                solrQuery.setRows(50000);
            if (viewIndex > -1) {
                solrQuery.setStart(viewIndex);
            }
        } else {
            solrQuery.setFields("cat");
            solrQuery.setRows(0);
        }

        if (UtilValidate.isNotEmpty(facetPrefix)) {
            solrQuery.setFacetPrefix(facetPrefix);
        }

        solrQuery.setFacetMinCount(0);
        solrQuery.setFacet(true);
        solrQuery.addFacetField("cat");
        solrQuery.setFacetLimit(-1);
        Debug.logVerbose("solr: solrQuery: " + solrQuery, module);
        returnMap = server.query(solrQuery, METHOD.POST);
        result.put("rows", returnMap);
        result.put("numFound", returnMap.getResults().getNumFound());
    } catch (Exception e) {
        Debug.logError(e.getMessage(), module);
    }
    return result;
}

From source file:org.opencastproject.archive.opencast.solr.SolrRequester.java

License:Educational Community License

/** Converts the query object into a solr query. */
// todo rewrite using solr DSL
private SolrQuery createQuery(OpencastQuery q) throws SolrServerException {
    final StringBuilder sb = new StringBuilder();
    append(sb, Schema.DC_ID, q.getMediaPackageId());

    // full text query with boost
    for (String solrTextRequest : q.getFullText()) {
        if (sb.length() > 0)
            sb.append(" AND ");
        sb.append("(").append(createBoostedFullTextQuery(solrTextRequest)).append(")");
    }/*from  w w w. j  a va  2 s .c o m*/

    appendFuzzy(sb, Schema.DC_CREATOR_SUM, q.getDcCreator());
    appendFuzzy(sb, Schema.DC_CONTRIBUTOR_SUM, q.getDcContributor());
    append(sb, Schema.DC_LANGUAGE, q.getDcLanguage());
    appendFuzzy(sb, Schema.DC_LICENSE_SUM, q.getDcLicense());
    appendFuzzy(sb, Schema.DC_TITLE_SUM, q.getDcTitle());
    appendFuzzy(sb, Schema.S_DC_TITLE_SUM, q.getSeriesTitle());
    append(sb, Schema.DC_IS_PART_OF, q.getSeriesId());
    append(sb, Schema.OC_ORGANIZATION, q.getOrganizationId());

    if (q.getDeletedAfter().isSome() || q.getDeletedBefore().isSome()) {
        if (sb.length() > 0)
            sb.append(" AND ");
        sb.append(Schema.OC_DELETED).append(":true AND ").append(Schema.OC_TIMESTAMP).append(":")
                .append(SolrUtils.serializeDateRange(q.getDeletedAfter(), q.getDeletedBefore()));
    }
    if (!q.isIncludeDeleted()) {
        if (sb.length() > 0)
            sb.append(" AND ");
        sb.append(Schema.OC_DELETED + ":false");
    }

    if (q.isOnlyLastVersion()) {
        if (sb.length() > 0)
            sb.append(" AND ");
        sb.append(Schema.OC_LATEST_VERSION + ":true");
    }

    if (q.getArchivedAfter().isSome() || q.getArchivedBefore().isSome()) {
        if (sb.length() > 0)
            sb.append(" AND ");
        sb.append(Schema.OC_TIMESTAMP).append(":")
                .append(SolrUtils.serializeDateRange(q.getArchivedAfter(), q.getArchivedBefore()));
    }

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

    final SolrQuery solr = new SolrQuery(sb.toString());
    // limit & offset
    solr.setRows(q.getLimit().getOrElse(Integer.MAX_VALUE));
    solr.setStart(q.getOffset().getOrElse(0));

    // ordering
    for (OpencastQuery.Order o : q.getOrder()) {
        final SolrQuery.ORDER order = q.isOrderAscending() ? SolrQuery.ORDER.asc : SolrQuery.ORDER.desc;
        solr.addSortField(getSortField(o), order);
    }

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

From source file:org.opencastproject.episode.impl.solr.SolrRequester.java

License:Educational Community License

/**
 * Converts the query object into a solr query and returns the results.
 * //from w ww .  j a  v a2s.c o  m
 * @param q
 *          the query
 * @return the search results
 */
private SolrQuery createQuery(EpisodeQuery q) throws SolrServerException {
    final StringBuilder sb = new StringBuilder();
    for (String solrQueryRequest : q.getQuery())
        sb.append(solrQueryRequest);
    append(sb, Schema.DC_ID, q.getId());

    // full text query with boost
    for (String solrTextRequest : q.getText()) {
        if (sb.length() > 0)
            sb.append(" AND ");
        sb.append("(").append(createBoostedFullTextQuery(solrTextRequest)).append(")");
    }

    appendFuzzy(sb, Schema.DC_CREATOR_SUM, q.getCreator());
    appendFuzzy(sb, Schema.DC_CONTRIBUTOR_SUM, q.getContributor());
    append(sb, Schema.DC_LANGUAGE, q.getLanguage());
    appendFuzzy(sb, Schema.DC_LICENSE_SUM, q.getLicense());
    appendFuzzy(sb, Schema.DC_TITLE_SUM, q.getTitle());
    appendFuzzy(sb, Schema.S_DC_TITLE_SUM, q.getSeriesTitle());
    append(sb, Schema.DC_IS_PART_OF, q.getSeriesId());
    append(sb, Schema.OC_ORGANIZATION, q.getOrganization());

    if (q.getElementTags().size() > 0) {
        if (sb.length() > 0)
            sb.append(" AND ");
        StringBuilder tagBuilder = new StringBuilder();
        for (String tag : mlist(q.getElementTags()).bind(Options.<String>asList().o(SolrUtils.clean))) {
            if (tagBuilder.length() == 0) {
                tagBuilder.append("(");
            } else {
                tagBuilder.append(" OR ");
            }
            tagBuilder.append(Schema.OC_ELEMENTTAGS);
            tagBuilder.append(":");
            tagBuilder.append(SolrUtils.clean(tag));
        }
        if (tagBuilder.length() > 0) {
            tagBuilder.append(") ");
            sb.append(tagBuilder);
        }
    }
    if (q.getElementFlavors().size() > 0) {
        if (sb.length() > 0)
            sb.append(" AND ");
        StringBuilder flavorBuilder = new StringBuilder();
        for (String flavor : mlist(q.getElementFlavors()).bind(Options.<String>asList().o(SolrUtils.clean)
                .o(Strings.<MediaPackageElementFlavor>asStringNull()))) {
            if (flavorBuilder.length() == 0) {
                flavorBuilder.append("(");
            } else {
                flavorBuilder.append(" OR ");
            }
            flavorBuilder.append(Schema.OC_ELEMENTFLAVORS);
            flavorBuilder.append(":");
            flavorBuilder.append(ClientUtils.escapeQueryChars(flavor));
        }
        if (flavorBuilder.length() > 0) {
            flavorBuilder.append(") ");
            sb.append(flavorBuilder);
        }
    }
    for (Date deleted : q.getDeletedDate()) {
        if (sb.length() > 0)
            sb.append(" AND ");
        sb.append(Schema.OC_DELETED).append(":")
                .append(SolrUtils.serializeDateRange(option(deleted), Option.<Date>none()));
    }
    if (!q.getIncludeDeleted()) {
        if (sb.length() > 0)
            sb.append(" AND ");
        sb.append("-" + Schema.OC_DELETED + ":[* TO *]");
    }

    if (q.getOnlyLastVersion()) {
        if (sb.length() > 0)
            sb.append(" AND ");
        sb.append(Schema.OC_LATEST_VERSION + ":true");
    }

    // only episodes
    if (sb.length() > 0)
        sb.append(" AND ");
    sb.append(Schema.OC_MEDIATYPE + ":" + SearchResultItem.SearchResultItemType.AudioVisual);

    // only add date range if at least on criteria is set
    if (q.getAddedBefore().isSome() || q.getAddedAfter().isSome()) {
        if (sb.length() > 0)
            sb.append(" AND ");
        sb.append(Schema.OC_TIMESTAMP + ":[" + q.getAddedAfter().map(SolrUtils.serializeDate).getOrElse("*")
                + " TO " + q.getAddedBefore().map(SolrUtils.serializeDate).getOrElse("*") + "]");
    }

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

    final SolrQuery solr = new SolrQuery(sb.toString());
    // limit & offset
    solr.setRows(q.getLimit());
    solr.setStart(q.getOffset());

    // sorting
    final SolrQuery.ORDER order = q.getSortAscending() ? SolrQuery.ORDER.asc : SolrQuery.ORDER.desc;
    solr.addSortField(getSortField(q.getSort()), order);

    solr.setFields("* score");

    return solr;
}

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.
 * /*from  ww w. ja  v  a  2 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.opencb.opencga.storage.core.search.solr.SolrQueryParser.java

License:Apache License

/**
 * Create a SolrQuery object from Query and QueryOptions.
 *
 * @param query         Query/*w w  w  .jav a 2 s  .  c  om*/
 * @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.AbstractSearchServer.java

License:Apache License

@Override
public SearchResponse termVector(String query, Locale locale, String... fields) throws SearchServerException {
    SolrQuery solrQuery = new SolrQuery(query);
    solrQuery.setRequestHandler("/tvrh");
    solrQuery.setFields(fields);
    solrQuery.setParam("tv.fl", "categoryName");

    try {//from ww  w  . j av  a 2 s . c om
        QueryResponse queryResponse = getCatalogSolrServer(locale).query(solrQuery);
        return new SearchResponse(solrQuery, queryResponse, null, null, null, null, true);
    } catch (SolrServerException ex) {
        throw create(TERMS_EXCEPTION, ex);
    }
}

From source file:org.opencommercesearch.AbstractSearchServerIntegrationTest.java

License:Apache License

@SearchTest(newInstance = true, productData = "/product_catalog/sandal.xml")
public void testOnSale(SearchServer server) throws SearchServerException {

    //scenario where we want to display only the top level categories for products that are on sale.
    BrowseOptions options = new BrowseOptions(true, false, true, false, 100, null, null, null, "mycatalog", -1,
            null);/*from  w  w w  .j ava2  s .  c  o m*/
    SolrQuery query = new SolrQuery();
    SearchResponse response = server.browse(options, query, site, Locale.US, null);

    assertNull(response.getQueryResponse().getGroupResponse());
    validateFilterByTopLevelCat(response, options.isFetchProducts());
    validateCategoryPathNotInFacets(response);

    //scenario where we want to show results for products that are on sale. not only display the top level categories
    options = new BrowseOptions(false, true, true, false, 100, null, null, null, "mycatalog", -1, null);
    query = new SolrQuery();
    query.setFields("id");
    query.setRows(ROWS);
    response = server.browse(options, query, site, Locale.US, null);

    validateCategoryPathNotInFacets(response);
    assertEquals(1, response.getQueryResponse().getGroupResponse().getValues().size());
    assertEquals("TNF3137-FUPINYL-S1", getFirstResponseProperty(response, "id"));
    assertNull(response.getCategoryGraph());

}

From source file:org.opencommercesearch.AbstractSearchServerIntegrationTest.java

License:Apache License

@SearchTest(newInstance = true, productData = "/product_catalog/sandal.xml")
public void testRuleBasedCategory(SearchServer server) throws SearchServerException {

    AbstractSearchServer abstractServer = (AbstractSearchServer) server;
    abstractServer.setRulesBuilder(rulesBuilder);

    //scenario where we want to display a rule based category that shows product with a discount > 15%
    BrowseOptions options = new BrowseOptions(false, false, false, true, 100, null, "cat3000003", null,
            "mycatalog", -1, null);
    when(rulesBuilder.buildRulesFilter(options.getCategoryId(), Locale.US))
            .thenReturn("(categoryId:ruleCategory) OR (discountPercentUS:[15 TO 100])");
    SolrQuery query = new SolrQuery();
    query.setRows(ROWS);/*from   www.  j a  v  a 2  s  . com*/
    query.setFields("id");
    SearchResponse response = server.browse(options, query, site, Locale.US, null);

    assertEquals(1, response.getQueryResponse().getGroupResponse().getValues().size());
    assertEquals("TNF3137-FUPINYL-S1", response.getQueryResponse().getGroupResponse().getValues().get(0)
            .getValues().get(0).getResult().get(0).getFieldValue("id"));

}