Search in sources :

Example 1 with FieldStatsResponse

use of org.elasticsearch.action.fieldstats.FieldStatsResponse in project elasticsearch by elastic.

the class RestFieldStatsAction method prepareRequest.

@Override
public RestChannelConsumer prepareRequest(final RestRequest request, final NodeClient client) throws IOException {
    if (request.hasContentOrSourceParam() && request.hasParam("fields")) {
        throw new IllegalArgumentException("can't specify a request body and [fields] request parameter, " + "either specify a request body or the [fields] request parameter");
    }
    final FieldStatsRequest fieldStatsRequest = new FieldStatsRequest();
    fieldStatsRequest.indices(Strings.splitStringByCommaToArray(request.param("index")));
    fieldStatsRequest.indicesOptions(IndicesOptions.fromRequest(request, fieldStatsRequest.indicesOptions()));
    fieldStatsRequest.level(request.param("level", FieldStatsRequest.DEFAULT_LEVEL));
    if (request.hasContentOrSourceParam()) {
        try (XContentParser parser = request.contentOrSourceParamParser()) {
            fieldStatsRequest.source(parser);
        }
    } else {
        fieldStatsRequest.setFields(Strings.splitStringByCommaToArray(request.param("fields")));
    }
    return channel -> client.fieldStats(fieldStatsRequest, new RestBuilderListener<FieldStatsResponse>(channel) {

        @Override
        public RestResponse buildResponse(FieldStatsResponse response, XContentBuilder builder) throws Exception {
            builder.startObject();
            buildBroadcastShardsHeader(builder, request, response);
            builder.startObject("indices");
            for (Map.Entry<String, Map<String, FieldStats>> entry1 : response.getIndicesMergedFieldStats().entrySet()) {
                builder.startObject(entry1.getKey());
                builder.startObject("fields");
                for (Map.Entry<String, FieldStats> entry2 : entry1.getValue().entrySet()) {
                    builder.field(entry2.getKey());
                    entry2.getValue().toXContent(builder, request);
                }
                builder.endObject();
                builder.endObject();
            }
            builder.endObject();
            if (response.getConflicts().size() > 0) {
                builder.startObject("conflicts");
                for (Map.Entry<String, String> entry : response.getConflicts().entrySet()) {
                    builder.field(entry.getKey(), entry.getValue());
                }
                builder.endObject();
            }
            builder.endObject();
            return new BytesRestResponse(RestStatus.OK, builder);
        }
    });
}
Also used : BaseRestHandler(org.elasticsearch.rest.BaseRestHandler) GET(org.elasticsearch.rest.RestRequest.Method.GET) FieldStatsRequest(org.elasticsearch.action.fieldstats.FieldStatsRequest) RestResponse(org.elasticsearch.rest.RestResponse) IOException(java.io.IOException) XContentBuilder(org.elasticsearch.common.xcontent.XContentBuilder) RestController(org.elasticsearch.rest.RestController) Strings(org.elasticsearch.common.Strings) XContentParser(org.elasticsearch.common.xcontent.XContentParser) BytesRestResponse(org.elasticsearch.rest.BytesRestResponse) POST(org.elasticsearch.rest.RestRequest.Method.POST) Settings(org.elasticsearch.common.settings.Settings) RestActions.buildBroadcastShardsHeader(org.elasticsearch.rest.action.RestActions.buildBroadcastShardsHeader) RestStatus(org.elasticsearch.rest.RestStatus) Map(java.util.Map) IndicesOptions(org.elasticsearch.action.support.IndicesOptions) RestRequest(org.elasticsearch.rest.RestRequest) NodeClient(org.elasticsearch.client.node.NodeClient) FieldStats(org.elasticsearch.action.fieldstats.FieldStats) FieldStatsResponse(org.elasticsearch.action.fieldstats.FieldStatsResponse) RestResponse(org.elasticsearch.rest.RestResponse) BytesRestResponse(org.elasticsearch.rest.BytesRestResponse) FieldStatsResponse(org.elasticsearch.action.fieldstats.FieldStatsResponse) IOException(java.io.IOException) FieldStats(org.elasticsearch.action.fieldstats.FieldStats) BytesRestResponse(org.elasticsearch.rest.BytesRestResponse) XContentParser(org.elasticsearch.common.xcontent.XContentParser) XContentBuilder(org.elasticsearch.common.xcontent.XContentBuilder) FieldStatsRequest(org.elasticsearch.action.fieldstats.FieldStatsRequest)

