/** * Return a Solr variant iterator to retrieve VariantSearchModel objects from a Solr core/collection * according a given query. * * @param collection Collection name * @param query Query * @param queryOptions Query options * @return Solr VariantSearch iterator * @throws VariantSearchException VariantSearchException */ public VariantSearchSolrIterator nativeIterator(String collection, Query query, QueryOptions queryOptions) throws VariantSearchException { try { SolrQuery solrQuery = solrQueryParser.parse(query, queryOptions); return new VariantSearchSolrIterator(solrManager.getSolrClient(), collection, solrQuery); } catch (SolrServerException e) { throw new VariantSearchException("Error getting variant iterator (native)", e); } }
facetQuery = parseFacet(facetQuery); includes = solrIncludeFields(queryOptions.getAsStringList(QueryOptions.INCLUDE)); } else { if (queryOptions.containsKey(QueryOptions.EXCLUDE)) { includes = getSolrIncludeFromExclude(queryOptions.getAsStringList(QueryOptions.EXCLUDE)); } else { includes = getSolrIncludeFromExclude(Collections.emptyList()); includes = includeFieldsWithMandatory(includes); solrQuery.setFields(includes); List<String> solrFieldsToInclude = getSolrFieldsFromVariantIncludes(query, queryOptions); for (String solrField : solrFieldsToInclude) { solrQuery.addField(solrField); solrQuery.addSort(queryOptions.getString(QueryOptions.SORT), getSortOrder(queryOptions)); classifyIds(VariantQueryParam.ANNOT_XREF.key(), query, xrefs, genes); classifyIds(VariantQueryParam.ID.key(), query, xrefs, genes); classifyIds(VariantQueryParam.GENE.key(), query, xrefs, genes); classifyIds(VariantQueryParam.ANNOT_CLINVAR.key(), query, xrefs, genes); classifyIds(VariantQueryParam.ANNOT_COSMIC.key(), query, xrefs, genes); String or = buildXrefOrRegionAndConsequenceType(xrefs, regions, consequenceTypes, ctBoolOp); if (xrefs.isEmpty() && regions.isEmpty()) { filterList.add(buildGeneAndConsequenceType(genes, consequenceTypes));
/** * Build the condition: (xrefs OR regions) AND cts. * * @param xrefs List of xrefs * @param regions List of regions * @param cts List of consequence types * @return OR/AND condition string */ private String buildXrefOrRegionAndConsequenceType(List<String> xrefs, List<Region> regions, List<String> cts, String ctBoolOp) { String orCts = buildConsequenceTypeOrAnd(cts, ctBoolOp); if (xrefs.isEmpty() && regions.isEmpty()) { // consequences type but no xrefs, no genes, no regions // we must make an OR with all consequences types and add it to the "AND" filter list return orCts; } else { String orXrefs = buildXrefOrGeneOrRegion(xrefs, null, regions); return "(" + orXrefs + ") AND (" + orCts + ")"; } }
public VariantSearchManager(StudyConfigurationManager studyConfigurationManager, StorageConfiguration storageConfiguration) { this.storageConfiguration = storageConfiguration; this.solrQueryParser = new SolrQueryParser(studyConfigurationManager); this.cellBaseClient = new CellBaseClient(storageConfiguration.getCellbase().toClientConfiguration()); this.variantSearchToVariantConverter = new VariantSearchToVariantConverter(); this.solrManager = new SolrManager(storageConfiguration.getSearch().getHosts(), storageConfiguration.getSearch().getMode(), storageConfiguration.getSearch().getTimeout()); // Set internal insert batch size from configuration and default value insertBatchSize = storageConfiguration.getSearch().getInsertBatchSize() > 0 ? storageConfiguration.getSearch().getInsertBatchSize() : DEFAULT_INSERT_BATCH_SIZE; logger = LoggerFactory.getLogger(VariantSearchManager.class); }
for (int i = startBuckets.size() - 1; i >= 0; i--) { int pos = (int) startBuckets.get(i).get("val"); if (pos > SolrQueryParser.getChromosomeMap().get(chrom)) { startBuckets.remove(i); } else {
@Before public void init() throws StorageEngineException { scm = new StudyConfigurationManager(new DummyProjectMetadataAdaptor(), new DummyStudyConfigurationAdaptor(), new DummyVariantFileMetadataDBAdaptor()); scm.createStudy(studyName); solrQueryParser = new SolrQueryParser(scm); }
/** * * @param collection Collection name * @param query Query * @return Number of results * @throws VariantSearchException VariantSearchException * @throws IOException IOException */ public long count(String collection, Query query) throws VariantSearchException, IOException { SolrQuery solrQuery = solrQueryParser.parse(query, QueryOptions.empty()); SolrCollection solrCollection = solrManager.getCollection(collection); try { return solrCollection.count(solrQuery).getResult().get(0); } catch (SolrServerException e) { throw new VariantSearchException("Error executing count for a given query", e); } }
SolrQuery solrQuery = solrQueryParser.parse(query, queryOptions); Postprocessing postprocessing = null; String jsonFacet = solrQuery.get("json.facet");
/** * Return a Solr variant iterator to retrieve Variant objects from a Solr core/collection * according a given query. * * @param collection Collection name * @param query Query * @param queryOptions Query options * @return Solr VariantSearch iterator * @throws VariantSearchException VariantSearchException * @throws IOException IOException */ public VariantSolrIterator iterator(String collection, Query query, QueryOptions queryOptions) throws VariantSearchException, IOException { try { SolrQuery solrQuery = solrQueryParser.parse(query, queryOptions); return new VariantSolrIterator(solrManager.getSolrClient(), collection, solrQuery, new VariantSearchToVariantConverter(VariantField.getIncludeFields(queryOptions))); } catch (SolrServerException e) { throw new VariantSearchException("Error getting variant iterator", e); } }
@Test public void parseConsequenceTypeSOTerm() { QueryOptions queryOptions = new QueryOptions(); Query query = new Query(); query.put(ANNOT_CONSEQUENCE_TYPE.key(), "missense_variant"); SolrQuery solrQuery = solrQueryParser.parse(query, queryOptions); display(query, queryOptions, solrQuery); assertEquals(flDefault1 + "&q=*:*&fq=soAcc:\"1583\"", solrQuery.toString()); }
@Test public void parseExactSift() { QueryOptions queryOptions = new QueryOptions(); Query query = new Query(); query.put(ANNOT_PROTEIN_SUBSTITUTION.key(), "sift==-0.3"); SolrQuery solrQuery = solrQueryParser.parse(query, queryOptions); display(query, queryOptions, solrQuery); assertEquals(flDefault1 + "&q=*:*&fq=sift:\\-0.3", solrQuery.toString()); }
@Test public void parseExactSift2() { QueryOptions queryOptions = new QueryOptions(); Query query = new Query(); query.put(ANNOT_PROTEIN_SUBSTITUTION.key(), "sift=-0.3"); SolrQuery solrQuery = solrQueryParser.parse(query, queryOptions); display(query, queryOptions, solrQuery); assertEquals(flDefault1 + "&q=*:*&fq=sift:\\-0.3", solrQuery.toString()); }
@Test public void parseRegionChromosomeStartEnd() { QueryOptions queryOptions = new QueryOptions(); Query query = new Query(); query.put(REGION.key(), "1:66381-76381,1:98766-117987"); SolrQuery solrQuery = solrQueryParser.parse(query, queryOptions); display(query, queryOptions, solrQuery); assertEquals(flDefault1 + "&q=*:*&fq=(chromosome:\"1\"+AND+start:[66381+TO+*]+AND+end:[*+TO+76381])+OR+(chromosome:\"1\"+AND+start:[98766+TO+*]+AND+end:[*+TO+117987])", solrQuery.toString()); }
@Test public void parseXref() { QueryOptions queryOptions = new QueryOptions(); Query query = new Query(); query.put(ANNOT_XREF.key(), "rs574335987"); SolrQuery solrQuery = solrQueryParser.parse(query, queryOptions); display(query, queryOptions, solrQuery); assertEquals(flDefault1 + "&q=*:*&fq=xrefs:\"rs574335987\"", solrQuery.toString()); }
@Test public void parseSiftScore() { QueryOptions queryOptions = new QueryOptions(); Query query = new Query(); query.put(ANNOT_PROTEIN_SUBSTITUTION.key(), "sift==tolerated,polyphen==bening"); SolrQuery solrQuery = solrQueryParser.parse(query, queryOptions); display(query, queryOptions, solrQuery); assertEquals(flDefault1 + "&q=*:*&fq=(siftDesc:\"tolerated\"+OR+polyphenDesc:\"bening\")", solrQuery.toString()); }
@Test public void parsePopMafScore() { QueryOptions queryOptions = new QueryOptions(); Query query = new Query(); query.put(ANNOT_POPULATION_MINOR_ALLELE_FREQUENCY.key(), "1kG_phase3:YRI<0.01"); SolrQuery solrQuery = solrQueryParser.parse(query, queryOptions); display(query, queryOptions, solrQuery); assertEquals(flDefault1 + "&q=*:*&fq=(popFreq__1kG_phase3__YRI:[0+TO+0.01}+OR+(*+-popFreq__1kG_phase3__YRI:*))", solrQuery.toString()); }
@Test public void parseClinVars() { QueryOptions queryOptions = new QueryOptions(); Query query = new Query(); query.put(ANNOT_CLINVAR.key(), "RCV000010071"); SolrQuery solrQuery = solrQueryParser.parse(query, queryOptions); display(query, queryOptions, solrQuery); assertEquals(flDefault1 + "&q=*:*&fq=xrefs:\"RCV000010071\"", solrQuery.toString()); }
@Test public void parseConsequenceTypeSOAcc() { QueryOptions queryOptions = new QueryOptions(); Query query = new Query(); query.put(ANNOT_CONSEQUENCE_TYPE.key(), "SO:0001792,SO:0001619"); SolrQuery solrQuery = solrQueryParser.parse(query, queryOptions); display(query, queryOptions, solrQuery); assertEquals(flDefault1 + "&q=*:*&fq=soAcc:\"1792\"+OR+soAcc:\"1619\"", solrQuery.toString()); }
@Test public void parsePopMafScoreMissing() { QueryOptions queryOptions = new QueryOptions(); Query query = new Query(); // (* -popFreq__1kG_phase3__YRI:*) OR popFreq_1kG_phase3__YRI:[0.01 TO *] query.put(ANNOT_POPULATION_MINOR_ALLELE_FREQUENCY.key(), "1kG_phase3:YRI<<0.01"); SolrQuery solrQuery = solrQueryParser.parse(query, queryOptions); display(query, queryOptions, solrQuery); assertEquals(flDefault1 + "&q=*:*&fq=(popFreq__1kG_phase3__YRI:[0+TO+0.01}+OR+(*+-popFreq__1kG_phase3__YRI:*))", solrQuery.toString()); }
@Test public void parseNoPopMaf() { QueryOptions queryOptions = new QueryOptions(); Query query = new Query(); query.put(ANNOT_POPULATION_MINOR_ALLELE_FREQUENCY.key(), "1kG_phase3:GWD!=0.061946902"); SolrQuery solrQuery = solrQueryParser.parse(query, queryOptions); display(query, queryOptions, solrQuery); assertEquals(flDefault1 + "&q=*:*&fq=-popFreq__1kG_phase3__GWD:0.061946902", solrQuery.toString()); }