diff --git a/implementation/elasticsearch/src/main/java/net/opentsdb/meta/NamespacedAggregatedDocumentSchema.java b/implementation/elasticsearch/src/main/java/net/opentsdb/meta/NamespacedAggregatedDocumentSchema.java index 9906f1f30a..cda4e9f2a6 100644 --- a/implementation/elasticsearch/src/main/java/net/opentsdb/meta/NamespacedAggregatedDocumentSchema.java +++ b/implementation/elasticsearch/src/main/java/net/opentsdb/meta/NamespacedAggregatedDocumentSchema.java @@ -315,19 +315,31 @@ public Deferred runQuery( filter = queryPipelineContext.query().getFilter( timeSeriesDataSourceConfig.getFilterId()); } - - final ChainFilter.Builder builder = ChainFilter.newBuilder() - .setOp(FilterOp.AND) - .addFilter(MetricLiteralFilter.newBuilder() - .setMetric(metric) - .build()); + + QueryFilter buildFilter; + + final ChainFilter.Builder builder = ChainFilter + .newBuilder() + .setOp(FilterOp.AND) + .addFilter(MetricLiteralFilter.newBuilder().setMetric(metric).build()); if (filter != null) { builder.addFilter(filter); } + + if (filter instanceof ExplicitTagsFilter) { + final ExplicitTagsFilter.Builder explicitTagBuilder = + ExplicitTagsFilter + .newBuilder() + .setFilter(builder.build()); + buildFilter = explicitTagBuilder.build(); + } else { + buildFilter = builder.build(); + } + final MetaQuery query = DefaultMetaQuery.newBuilder() .setType(QueryType.TIMESERIES) .setNamespace(namespace) - .setFilter(builder.build()) + .setFilter(buildFilter) .build(); SearchSourceBuilder search = NamespacedAggregatedDocumentQueryBuilder @@ -663,4 +675,4 @@ private TimeSeriesId buildTimeseries(final String metric, final return timeseries; } -} \ No newline at end of file +} diff --git a/implementation/elasticsearch/src/test/java/net/opentsdb/meta/TestNamespacedAggregatedDocumentQuery.java b/implementation/elasticsearch/src/test/java/net/opentsdb/meta/TestNamespacedAggregatedDocumentQuery.java index d1847f58b2..a338302b6e 100644 --- a/implementation/elasticsearch/src/test/java/net/opentsdb/meta/TestNamespacedAggregatedDocumentQuery.java +++ b/implementation/elasticsearch/src/test/java/net/opentsdb/meta/TestNamespacedAggregatedDocumentQuery.java @@ -51,6 +51,36 @@ public void testTagValueRegexQuery() { + "{\"term\":{\"tags.key.lowercase\":\"host\"}}]}},\"path\":\"tags\"}}")); } + + @Test + public void testExplicitTagQuery() { + + QueryFilter chainFil = ChainFilter.newBuilder().setOp(ChainFilter.FilterOp.AND) + .addFilter(TagValueRegexFilter.newBuilder().setFilter("cpu").setTagKey("host").build()) + .build(); + MetaQuery query = DefaultMetaQuery.newBuilder() + .setFrom(0) + .setTo(5) + .setNamespace("Yahoo") + .setFilter( ExplicitTagsFilter.newBuilder().setFilter(chainFil).build()) + .setType(QueryType.TIMESERIES) + .build(); + + SearchSourceBuilder source = NamespacedAggregatedDocumentQueryBuilder + .newBuilder(query) + .build(); + + String s = source.toString().replaceAll("\n","") + .replaceAll(" ", ""); + System.out.println(s); + assertTrue(s.contains("\"from\":0")); + assertTrue(s.contains("\"size\":5")); + assertTrue(s.contains("\"query\":{\"bool\":{\"must\":[{\"term\":{\"tags_value\":1}},{\"bool\":" + + "{\"must\":{\"nested\":{\"filter\":{\"bool\":{\"must\":[{\"regexp\":" + + "{\"tags.value\":\".*cpu.*\"}},{\"term\":{\"tags.key.lowercase\":\"host\"}}]}}," + + "\"path\":\"tags\"}}}}]}}")); + + } // // @Test // public void testMetricRegexQuery() {