Example 2 with FieldStatsResponse

use of org.elasticsearch.action.fieldstats.FieldStatsResponse in project elasticsearch by elastic.

the class FieldStatsIntegrationIT method testFieldStatsIndexLevel.

public void testFieldStatsIndexLevel() throws Exception {
    assertAcked(prepareCreate("test1").addMapping("test", "value", "type=long"));
    assertAcked(prepareCreate("test2").addMapping("test", "value", "type=long"));
    assertAcked(prepareCreate("test3").addMapping("test", "value", "type=long"));
    ensureGreen("test1", "test2", "test3");
    indexRange("test1", -10, 100);
    indexRange("test2", 101, 200);
    indexRange("test3", 201, 300);
    // default:
    FieldStatsResponse response = client().prepareFieldStats().setFields("value").get();
    assertAllSuccessful(response);
    assertThat(response.getAllFieldStats().get("value").getMinValue(), equalTo(-10L));
    assertThat(response.getAllFieldStats().get("value").getMaxValue(), equalTo(300L));
    assertThat(response.getIndicesMergedFieldStats().size(), equalTo(1));
    assertThat(response.getIndicesMergedFieldStats().get("_all").get("value").getMinValue(), equalTo(-10L));
    assertThat(response.getIndicesMergedFieldStats().get("_all").get("value").getMaxValue(), equalTo(300L));
    assertThat(response.getIndicesMergedFieldStats().get("_all").get("value").getDisplayType(), equalTo("integer"));
    // Level: cluster
    response = client().prepareFieldStats().setFields("value").setLevel("cluster").get();
    assertAllSuccessful(response);
    assertThat(response.getAllFieldStats().get("value").getMinValue(), equalTo(-10L));
    assertThat(response.getAllFieldStats().get("value").getMaxValue(), equalTo(300L));
    assertThat(response.getIndicesMergedFieldStats().size(), equalTo(1));
    assertThat(response.getIndicesMergedFieldStats().get("_all").get("value").getMinValue(), equalTo(-10L));
    assertThat(response.getIndicesMergedFieldStats().get("_all").get("value").getMaxValue(), equalTo(300L));
    assertThat(response.getIndicesMergedFieldStats().get("_all").get("value").getDisplayType(), equalTo("integer"));
    // Level: indices
    response = client().prepareFieldStats().setFields("value").setLevel("indices").get();
    assertAllSuccessful(response);
    assertThat(response.getAllFieldStats(), nullValue());
    assertThat(response.getIndicesMergedFieldStats().size(), equalTo(3));
    assertThat(response.getIndicesMergedFieldStats().get("test1").get("value").getMinValue(), equalTo(-10L));
    assertThat(response.getIndicesMergedFieldStats().get("test1").get("value").getMaxValue(), equalTo(100L));
    assertThat(response.getIndicesMergedFieldStats().get("test2").get("value").getMinValue(), equalTo(101L));
    assertThat(response.getIndicesMergedFieldStats().get("test2").get("value").getMaxValue(), equalTo(200L));
    assertThat(response.getIndicesMergedFieldStats().get("test3").get("value").getMinValue(), equalTo(201L));
    assertThat(response.getIndicesMergedFieldStats().get("test3").get("value").getMaxValue(), equalTo(300L));
    assertThat(response.getIndicesMergedFieldStats().get("test3").get("value").getDisplayType(), equalTo("integer"));
    // Illegal level option:
    try {
        client().prepareFieldStats().setFields("value").setLevel("illegal").get();
        fail();
    } catch (ActionRequestValidationException e) {
        assertThat(e.getMessage(), equalTo("Validation Failed: 1: invalid level option [illegal];"));
    }
}
Also used : ActionRequestValidationException(org.elasticsearch.action.ActionRequestValidationException) FieldStatsResponse(org.elasticsearch.action.fieldstats.FieldStatsResponse)

Example 3 with FieldStatsResponse

