From dd44376d27f676fc6f1cceb1548e0f0ec0450b70 Mon Sep 17 00:00:00 2001 From: Dan Hermann Date: Fri, 28 Feb 2020 08:57:35 -0600 Subject: [PATCH] [7.x] Send the fields param in body instead of URL params (#52948) --- .../client/RequestConverters.java | 1 - .../client/core/TermVectorsRequest.java | 1 + .../java/org/elasticsearch/client/CrudIT.java | 51 +++++++++++++++++-- .../client/RequestConvertersTests.java | 5 -- 4 files changed, 47 insertions(+), 11 deletions(-) diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java index 3f17c29bcb1..98631364f36 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java @@ -718,7 +718,6 @@ final class RequestConverters { Params params = new Params(); params.withRouting(tvrequest.getRouting()); params.withPreference(tvrequest.getPreference()); - params.withFields(tvrequest.getFields()); params.withRealtime(tvrequest.getRealtime()); request.addParameters(params.asMap()); request.setEntity(createEntity(tvrequest, REQUEST_BODY_CONTENT_TYPE)); diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/core/TermVectorsRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/core/TermVectorsRequest.java index 001896641cf..0352f39f1fc 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/core/TermVectorsRequest.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/core/TermVectorsRequest.java @@ -258,6 +258,7 @@ public class TermVectorsRequest implements ToXContentObject, Validatable { builder.field("_type", type); } if (id != null) builder.field("_id", id); + if (fields != null) builder.field("fields", fields); // set values only when different from defaults if (requestPositions == false) builder.field("positions", false); if (requestPayloads == false) builder.field("payloads", false); diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/CrudIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/CrudIT.java index fda35eae4c3..5b711445060 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/CrudIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/CrudIT.java @@ -76,6 +76,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; import static java.util.Collections.singletonMap; import static org.hamcrest.Matchers.containsString; @@ -1216,16 +1217,20 @@ public class CrudIT extends ESRestHighLevelClientTestCase { .put("number_of_shards", 1) .put("number_of_replicas", 0) .build(); - String mappings = "\"properties\":{\"field\":{\"type\":\"text\"}}"; + String mappings = "\"properties\":{\"field\":{\"type\":\"text\"}, \"field2\":{\"type\":\"text\"}}"; createIndex(sourceIndex, settings, mappings); + final Map doc1 = new HashMap<>(); + doc1.put("field", "value1"); + doc1.put("field2", "hello world"); + final Map doc2 = new HashMap<>(); + doc2.put("field", "value2"); + doc2.put("field2", "foo var"); assertEquals( RestStatus.OK, highLevelClient().bulk( new BulkRequest() - .add(new IndexRequest(sourceIndex).id("1") - .source(Collections.singletonMap("field", "value1"), XContentType.JSON)) - .add(new IndexRequest(sourceIndex).id("2") - .source(Collections.singletonMap("field", "value2"), XContentType.JSON)) + .add(new IndexRequest(sourceIndex).id("1").source(doc1, XContentType.JSON)) + .add(new IndexRequest(sourceIndex).id("2").source(doc2, XContentType.JSON)) .setRefreshPolicy(RefreshPolicy.IMMEDIATE), RequestOptions.DEFAULT ).status() @@ -1270,5 +1275,41 @@ public class CrudIT extends ESRestHighLevelClientTestCase { } } + { + // test the behavior of fields param + MultiTermVectorsRequest mtvRequest = new MultiTermVectorsRequest(); + TermVectorsRequest tvRequest1 = new TermVectorsRequest(sourceIndex, "1"); + tvRequest1.setFields("field"); + mtvRequest.add(tvRequest1); + + TermVectorsRequest tvRequest2 = new TermVectorsRequest(sourceIndex, "2"); + tvRequest2.setFields("field2"); + mtvRequest.add(tvRequest2); + + TermVectorsRequest tvRequest3 = new TermVectorsRequest(sourceIndex, "2"); + tvRequest3.setFields("field", "field2"); + mtvRequest.add(tvRequest3); + + MultiTermVectorsResponse mtvResponse = + execute(mtvRequest, highLevelClient()::mtermvectors, highLevelClient()::mtermvectorsAsync); + final List expectedFields = new ArrayList<>(); + expectedFields.add("field"); + expectedFields.add("field2"); + List> expectedRespFields = new ArrayList<>(); + expectedRespFields.add(Collections.singletonList("field")); + expectedRespFields.add(Collections.singletonList("field2")); + expectedRespFields.add(expectedFields); + List responses = mtvResponse.getTermVectorsResponses(); + assertEquals(expectedRespFields.size(), responses.size()); + for (int i = 0; i < responses.size(); i++) { + TermVectorsResponse tvResponse = responses.get(i); + assertThat(tvResponse.getIndex(), equalTo(sourceIndex)); + assertTrue(tvResponse.getFound()); + assertEquals(expectedRespFields.get(i).size(), tvResponse.getTermVectorsList().size()); + assertEquals( + expectedRespFields.get(i), + tvResponse.getTermVectorsList().stream().map(tv -> tv.getFieldName()).collect(Collectors.toList())); + } + } } } diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java index 86184f053cf..f6ecf38e7d8 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java @@ -1575,11 +1575,6 @@ public class RequestConvertersTests extends ESTestCase { assertEquals(HttpGet.METHOD_NAME, request.getMethod()); assertEquals(endpoint.toString(), request.getEndpoint()); - if (hasFields) { - assertThat(request.getParameters(), hasKey("fields")); - String[] requestFields = Strings.splitStringByCommaToArray(request.getParameters().get("fields")); - assertArrayEquals(tvRequest.getFields(), requestFields); - } for (Map.Entry param : expectedParams.entrySet()) { assertThat(request.getParameters(), hasEntry(param.getKey(), param.getValue())); }