List of usage examples for org.apache.solr.client.solrj SolrQuery addNumericRangeFacet
public SolrQuery addNumericRangeFacet(String field, Number start, Number end, Number gap)
From source file:au.org.ala.biocache.dao.SearchDAOImpl.java
License:Open Source License
/** * Helper method to create SolrQuery object and add facet settings * * @return solrQuery the SolrQuery// w w w. j a va 2 s. c o m */ protected SolrQuery initSolrQuery(SearchRequestParams searchParams, boolean substituteDefaultFacetOrder, Map<String, String[]> extraSolrParams) { SolrQuery solrQuery = new SolrQuery(); solrQuery.setQueryType("standard"); boolean rangeAdded = false; // Facets solrQuery.setFacet(searchParams.getFacet()); if (searchParams.getFacet()) { for (String facet : searchParams.getFacets()) { if (facet.equals("date") || facet.equals("decade")) { String fname = facet.equals("decade") ? OCCURRENCE_YEAR_INDEX_FIELD : "occurrence_" + facet; initDecadeBasedFacet(solrQuery, fname); } else if (facet.equals("uncertainty")) { Map<String, String> rangeMap = rangeBasedFacets.getRangeMap("uncertainty"); for (String range : rangeMap.keySet()) { solrQuery.add("facet.query", range); } } else if (facet.endsWith(RANGE_SUFFIX)) { //this facte need to have it ranges included. if (!rangeAdded) { solrQuery.add("facet.range.other", "before"); solrQuery.add("facet.range.other", "after"); } String field = facet.replaceAll(RANGE_SUFFIX, ""); StatsIndexFieldDTO details = getRangeFieldDetails(field); if (details != null) { solrQuery.addNumericRangeFacet(field, details.getStart(), details.getEnd(), details.getGap()); } } else { solrQuery.addFacetField(facet); if ("".equals(searchParams.getFsort()) && substituteDefaultFacetOrder && FacetThemes.getFacetsMap().containsKey(facet)) { //now check if the sort order is different to supplied String thisSort = FacetThemes.getFacetsMap().get(facet).getSort(); if (!searchParams.getFsort().equalsIgnoreCase(thisSort)) solrQuery.add("f." + facet + ".facet.sort", thisSort); } } } solrQuery.setFacetMinCount(1); solrQuery.setFacetLimit(searchParams.getFlimit()); //include this so that the default fsort is still obeyed. String fsort = "".equals(searchParams.getFsort()) ? "count" : searchParams.getFsort(); solrQuery.setFacetSort(fsort); if (searchParams.getFoffset() > 0) solrQuery.add("facet.offset", Integer.toString(searchParams.getFoffset())); if (StringUtils.isNotEmpty(searchParams.getFprefix())) solrQuery.add("facet.prefix", searchParams.getFprefix()); } solrQuery.setRows(10); solrQuery.setStart(0); if (searchParams.getFl().length() > 0) { solrQuery.setFields(searchParams.getFl()); } //add the extra SOLR params if (extraSolrParams != null) { //automatically include the before and after params... if (!rangeAdded) { solrQuery.add("facet.range.other", "before"); solrQuery.add("facet.range.other", "after"); } for (String key : extraSolrParams.keySet()) { String[] values = extraSolrParams.get(key); solrQuery.add(key, values); } } return solrQuery; }
From source file:com.frank.search.solr.core.DefaultQueryParser.java
License:Apache License
private void appendFieldFacetingByNumberRange(SolrQuery solrQuery, FieldWithNumericRangeParameters field) { solrQuery.addNumericRangeFacet( // field.getName(), // field.getStart(), // field.getEnd(), // field.getGap());// www .j ava 2 s. c o m }
From source file:edu.vt.vbi.patric.portlets.GenomeBrowser.java
License:Apache License
private List<Integer> getFeatureCountHistogram(ResourceRequest request) throws IOException { String accession = request.getParameter("accession"); String annotation = request.getParameter("annotation"); String genomeId = request.getParameter("genomeId"); SolrQuery query = new SolrQuery("accession:" + accession + " AND genome_id:" + genomeId); query.setFilterQueries("annotation:" + annotation + " AND !(feature_type:source)"); query.setRows(0);//from w ww. jav a2 s.c om query.setFacet(true); query.setFacetMinCount(1); query.addNumericRangeFacet("start", 0, 10000000, 10000); List<Integer> results = new ArrayList<>(); DataApiHandler dataApi = new DataApiHandler(request); LOGGER.trace("[{}] {}", SolrCore.FEATURE.getSolrCoreName(), query.toString()); String apiResponse = dataApi.solrQuery(SolrCore.FEATURE, query); Map resp = jsonReader.readValue(apiResponse); Map facetCounts = (Map) resp.get("facet_counts"); Map facetRanges = (Map) facetCounts.get("facet_ranges"); List counts = (List) ((Map) facetRanges.get("start")).get("counts"); for (int i = 0; i < counts.size(); i = i + 2) { int value = (Integer) counts.get(i + 1); results.add(value); } return results; }
From source file:edu.vt.vbi.patric.portlets.TranscriptomicsGeneExp.java
License:Apache License
private JSONObject processSummary(ResourceRequest request) { JSONObject jsonResult = new JSONObject(); String paramFeatureId = request.getParameter("featureId"); String paramSampleId = request.getParameter("sampleId"); String paramKeyword = request.getParameter("keyword"); String paramLogRatio = request.getParameter("log_ratio"); String paramZScore = request.getParameter("zscore"); try {//from www . ja v a 2 s .c om DataApiHandler dataApi = new DataApiHandler(request); //select?q=feature_id:PATRIC.83332.12.NC_000962.CDS.34.1524.fwd&rows=0&facet=true&facet.range.other=before&facet.range.other=after // &facet.range.start=-2&facet.range.end=2&facet.range.gap=0.5&facet.range=z_score&facet.range=log_ratio //select?q=feature_id:PATRIC.83332.12.NC_000962.CDS.34.1524.fwd&rows=0&facet=true&facet.mincount=1&facet.field=strain&facet.field=mutant&facet.field=condition SolrQuery query = new SolrQuery(); if (paramKeyword != null && !paramKeyword.equals("")) { query.setQuery(paramKeyword + " AND feature_id:" + paramFeatureId); } else { query.setQuery("feature_id:" + paramFeatureId); } if (paramSampleId != null && !paramSampleId.equals("")) { String[] pids = paramSampleId.split(","); query.addFilterQuery("pid:(" + StringUtils.join(pids, " OR ") + ")"); } if (paramLogRatio != null && !paramLogRatio.equals("") && !paramLogRatio.equals("0")) { query.addFilterQuery( "log_ratio:[* TO -" + paramLogRatio + "] OR log_ratio:[" + paramLogRatio + " TO *]"); } if (paramZScore != null && !paramZScore.equals("") && !paramZScore.equals("0")) { query.addFilterQuery("z_score:[* TO -" + paramZScore + "] OR z_score:[" + paramZScore + " TO *]"); } query.setRows(dataApi.MAX_ROWS); query.setFacet(true).setFacetMinCount(1).set("json.nl", "map"); query.set("facet.range.other", "before").add("facet.range.other", "after"); query.addNumericRangeFacet("log_ratio", -2, 2, 0.5).addNumericRangeFacet("z_score", -2, 2, 0.5); query.addFacetField("strain").addFacetField("mutant").addFacetField("condition"); LOGGER.debug("[{}] {}", SolrCore.TRANSCRIPTOMICS_GENE.getSolrCoreName(), query.toString()); String apiResponse = dataApi.solrQuery(SolrCore.TRANSCRIPTOMICS_GENE, query); Map resp = jsonReader.readValue(apiResponse); Map respBody = (Map) resp.get("response"); List<Map> sdl = (List<Map>) respBody.get("docs"); // features JSONArray features = new JSONArray(); for (Map doc : sdl) { JSONObject feature = new JSONObject(); feature.put("exp_accession", doc.get("accession")); // feature.put("exp_channels", doc.get("")); feature.put("exp_condition", doc.get("condition")); feature.put("exp_id", doc.get("eid")); feature.put("exp_locustag", doc.get("refseq_locus_tag")); feature.put("exp_mutant", doc.get("mutant")); feature.put("exp_name", doc.get("expname")); feature.put("exp_organism", doc.get("organism")); feature.put("exp_pavg", doc.get("avg_intensity")); feature.put("exp_platform", doc.get("")); // ?? feature.put("exp_pratio", doc.get("log_ratio")); feature.put("exp_samples", doc.get("")); // ?? feature.put("exp_strain", doc.get("")); // ?? feature.put("exp_timepoint", doc.get("timepoint")); feature.put("exp_zscore", doc.get("z_score")); // feature.put("figfam_id", doc.get("")); // ?? feature.put("locus_tag", doc.get("alt_locus_tag")); feature.put("feature_id", doc.get("feature_id")); feature.put("pid", doc.get("pid")); feature.put("pmid", doc.get("pmid")); features.add(feature); } jsonResult.put("features", features); Map facets = (Map) resp.get("facet_counts"); Map facetRanges = (Map) facets.get("facet_ranges"); if (facetRanges.containsKey("log_ratio")) { Map facetLogRatio = (Map) facetRanges.get("log_ratio"); final int before = (Integer) facetLogRatio.get("before"); final int after = (Integer) facetLogRatio.get("after"); Map facetRangeLogRatio = (Map) facetLogRatio.get("counts"); List<JSONObject> list = new ArrayList<>(); for (Map.Entry<String, Integer> entry : (Iterable<Map.Entry>) facetRangeLogRatio.entrySet()) { JSONObject json = new JSONObject(); json.put("category", entry.getKey()); json.put("count", entry.getValue()); list.add(json); } boolean hasMinBucket = false; boolean hasMaxBucket = false; for (JSONObject entry : list) { if (entry.get("category").equals("-2.0")) { entry.put("count", ((Integer) entry.get("count") + before)); hasMinBucket = true; } else if (entry.get("category").equals("2.0")) { entry.put("count", ((Integer) entry.get("count") + after)); hasMaxBucket = true; } } if (!hasMinBucket) { JSONObject json = new JSONObject(); json.put("category", "-2.0"); json.put("count", before); list.add(json); } if (!hasMaxBucket) { JSONObject json = new JSONObject(); json.put("category", "2.0"); json.put("count", after); list.add(json); } jsonResult.put("log_ratio", list); } if (facetRanges.containsKey("z_score")) { Map facetZscore = (Map) facetRanges.get("z_score"); final int before = (Integer) facetZscore.get("before"); final int after = (Integer) facetZscore.get("after"); Map facetRangeZscore = (Map) facetZscore.get("counts"); List<JSONObject> list = new ArrayList<>(); for (Map.Entry<String, Integer> entry : (Iterable<Map.Entry>) facetRangeZscore.entrySet()) { JSONObject json = new JSONObject(); json.put("category", entry.getKey()); json.put("count", entry.getValue()); list.add(json); } boolean hasMinBucket = false; boolean hasMaxBucket = false; for (JSONObject entry : list) { if (entry.get("category").equals("-2.0")) { entry.put("count", ((Integer) entry.get("count") + before)); hasMinBucket = true; } else if (entry.get("category").equals("2.0")) { entry.put("count", ((Integer) entry.get("count") + after)); hasMaxBucket = true; } } if (!hasMinBucket) { JSONObject json = new JSONObject(); json.put("category", "-2.0"); json.put("count", before); list.add(json); } if (!hasMaxBucket) { JSONObject json = new JSONObject(); json.put("category", "2.0"); json.put("count", after); list.add(json); } jsonResult.put("z_score", list); } Map facetFields = (Map) facets.get("facet_fields"); // strain if (facetFields.containsKey("strain")) { Map facetStrain = (Map) facetFields.get("strain"); List<JSONObject> list = new ArrayList<>(); for (Map.Entry<String, Integer> entry : (Iterable<Map.Entry>) facetStrain.entrySet()) { JSONObject json = new JSONObject(); json.put("category", entry.getKey()); json.put("count", entry.getValue()); list.add(json); } jsonResult.put("strain", list); } // mutant if (facetFields.containsKey("mutant")) { Map facetMutant = (Map) facetFields.get("mutant"); List<JSONObject> list = new ArrayList<>(); for (Map.Entry<String, Integer> entry : (Iterable<Map.Entry>) facetMutant.entrySet()) { JSONObject json = new JSONObject(); json.put("category", entry.getKey()); json.put("count", entry.getValue()); list.add(json); } jsonResult.put("mutant", list); } // condition if (facetFields.containsKey("condition")) { Map facetCondition = (Map) facetFields.get("condition"); List<JSONObject> list = new ArrayList<>(); for (Map.Entry<String, Integer> entry : (Iterable<Map.Entry>) facetCondition.entrySet()) { JSONObject json = new JSONObject(); json.put("category", entry.getKey()); json.put("count", entry.getValue()); list.add(json); } jsonResult.put("condition", list); } } catch (IOException e) { LOGGER.error(e.getMessage(), e); } return jsonResult; }
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 va 2 s . c o 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; }