use of org.elasticsearch.action.fieldstats.FieldStatsResponse in project elasticsearch by elastic.

the class FieldStatsIntegrationIT method testRandom.

public void testRandom() throws Exception {
    assertAcked(prepareCreate("test").addMapping("test", "string", "type=text", "date", "type=date", "double", "type=double", "half_float", "type=half_float", "float", "type=float", "long", "type=long", "integer", "type=integer", "short", "type=short", "byte", "type=byte", "location", "type=geo_point"));
    ensureGreen("test");
    // index=false
    assertAcked(prepareCreate("test1").addMapping("test", "string", "type=text,index=false", "date", "type=date,index=false", "double", "type=double,index=false", "half_float", "type=half_float", "float", "type=float,index=false", "long", "type=long,index=false", "integer", "type=integer,index=false", "short", "type=short,index=false", "byte", "type=byte,index=false", "location", "type=geo_point,index=false"));
    ensureGreen("test1");
    // no value indexed
    assertAcked(prepareCreate("test3").addMapping("test", "string", "type=text,index=false", "date", "type=date,index=false", "double", "type=double,index=false", "half_float", "type=half_float", "float", "type=float,index=false", "long", "type=long,index=false", "integer", "type=integer,index=false", "short", "type=short,index=false", "byte", "type=byte,index=false", "location", "type=geo_point,index=false"));
    ensureGreen("test3");
    long minByte = Byte.MAX_VALUE;
    long maxByte = Byte.MIN_VALUE;
    long minShort = Short.MAX_VALUE;
    long maxShort = Short.MIN_VALUE;
    long minInt = Integer.MAX_VALUE;
    long maxInt = Integer.MIN_VALUE;
    long minLong = Long.MAX_VALUE;
    long maxLong = Long.MIN_VALUE;
    double minHalfFloat = Double.POSITIVE_INFINITY;
    double maxHalfFloat = Double.NEGATIVE_INFINITY;
    double minFloat = Double.POSITIVE_INFINITY;
    double maxFloat = Double.NEGATIVE_INFINITY;
    double minDouble = Double.POSITIVE_INFINITY;
    double maxDouble = Double.NEGATIVE_INFINITY;
    GeoPoint minLoc = new GeoPoint(90, 180);
    GeoPoint maxLoc = new GeoPoint(-90, -180);
    String minString = new String(Character.toChars(1114111));
    String maxString = "0";
    int numDocs = scaledRandomIntBetween(128, 1024);
    List<IndexRequestBuilder> request = new ArrayList<>(numDocs);
    for (int doc = 0; doc < numDocs; doc++) {
        byte b = randomByte();
        minByte = Math.min(minByte, b);
        maxByte = Math.max(maxByte, b);
        short s = randomShort();
        minShort = Math.min(minShort, s);
        maxShort = Math.max(maxShort, s);
        int i = randomInt();
        minInt = Math.min(minInt, i);
        maxInt = Math.max(maxInt, i);
        long l = randomLong();
        minLong = Math.min(minLong, l);
        maxLong = Math.max(maxLong, l);
        float hf = randomFloat();
        hf = HalfFloatPoint.sortableShortToHalfFloat(HalfFloatPoint.halfFloatToSortableShort(hf));
        minHalfFloat = Math.min(minHalfFloat, hf);
        maxHalfFloat = Math.max(maxHalfFloat, hf);
        float f = randomFloat();
        minFloat = Math.min(minFloat, f);
        maxFloat = Math.max(maxFloat, f);
        double d = randomDouble();
        minDouble = Math.min(minDouble, d);
        maxDouble = Math.max(maxDouble, d);
        GeoPoint loc = RandomGeoGenerator.randomPoint(random());
        minLoc.reset(Math.min(loc.lat(), minLoc.lat()), Math.min(loc.lon(), minLoc.lon()));
        maxLoc.reset(Math.max(loc.lat(), maxLoc.lat()), Math.max(loc.lon(), maxLoc.lon()));
        String str = randomRealisticUnicodeOfLength(3);
        if (str.compareTo(minString) < 0) {
            minString = str;
        }
        if (str.compareTo(maxString) > 0) {
            maxString = str;
        }
        request.add(client().prepareIndex("test", "test", Integer.toString(doc)).setSource("byte", b, "short", s, "integer", i, "long", l, "half_float", hf, "float", f, "double", d, "location", loc, "string", str));
    }
    indexRandom(true, false, request);
    FieldStatsResponse response = client().prepareFieldStats().setFields("byte", "short", "integer", "long", "half_float", "float", "double", "location", "string").get();
    assertAllSuccessful(response);
    for (FieldStats<?> stats : response.getAllFieldStats().values()) {
        assertThat(stats.getMaxDoc(), equalTo((long) numDocs));
        assertThat(stats.getDocCount(), equalTo((long) numDocs));
        assertThat(stats.getDensity(), equalTo(100));
    }
    assertThat(response.getAllFieldStats().get("byte").getMinValue(), equalTo(minByte));
    assertThat(response.getAllFieldStats().get("byte").getMaxValue(), equalTo(maxByte));
    assertThat(response.getAllFieldStats().get("byte").getDisplayType(), equalTo("integer"));
    assertThat(response.getAllFieldStats().get("short").getMinValue(), equalTo(minShort));
    assertThat(response.getAllFieldStats().get("short").getMaxValue(), equalTo(maxShort));
    assertThat(response.getAllFieldStats().get("short").getDisplayType(), equalTo("integer"));
    assertThat(response.getAllFieldStats().get("integer").getMinValue(), equalTo(minInt));
    assertThat(response.getAllFieldStats().get("integer").getMaxValue(), equalTo(maxInt));
    assertThat(response.getAllFieldStats().get("integer").getDisplayType(), equalTo("integer"));
    assertThat(response.getAllFieldStats().get("long").getMinValue(), equalTo(minLong));
    assertThat(response.getAllFieldStats().get("long").getMaxValue(), equalTo(maxLong));
    assertThat(response.getAllFieldStats().get("long").getDisplayType(), equalTo("integer"));
    assertThat(response.getAllFieldStats().get("half_float").getMinValue(), equalTo(minHalfFloat));
    assertThat(response.getAllFieldStats().get("half_float").getMaxValue(), equalTo(maxHalfFloat));
    assertThat(response.getAllFieldStats().get("half_float").getDisplayType(), equalTo("float"));
    assertThat(response.getAllFieldStats().get("float").getMinValue(), equalTo(minFloat));
    assertThat(response.getAllFieldStats().get("float").getMaxValue(), equalTo(maxFloat));
    assertThat(response.getAllFieldStats().get("float").getDisplayType(), equalTo("float"));
    assertThat(response.getAllFieldStats().get("double").getMinValue(), equalTo(minDouble));
    assertThat(response.getAllFieldStats().get("double").getMaxValue(), equalTo(maxDouble));
    assertThat(response.getAllFieldStats().get("double").getDisplayType(), equalTo("float"));
    assertThat(((GeoPoint) response.getAllFieldStats().get("location").getMinValue()).lat(), closeTo(minLoc.lat(), 1E-5));
    assertThat(((GeoPoint) response.getAllFieldStats().get("location").getMinValue()).lon(), closeTo(minLoc.lon(), 1E-5));
    assertThat(((GeoPoint) response.getAllFieldStats().get("location").getMaxValue()).lat(), closeTo(maxLoc.lat(), 1E-5));
    assertThat(((GeoPoint) response.getAllFieldStats().get("location").getMaxValue()).lon(), closeTo(maxLoc.lon(), 1E-5));
    assertThat(response.getAllFieldStats().get("location").getDisplayType(), equalTo("geo_point"));
}
Also used : ArrayList(java.util.ArrayList) GeoPoint(org.elasticsearch.common.geo.GeoPoint) IndexConstraint(org.elasticsearch.action.fieldstats.IndexConstraint) HalfFloatPoint(org.apache.lucene.document.HalfFloatPoint) FieldStatsResponse(org.elasticsearch.action.fieldstats.FieldStatsResponse) IndexRequestBuilder(org.elasticsearch.action.index.IndexRequestBuilder) GeoPoint(org.elasticsearch.common.geo.GeoPoint)

