elasticsearch-java
elasticsearch-java copied to clipboard
mtermvectors with artificial documents not possible
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.