public void testDocValueFields()

in server/src/internalClusterTest/java/org/opensearch/search/fields/SearchFieldsIT.java [849:1108]


    public void testDocValueFields() throws Exception {
        createIndex("test");

        String mapping = Strings.toString(
            XContentFactory.jsonBuilder()
                .startObject()
                .startObject("type1")
                .startObject("_source")
                .field("enabled", false)
                .endObject()
                .startObject("properties")
                .startObject("text_field")
                .field("type", "text")
                .field("fielddata", true)
                .endObject()
                .startObject("keyword_field")
                .field("type", "keyword")
                .endObject()
                .startObject("byte_field")
                .field("type", "byte")
                .endObject()
                .startObject("short_field")
                .field("type", "short")
                .endObject()
                .startObject("integer_field")
                .field("type", "integer")
                .endObject()
                .startObject("long_field")
                .field("type", "long")
                .endObject()
                .startObject("float_field")
                .field("type", "float")
                .endObject()
                .startObject("double_field")
                .field("type", "double")
                .endObject()
                .startObject("date_field")
                .field("type", "date")
                .endObject()
                .startObject("boolean_field")
                .field("type", "boolean")
                .endObject()
                .startObject("binary_field")
                .field("type", "binary")
                .field("doc_values", true) // off by default on binary fields
                .endObject()
                .startObject("ip_field")
                .field("type", "ip")
                .endObject()
                .endObject()
                .endObject()
                .endObject()
        );

        client().admin().indices().preparePutMapping().setType("type1").setSource(mapping, XContentType.JSON).get();

        ZonedDateTime date = ZonedDateTime.of(2012, 3, 22, 0, 0, 0, 0, ZoneOffset.UTC);
        client().prepareIndex("test", "type1", "1")
            .setSource(
                jsonBuilder().startObject()
                    .field("text_field", "foo")
                    .field("keyword_field", "foo")
                    .field("byte_field", (byte) 1)
                    .field("short_field", (short) 2)
                    .field("integer_field", 3)
                    .field("long_field", 4L)
                    .field("float_field", 5.0f)
                    .field("double_field", 6.0d)
                    .field("date_field", DateFormatter.forPattern("date_optional_time").format(date))
                    .field("boolean_field", true)
                    .field("binary_field", new byte[] { 42, 100 })
                    .field("ip_field", "::1")
                    .endObject()
            )
            .get();

        client().admin().indices().prepareRefresh().get();

        SearchRequestBuilder builder = client().prepareSearch()
            .setQuery(matchAllQuery())
            .addDocValueField("text_field")
            .addDocValueField("keyword_field")
            .addDocValueField("byte_field")
            .addDocValueField("short_field")
            .addDocValueField("integer_field")
            .addDocValueField("long_field")
            .addDocValueField("float_field")
            .addDocValueField("double_field")
            .addDocValueField("date_field")
            .addDocValueField("boolean_field")
            .addDocValueField("binary_field")
            .addDocValueField("ip_field");
        SearchResponse searchResponse = builder.get();

        assertThat(searchResponse.getHits().getTotalHits().value, equalTo(1L));
        assertThat(searchResponse.getHits().getHits().length, equalTo(1));
        Set<String> fields = new HashSet<>(searchResponse.getHits().getAt(0).getFields().keySet());
        assertThat(
            fields,
            equalTo(
                newHashSet(
                    "byte_field",
                    "short_field",
                    "integer_field",
                    "long_field",
                    "float_field",
                    "double_field",
                    "date_field",
                    "boolean_field",
                    "text_field",
                    "keyword_field",
                    "binary_field",
                    "ip_field"
                )
            )
        );

        assertThat(searchResponse.getHits().getAt(0).getFields().get("byte_field").getValue().toString(), equalTo("1"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("short_field").getValue().toString(), equalTo("2"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("integer_field").getValue(), equalTo((Object) 3L));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("long_field").getValue(), equalTo((Object) 4L));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("float_field").getValue(), equalTo((Object) 5.0));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("double_field").getValue(), equalTo((Object) 6.0d));
        assertThat(
            searchResponse.getHits().getAt(0).getFields().get("date_field").getValue(),
            equalTo(DateFormatter.forPattern("date_optional_time").format(date))
        );
        assertThat(searchResponse.getHits().getAt(0).getFields().get("boolean_field").getValue(), equalTo((Object) true));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("text_field").getValue(), equalTo("foo"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("keyword_field").getValue(), equalTo("foo"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("binary_field").getValue(), equalTo("KmQ"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("ip_field").getValue(), equalTo("::1"));

        builder = client().prepareSearch().setQuery(matchAllQuery()).addDocValueField("*field");
        searchResponse = builder.get();

        assertThat(searchResponse.getHits().getTotalHits().value, equalTo(1L));
        assertThat(searchResponse.getHits().getHits().length, equalTo(1));
        fields = new HashSet<>(searchResponse.getHits().getAt(0).getFields().keySet());
        assertThat(
            fields,
            equalTo(
                newHashSet(
                    "byte_field",
                    "short_field",
                    "integer_field",
                    "long_field",
                    "float_field",
                    "double_field",
                    "date_field",
                    "boolean_field",
                    "text_field",
                    "keyword_field",
                    "binary_field",
                    "ip_field"
                )
            )
        );

        assertThat(searchResponse.getHits().getAt(0).getFields().get("byte_field").getValue().toString(), equalTo("1"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("short_field").getValue().toString(), equalTo("2"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("integer_field").getValue(), equalTo((Object) 3L));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("long_field").getValue(), equalTo((Object) 4L));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("float_field").getValue(), equalTo((Object) 5.0));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("double_field").getValue(), equalTo((Object) 6.0d));
        assertThat(
            searchResponse.getHits().getAt(0).getFields().get("date_field").getValue(),
            equalTo(DateFormatter.forPattern("date_optional_time").format(date))
        );
        assertThat(searchResponse.getHits().getAt(0).getFields().get("boolean_field").getValue(), equalTo((Object) true));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("text_field").getValue(), equalTo("foo"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("keyword_field").getValue(), equalTo("foo"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("binary_field").getValue(), equalTo("KmQ"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("ip_field").getValue(), equalTo("::1"));

        builder = client().prepareSearch()
            .setQuery(matchAllQuery())
            .addDocValueField("text_field", "use_field_mapping")
            .addDocValueField("keyword_field", "use_field_mapping")
            .addDocValueField("byte_field", "use_field_mapping")
            .addDocValueField("short_field", "use_field_mapping")
            .addDocValueField("integer_field", "use_field_mapping")
            .addDocValueField("long_field", "use_field_mapping")
            .addDocValueField("float_field", "use_field_mapping")
            .addDocValueField("double_field", "use_field_mapping")
            .addDocValueField("date_field", "use_field_mapping")
            .addDocValueField("boolean_field", "use_field_mapping")
            .addDocValueField("binary_field", "use_field_mapping")
            .addDocValueField("ip_field", "use_field_mapping");
        searchResponse = builder.get();

        assertThat(searchResponse.getHits().getTotalHits().value, equalTo(1L));
        assertThat(searchResponse.getHits().getHits().length, equalTo(1));
        fields = new HashSet<>(searchResponse.getHits().getAt(0).getFields().keySet());
        assertThat(
            fields,
            equalTo(
                newHashSet(
                    "byte_field",
                    "short_field",
                    "integer_field",
                    "long_field",
                    "float_field",
                    "double_field",
                    "date_field",
                    "boolean_field",
                    "text_field",
                    "keyword_field",
                    "binary_field",
                    "ip_field"
                )
            )
        );

        assertThat(searchResponse.getHits().getAt(0).getFields().get("byte_field").getValue().toString(), equalTo("1"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("short_field").getValue().toString(), equalTo("2"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("integer_field").getValue(), equalTo((Object) 3L));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("long_field").getValue(), equalTo((Object) 4L));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("float_field").getValue(), equalTo((Object) 5.0));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("double_field").getValue(), equalTo((Object) 6.0d));
        assertThat(
            searchResponse.getHits().getAt(0).getFields().get("date_field").getValue(),
            equalTo(DateFormatter.forPattern("dateOptionalTime").format(date))
        );
        assertThat(searchResponse.getHits().getAt(0).getFields().get("boolean_field").getValue(), equalTo((Object) true));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("text_field").getValue(), equalTo("foo"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("keyword_field").getValue(), equalTo("foo"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("binary_field").getValue(), equalTo("KmQ"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("ip_field").getValue(), equalTo("::1"));

        builder = client().prepareSearch()
            .setQuery(matchAllQuery())
            .addDocValueField("byte_field", "#.0")
            .addDocValueField("short_field", "#.0")
            .addDocValueField("integer_field", "#.0")
            .addDocValueField("long_field", "#.0")
            .addDocValueField("float_field", "#.0")
            .addDocValueField("double_field", "#.0")
            .addDocValueField("date_field", "epoch_millis");
        searchResponse = builder.get();

        assertThat(searchResponse.getHits().getTotalHits().value, equalTo(1L));
        assertThat(searchResponse.getHits().getHits().length, equalTo(1));
        fields = new HashSet<>(searchResponse.getHits().getAt(0).getFields().keySet());
        assertThat(
            fields,
            equalTo(newHashSet("byte_field", "short_field", "integer_field", "long_field", "float_field", "double_field", "date_field"))
        );

        assertThat(searchResponse.getHits().getAt(0).getFields().get("byte_field").getValue(), equalTo("1.0"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("short_field").getValue(), equalTo("2.0"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("integer_field").getValue(), equalTo("3.0"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("long_field").getValue(), equalTo("4.0"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("float_field").getValue(), equalTo("5.0"));
        assertThat(searchResponse.getHits().getAt(0).getFields().get("double_field").getValue(), equalTo("6.0"));
        assertThat(
            searchResponse.getHits().getAt(0).getFields().get("date_field").getValue(),
            equalTo(DateFormatter.forPattern("epoch_millis").format(date))
        );
    }