Example 4 with FieldStatsResponse

use of org.elasticsearch.action.fieldstats.FieldStatsResponse in project elasticsearch by elastic.

the class FieldStatsIntegrationIT method testFieldStatsFiltering.

public void testFieldStatsFiltering() throws Exception {
    assertAcked(prepareCreate("test1").addMapping("test", "value", "type=long"));
    assertAcked(prepareCreate("test2").addMapping("test", "value", "type=long"));
    assertAcked(prepareCreate("test3").addMapping("test", "value", "type=long"));
    ensureGreen("test1", "test2", "test3");
    indexRange("test1", -10, 100);
    indexRange("test2", 101, 200);
    indexRange("test3", 201, 300);
    FieldStatsResponse response = client().prepareFieldStats().setFields("value").setIndexContraints(new IndexConstraint("value", MIN, GTE, "200"), new IndexConstraint("value", MAX, LTE, "300")).setLevel("indices").get();
    assertAllSuccessful(response);
    assertThat(response.getAllFieldStats(), nullValue());
    assertThat(response.getIndicesMergedFieldStats().size(), equalTo(1));
    assertThat(response.getIndicesMergedFieldStats().get("test3").get("value").getMinValue(), equalTo(201L));
    assertThat(response.getIndicesMergedFieldStats().get("test3").get("value").getMaxValue(), equalTo(300L));
    response = client().prepareFieldStats().setFields("value").setIndexContraints(new IndexConstraint("value", MAX, LTE, "200")).setLevel("indices").get();
    assertAllSuccessful(response);
    assertThat(response.getAllFieldStats(), nullValue());
    assertThat(response.getIndicesMergedFieldStats().size(), equalTo(2));
    assertThat(response.getIndicesMergedFieldStats().get("test1").get("value").getMinValue(), equalTo(-10L));
    assertThat(response.getIndicesMergedFieldStats().get("test1").get("value").getMaxValue(), equalTo(100L));
    assertThat(response.getIndicesMergedFieldStats().get("test2").get("value").getMinValue(), equalTo(101L));
    assertThat(response.getIndicesMergedFieldStats().get("test2").get("value").getMaxValue(), equalTo(200L));
    response = client().prepareFieldStats().setFields("value").setIndexContraints(new IndexConstraint("value", MIN, GTE, "100")).setLevel("indices").get();
    assertAllSuccessful(response);
    assertThat(response.getAllFieldStats(), nullValue());
    assertThat(response.getIndicesMergedFieldStats().size(), equalTo(2));
    assertThat(response.getIndicesMergedFieldStats().get("test2").get("value").getMinValue(), equalTo(101L));
    assertThat(response.getIndicesMergedFieldStats().get("test2").get("value").getMaxValue(), equalTo(200L));
    assertThat(response.getIndicesMergedFieldStats().get("test3").get("value").getMinValue(), equalTo(201L));
    assertThat(response.getIndicesMergedFieldStats().get("test3").get("value").getMaxValue(), equalTo(300L));
    response = client().prepareFieldStats().setFields("value").setIndexContraints(new IndexConstraint("value", MIN, GTE, "-20"), new IndexConstraint("value", MAX, LT, "-10")).setLevel("indices").get();
    assertAllSuccessful(response);
    assertThat(response.getAllFieldStats(), nullValue());
    assertThat(response.getIndicesMergedFieldStats().size(), equalTo(0));
    response = client().prepareFieldStats().setFields("value").setIndexContraints(new IndexConstraint("value", MIN, GTE, "-100"), new IndexConstraint("value", MAX, LTE, "-20")).setLevel("indices").get();
    assertAllSuccessful(response);
    assertThat(response.getAllFieldStats(), nullValue());
    assertThat(response.getIndicesMergedFieldStats().size(), equalTo(0));
    response = client().prepareFieldStats().setFields("value").setIndexContraints(new IndexConstraint("value", MIN, GTE, "100"), new IndexConstraint("value", MAX, LTE, "200")).setLevel("indices").get();
    assertAllSuccessful(response);
    assertThat(response.getAllFieldStats(), nullValue());
    assertThat(response.getIndicesMergedFieldStats().size(), equalTo(1));
    assertThat(response.getIndicesMergedFieldStats().get("test2").get("value").getMinValue(), equalTo(101L));
    assertThat(response.getIndicesMergedFieldStats().get("test2").get("value").getMaxValue(), equalTo(200L));
    response = client().prepareFieldStats().setFields("value").setIndexContraints(new IndexConstraint("value", MIN, GTE, "150"), new IndexConstraint("value", MAX, LTE, "300")).setLevel("indices").get();
    assertAllSuccessful(response);
    assertThat(response.getAllFieldStats(), nullValue());
    assertThat(response.getIndicesMergedFieldStats().size(), equalTo(1));
    assertThat(response.getIndicesMergedFieldStats().get("test3").get("value").getMinValue(), equalTo(201L));
    assertThat(response.getIndicesMergedFieldStats().get("test3").get("value").getMaxValue(), equalTo(300L));
}
Also used : IndexConstraint(org.elasticsearch.action.fieldstats.IndexConstraint) FieldStatsResponse(org.elasticsearch.action.fieldstats.FieldStatsResponse)

