List of usage examples for org.apache.solr.client.solrj SolrQuery setFields
public SolrQuery setFields(String... fields)
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")); }