Closed
Description
Java API client version
8.11.1
Java version
17
Elasticsearch Version
8.4.3
Problem description
The Multi term vectors API supports requests with artificial documents.
POST /_mtermvectors
{
"docs": [
{
"_index": "myIndex",
"doc": {
"foo" : "bar"
}
}
]
}
This is not possible, as the Java client requires an _id within the document:
String artificialDoc = String.format("{\"%s\": \"%s\"}", "foo", "bar");
JsonData jsonData = JsonData.fromJson(artificialDoc);
MtermvectorsRequest request = MtermvectorsRequest.of(b -> b.docs(d -> d.index(index).doc(jsonData)));
Stacktrace:
co.elastic.clients.util.MissingRequiredPropertyException: Missing required property 'MultiTermVectorsOperation.id'
at co.elastic.clients.util.ApiTypeHelper.requireNonNull(ApiTypeHelper.java:76)
at co.elastic.clients.elasticsearch.core.mtermvectors.MultiTermVectorsOperation.<init>(MultiTermVectorsOperation.java:99)
at co.elastic.clients.elasticsearch.core.mtermvectors.MultiTermVectorsOperation.<init>(MultiTermVectorsOperation.java:57)
But if I add the requested id, my cluster will correctly respond:
co.elastic.clients.elasticsearch._types.ElasticsearchException: [es/mtermvectors] failed: [parse_exception] failed to parse term vectors request. either [id] or [doc] can be specified, but not both!
at co.elastic.clients.transport.ElasticsearchTransportBase.getApiResponse(ElasticsearchTransportBase.java:345)
at co.elastic.clients.transport.ElasticsearchTransportBase.performRequest(ElasticsearchTransportBase.java:147)
So if the MultiTermVectorsOperation validation could just let me create the request without an id, it would work.