Skip to content

Commit dd44376

Browse files
authored
[7.x] Send the fields param in body instead of URL params (#52948)
1 parent d863c51 commit dd44376

File tree

4 files changed

+47
-11
lines changed

4 files changed

+47
-11
lines changed

client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java

-1
Original file line numberDiff line numberDiff line change
@@ -718,7 +718,6 @@ static Request termVectors(TermVectorsRequest tvrequest) throws IOException {
718718
Params params = new Params();
719719
params.withRouting(tvrequest.getRouting());
720720
params.withPreference(tvrequest.getPreference());
721-
params.withFields(tvrequest.getFields());
722721
params.withRealtime(tvrequest.getRealtime());
723722
request.addParameters(params.asMap());
724723
request.setEntity(createEntity(tvrequest, REQUEST_BODY_CONTENT_TYPE));

client/rest-high-level/src/main/java/org/elasticsearch/client/core/TermVectorsRequest.java

+1
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
258258
builder.field("_type", type);
259259
}
260260
if (id != null) builder.field("_id", id);
261+
if (fields != null) builder.field("fields", fields);
261262
// set values only when different from defaults
262263
if (requestPositions == false) builder.field("positions", false);
263264
if (requestPayloads == false) builder.field("payloads", false);

client/rest-high-level/src/test/java/org/elasticsearch/client/CrudIT.java

+46-5
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
import java.util.List;
7777
import java.util.Map;
7878
import java.util.concurrent.atomic.AtomicReference;
79+
import java.util.stream.Collectors;
7980

8081
import static java.util.Collections.singletonMap;
8182
import static org.hamcrest.Matchers.containsString;
@@ -1216,16 +1217,20 @@ public void testMultiTermvectors() throws IOException {
12161217
.put("number_of_shards", 1)
12171218
.put("number_of_replicas", 0)
12181219
.build();
1219-
String mappings = "\"properties\":{\"field\":{\"type\":\"text\"}}";
1220+
String mappings = "\"properties\":{\"field\":{\"type\":\"text\"}, \"field2\":{\"type\":\"text\"}}";
12201221
createIndex(sourceIndex, settings, mappings);
1222+
final Map<String, String> doc1 = new HashMap<>();
1223+
doc1.put("field", "value1");
1224+
doc1.put("field2", "hello world");
1225+
final Map<String, String> doc2 = new HashMap<>();
1226+
doc2.put("field", "value2");
1227+
doc2.put("field2", "foo var");
12211228
assertEquals(
12221229
RestStatus.OK,
12231230
highLevelClient().bulk(
12241231
new BulkRequest()
1225-
.add(new IndexRequest(sourceIndex).id("1")
1226-
.source(Collections.singletonMap("field", "value1"), XContentType.JSON))
1227-
.add(new IndexRequest(sourceIndex).id("2")
1228-
.source(Collections.singletonMap("field", "value2"), XContentType.JSON))
1232+
.add(new IndexRequest(sourceIndex).id("1").source(doc1, XContentType.JSON))
1233+
.add(new IndexRequest(sourceIndex).id("2").source(doc2, XContentType.JSON))
12291234
.setRefreshPolicy(RefreshPolicy.IMMEDIATE),
12301235
RequestOptions.DEFAULT
12311236
).status()
@@ -1270,5 +1275,41 @@ public void testMultiTermvectors() throws IOException {
12701275
}
12711276
}
12721277

1278+
{
1279+
// test the behavior of fields param
1280+
MultiTermVectorsRequest mtvRequest = new MultiTermVectorsRequest();
1281+
TermVectorsRequest tvRequest1 = new TermVectorsRequest(sourceIndex, "1");
1282+
tvRequest1.setFields("field");
1283+
mtvRequest.add(tvRequest1);
1284+
1285+
TermVectorsRequest tvRequest2 = new TermVectorsRequest(sourceIndex, "2");
1286+
tvRequest2.setFields("field2");
1287+
mtvRequest.add(tvRequest2);
1288+
1289+
TermVectorsRequest tvRequest3 = new TermVectorsRequest(sourceIndex, "2");
1290+
tvRequest3.setFields("field", "field2");
1291+
mtvRequest.add(tvRequest3);
1292+
1293+
MultiTermVectorsResponse mtvResponse =
1294+
execute(mtvRequest, highLevelClient()::mtermvectors, highLevelClient()::mtermvectorsAsync);
1295+
final List<String> expectedFields = new ArrayList<>();
1296+
expectedFields.add("field");
1297+
expectedFields.add("field2");
1298+
List<List<String>> expectedRespFields = new ArrayList<>();
1299+
expectedRespFields.add(Collections.singletonList("field"));
1300+
expectedRespFields.add(Collections.singletonList("field2"));
1301+
expectedRespFields.add(expectedFields);
1302+
List<TermVectorsResponse> responses = mtvResponse.getTermVectorsResponses();
1303+
assertEquals(expectedRespFields.size(), responses.size());
1304+
for (int i = 0; i < responses.size(); i++) {
1305+
TermVectorsResponse tvResponse = responses.get(i);
1306+
assertThat(tvResponse.getIndex(), equalTo(sourceIndex));
1307+
assertTrue(tvResponse.getFound());
1308+
assertEquals(expectedRespFields.get(i).size(), tvResponse.getTermVectorsList().size());
1309+
assertEquals(
1310+
expectedRespFields.get(i),
1311+
tvResponse.getTermVectorsList().stream().map(tv -> tv.getFieldName()).collect(Collectors.toList()));
1312+
}
1313+
}
12731314
}
12741315
}

client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java

-5
Original file line numberDiff line numberDiff line change
@@ -1575,11 +1575,6 @@ public void testTermVectors() throws IOException {
15751575

15761576
assertEquals(HttpGet.METHOD_NAME, request.getMethod());
15771577
assertEquals(endpoint.toString(), request.getEndpoint());
1578-
if (hasFields) {
1579-
assertThat(request.getParameters(), hasKey("fields"));
1580-
String[] requestFields = Strings.splitStringByCommaToArray(request.getParameters().get("fields"));
1581-
assertArrayEquals(tvRequest.getFields(), requestFields);
1582-
}
15831578
for (Map.Entry<String, String> param : expectedParams.entrySet()) {
15841579
assertThat(request.getParameters(), hasEntry(param.getKey(), param.getValue()));
15851580
}

0 commit comments

Comments
 (0)