private static SearchQueryBuilder basicB(final BenchmarkSchemaInfo basicSchema) { final QuerySegmentSpec intervalSpec = new MultipleIntervalSegmentSpec(Collections.singletonList(basicSchema.getDataInterval())); final List<String> dimUniformFilterVals = new ArrayList<>(); int resultNum = (int) (100000 * 0.1); int step = 100000 / resultNum; for (int i = 1; i < 100001 && dimUniformFilterVals.size() < resultNum; i += step) { dimUniformFilterVals.add(String.valueOf(i)); } List<String> dimHyperUniqueFilterVals = new ArrayList<>(); resultNum = (int) (100000 * 0.1); step = 100000 / resultNum; for (int i = 0; i < 100001 && dimHyperUniqueFilterVals.size() < resultNum; i += step) { dimHyperUniqueFilterVals.add(String.valueOf(i)); } final List<DimFilter> dimFilters = new ArrayList<>(); dimFilters.add(new InDimFilter("dimUniform", dimUniformFilterVals, null)); dimFilters.add(new InDimFilter("dimHyperUnique", dimHyperUniqueFilterVals, null)); return Druids.newSearchQueryBuilder() .dataSource("blah") .granularity(Granularities.ALL) .intervals(intervalSpec) .query("") .dimensions(Lists.newArrayList("dimUniform", "dimHyperUnique")) .filters(new AndDimFilter(dimFilters)); }
@Test public void testFallbackToCursorBasedPlan() { final SearchQueryBuilder builder = testBuilder(); final SearchQuery query = builder.filters("qualityLong", "1000").build(); final Map<String, Set<String>> expectedResults = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); expectedResults.put("qualityLong", Sets.newHashSet("1000")); expectedResults.put("qualityDouble", Sets.newHashSet("10000.0")); expectedResults.put("qualityFloat", Sets.newHashSet("10000.0")); expectedResults.put("qualityNumericString", Sets.newHashSet("100000")); expectedResults.put("quality", Sets.newHashSet("AutoMotive", "automotive")); expectedResults.put("placement", Sets.newHashSet("PREFERRED", "preferred")); expectedResults.put("placementish", Sets.newHashSet("a", "preferred")); expectedResults.put("market", Sets.newHashSet("spot")); checkSearchQuery(query, expectedResults); }
private static SearchQueryBuilder basicD(final BenchmarkSchemaInfo basicSchema) { final QuerySegmentSpec intervalSpec = new MultipleIntervalSegmentSpec( Collections.singletonList(basicSchema.getDataInterval()) ); final List<String> dimUniformFilterVals = new ArrayList<>(); final int resultNum = (int) (100000 * 0.1); final int step = 100000 / resultNum; for (int i = 1; i < 100001 && dimUniformFilterVals.size() < resultNum; i += step) { dimUniformFilterVals.add(String.valueOf(i)); } final String dimName = "dimUniform"; final List<DimFilter> dimFilters = new ArrayList<>(); dimFilters.add(new InDimFilter(dimName, dimUniformFilterVals, null)); dimFilters.add(new SelectorDimFilter(dimName, "3", null)); dimFilters.add(new BoundDimFilter(dimName, "100", "10000", true, true, true, null, null)); return Druids.newSearchQueryBuilder() .dataSource("blah") .granularity(Granularities.ALL) .intervals(intervalSpec) .query("") .dimensions(Collections.singletonList("dimUniform")) .filters(new AndDimFilter(dimFilters)); }
public SearchQuery withDimFilter(DimFilter dimFilter) { return Druids.SearchQueryBuilder.copy(this).filters(dimFilter).build(); }
public static SearchQueryBuilder copy(SearchQuery query) { return new SearchQueryBuilder() .dataSource(query.getDataSource()) .filters(query.getDimensionsFilter()) .granularity(query.getGranularity()) .limit(query.getLimit()) .intervals(query.getQuerySegmentSpec()) .dimensions(query.getDimensions()) .query(query.getQuery()) .sortSpec(query.getSort()) .context(query.getContext()); }
.filters(DIM_FILTER) .granularity(GRANULARITY) .limit(1000)
.filters(DIM_FILTER) .granularity(GRANULARITY) .limit(1000)
.query("") .dimensions(Collections.singletonList("dimUniform")) .filters(new AndDimFilter(dimFilters));
.dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.allGran) .filters( new ExtractionDimFilter( QueryRunnerTestHelper.qualityDimension,
@Test public void testSearchMultiAndFilter() { List<SearchHit> expectedHits = new ArrayList<>(); expectedHits.add(new SearchHit(QueryRunnerTestHelper.qualityDimension, "automotive", 93)); DimFilter filter = new AndDimFilter( new SelectorDimFilter(QueryRunnerTestHelper.marketDimension, "spot", null), new SelectorDimFilter(QueryRunnerTestHelper.qualityDimension, "automotive", null) ); checkSearchQuery( Druids.newSearchQueryBuilder() .dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.allGran) .filters(filter) .dimensions(QueryRunnerTestHelper.qualityDimension) .intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .query("a") .build(), expectedHits ); }
@Test public void testSearchWithSingleFilter1() { List<SearchHit> expectedHits = new ArrayList<>(); expectedHits.add(new SearchHit(QueryRunnerTestHelper.qualityDimension, "mezzanine", 93)); checkSearchQuery( Druids.newSearchQueryBuilder() .dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.allGran) .filters( new AndDimFilter( Arrays.asList( new SelectorDimFilter(QueryRunnerTestHelper.marketDimension, "total_market", null), new SelectorDimFilter(QueryRunnerTestHelper.qualityDimension, "mezzanine", null) ))) .intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .dimensions(QueryRunnerTestHelper.qualityDimension) .query("a") .build(), expectedHits ); }
@Test public void testSearchWithMultiOrFilter() { List<SearchHit> expectedHits = new ArrayList<>(); expectedHits.add(new SearchHit(QueryRunnerTestHelper.qualityDimension, "automotive", 93)); DimFilter filter = new OrDimFilter( new SelectorDimFilter(QueryRunnerTestHelper.qualityDimension, "total_market", null), new SelectorDimFilter(QueryRunnerTestHelper.qualityDimension, "automotive", null) ); checkSearchQuery( Druids.newSearchQueryBuilder() .dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.allGran) .dimensions(QueryRunnerTestHelper.qualityDimension) .filters(filter) .intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .query("a") .build(), expectedHits ); }
@Test public void testSearchWithFilterEmptyResults() { List<SearchHit> expectedHits = new ArrayList<>(); DimFilter filter = new AndDimFilter( new SelectorDimFilter(QueryRunnerTestHelper.marketDimension, "total_market", null), new SelectorDimFilter(QueryRunnerTestHelper.qualityDimension, "automotive", null) ); checkSearchQuery( Druids.newSearchQueryBuilder() .dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.allGran) .filters(filter) .intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .query("a") .build(), expectedHits ); }
@Test public void testSearchWithSingleFilter2() { List<SearchHit> expectedHits = new ArrayList<>(); expectedHits.add(new SearchHit(QueryRunnerTestHelper.marketDimension, "total_market", 186)); checkSearchQuery( Druids.newSearchQueryBuilder() .dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.allGran) .filters(QueryRunnerTestHelper.marketDimension, "total_market") .intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .dimensions(QueryRunnerTestHelper.marketDimension) .query("a") .build(), expectedHits ); }
private void testFilteredSearch(QueryRunner runner, List<Result<SearchResultValue>> expectedResults, String failMsg) { SearchQuery query = Druids.newSearchQueryBuilder() .dataSource(dataSource) .granularity(allGran) .filters(marketDimension, "spot") .intervals(fullOnInterval) .query("a") .build(); failMsg += " filtered search "; HashMap<String, Object> context = new HashMap<>(); Iterable<Result<SearchResultValue>> actualResults = runner.run(QueryPlus.wrap(query), context).toList(); TestHelper.assertExpectedResults(expectedResults, actualResults, failMsg); }
public static SearchQueryBuilder copy(SearchQuery query) { return new SearchQueryBuilder() .dataSource(query.getDataSource()) .filters(query.getDimensionsFilter()) .granularity(query.getGranularity()) .limit(query.getLimit()) .intervals(query.getQuerySegmentSpec()) .dimensions(query.getDimensions()) .query(query.getQuery()) .sortSpec(query.getSort()) .context(query.getContext()); }
public SearchQuery withDimFilter(DimFilter dimFilter) { return Druids.SearchQueryBuilder.copy(this).filters(dimFilter).build(); }
private SearchQuery makeFilteredSearchQuery() { return Druids.newSearchQueryBuilder() .dataSource(dataSource) .filters(new NotDimFilter(new SelectorDimFilter(marketDimension, "spot", null))) .granularity(allGran) .intervals(fullOnInterval) .query("a") .build(); } }