Example 5 with FieldStatsResponse

use of org.elasticsearch.action.fieldstats.FieldStatsResponse in project elasticsearch by elastic.

the class FieldStatsTests method testHalfFloat.

public void testHalfFloat() {
    createIndex("test", Settings.EMPTY, "test", "field_index", makeType("half_float", true, false, false), "field_dv", makeType("half_float", false, true, false), "field_stored", makeType("half_float", false, true, true), "field_source", makeType("half_float", false, false, false));
    for (float value = -1; value <= 9; value++) {
        client().prepareIndex("test", "test").setSource("field_index", value, "field_dv", value, "field_stored", value, "field_source", value).get();
    }
    client().admin().indices().prepareRefresh().get();
    FieldStatsResponse result = client().prepareFieldStats().setFields("field_index", "field_dv", "field_stored", "field_source").get();
    for (String field : new String[] { "field_index", "field_dv", "field_stored" }) {
        FieldStats stats = result.getAllFieldStats().get(field);
        assertEquals(stats.getMaxDoc(), 11L);
        assertEquals(stats.getDisplayType(), "float");
        if (field.equals("field_index")) {
            assertEquals(stats.getDocCount(), 11L);
            assertEquals(stats.getDensity(), 100);
            assertEquals(stats.getMinValue(), -1d);
            assertEquals(stats.getMaxValue(), 9d);
            assertEquals(stats.getMinValueAsString(), Float.toString(-1));
            assertEquals(stats.getMaxValueAsString(), Float.toString(9));
        } else {
            assertEquals(stats.getDocCount(), 0L);
            assertNull(stats.getMinValue());
            assertNull(stats.getMaxValue());
            assertEquals(stats.getDensity(), 0);
        }
    }
}
Also used : Matchers.containsString(org.hamcrest.Matchers.containsString) FieldStatsResponse(org.elasticsearch.action.fieldstats.FieldStatsResponse) FieldStats(org.elasticsearch.action.fieldstats.FieldStats)

