package co.webertech.search; import static org.elasticsearch.cluster.metadata.IndexMetaData.SETTING_NUMBER_OF_REPLICAS; import static org.elasticsearch.cluster.metadata.IndexMetaData.SETTING_NUMBER_OF_SHARDS; import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitCount; import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse; import static org.hamcrest.core.Is.is; import org.elasticsearch.Version; import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.metrics.InternalMax; import org.elasticsearch.search.aggregations.metrics.InternalMin; import org.elasticsearch.test.ESIntegTestCase; import org.junit.Test; @ESIntegTestCase.ClusterScope(scope = ESIntegTestCase.Scope.SUITE) public class MinMaxMissingIntergationTest extends ESIntegTestCase { @Test public void minMaxMissingTest() { // verify we are on es 7.4.2 NodesInfoResponse info = client().admin().cluster().prepareNodesInfo().all().execute().actionGet(); info.getNodes().forEach(node -> assertTrue(node.getVersion().onOrAfter(Version.V_7_4_2))); prepareCreate("test") .setSettings(Settings.builder().put(SETTING_NUMBER_OF_SHARDS, 1).put(SETTING_NUMBER_OF_REPLICAS, 0).build()).get(); ensureGreen(); client().prepareIndex("test", "_doc", "1").setSource("field", new int[]{2, 3, 5}).execute().actionGet(); client().prepareIndex("test", "_doc", "2").setSource("field", new int[]{7, 1}).execute().actionGet(); client().prepareIndex("test", "_doc", "3").setSource("field", new int[]{8, 2, 5, 4}).execute().actionGet(); client().prepareIndex("test", "_doc", "4").setSource("test", "test").execute().actionGet(); ensureGreen(); refresh(); SearchRequest req = client().prepareSearch("test") .setSize(0) .addAggregation(AggregationBuilders.min("min_missing").field("field").missing(-1d)) .addAggregation(AggregationBuilders.max("max_missing").field("field").missing(10d)) .request(); SearchResponse resp = client().search(req).actionGet(); assertSearchResponse(resp); assertHitCount(resp, 4); Aggregations aggs = resp.getAggregations(); InternalMin minAgg = aggs.get("min_missing"); assertNotNull(minAgg); assertThat(minAgg.value(), is(-1d)); InternalMax maxAgg = aggs.get("max_missing"); assertNotNull(maxAgg); assertThat(maxAgg.value(), is(10d)); } }