protected Iterator<String> variantIdIteratorFromSearch(Query query, int limit, int skip, AtomicLong numTotalResults)
throws StorageEngineException {
Iterator<String> variantsIterator;
QueryOptions queryOptions = new QueryOptions()
.append(QueryOptions.LIMIT, limit)
.append(QueryOptions.SKIP, skip)
.append(QueryOptions.INCLUDE, VariantField.ID.fieldName());
try {
if (limit < 10000) {
VariantQueryResult<VariantSearchModel> nativeResult = getVariantSearchManager().nativeQuery(dbName, query, queryOptions);
if (numTotalResults != null) {
numTotalResults.set(nativeResult.getNumTotalResults());
}
variantsIterator = nativeResult.getResult()
.stream()
.map(VariantSearchModel::getId)
.iterator();
} else {
VariantSearchSolrIterator nativeIterator = getVariantSearchManager().nativeIterator(dbName, query, queryOptions);
if (numTotalResults != null) {
numTotalResults.set(nativeIterator.getNumFound());
}
variantsIterator = Iterators.transform(nativeIterator, VariantSearchModel::getId);
}
} catch (VariantSearchException | IOException e) {
throw new VariantQueryException("Error querying " + VariantSearchManager.SEARCH_ENGINE_ID, e);
}
return variantsIterator;
}