Aggregations

FieldStatsResponse (org.elasticsearch.action.fieldstats.FieldStatsResponse)19 IndexConstraint (org.elasticsearch.action.fieldstats.IndexConstraint)6 FieldStats (org.elasticsearch.action.fieldstats.FieldStats)5 Matchers.containsString (org.hamcrest.Matchers.containsString)5 BytesRef (org.apache.lucene.util.BytesRef)3 GeoPoint (org.elasticsearch.common.geo.GeoPoint)2 DateTime (org.joda.time.DateTime)2 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 Map (java.util.Map)1 HalfFloatPoint (org.apache.lucene.document.HalfFloatPoint)1 ActionRequestValidationException (org.elasticsearch.action.ActionRequestValidationException)1 FieldStatsRequest (org.elasticsearch.action.fieldstats.FieldStatsRequest)1 IndexRequestBuilder (org.elasticsearch.action.index.IndexRequestBuilder)1 IndicesOptions (org.elasticsearch.action.support.IndicesOptions)1 NodeClient (org.elasticsearch.client.node.NodeClient)1 Strings (org.elasticsearch.common.Strings)1 Settings (org.elasticsearch.common.settings.Settings)1 XContentBuilder (org.elasticsearch.common.xcontent.XContentBuilder)1 XContentParser (org.elasticsearch.common.xcontent.XContentParser)1