[7.x] Send the fields param in body instead of URL params (#52948)

This commit is contained in:
Dan Hermann 2020-02-28 08:57:35 -06:00 committed by GitHub
parent d863c510da
commit dd44376d27
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 47 additions and 11 deletions

View File

@ -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));

View File

@ -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);

View File

@ -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<String, String> doc1 = new HashMap<>();
doc1.put("field", "value1");
doc1.put("field2", "hello world");
final Map<String, String> 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<String> expectedFields = new ArrayList<>();
expectedFields.add("field");
expectedFields.add("field2");
List<List<String>> expectedRespFields = new ArrayList<>();
expectedRespFields.add(Collections.singletonList("field"));
expectedRespFields.add(Collections.singletonList("field2"));
expectedRespFields.add(expectedFields);
List<TermVectorsResponse> 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()));
}
}
}
}

View File

@ -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<String, String> param : expectedParams.entrySet()) {
assertThat(request.getParameters(), hasEntry(param.getKey(), param.getValue()));
}