I’m working on a project that need to support indexing documents using the opensearch-java client, but I’ve only found very limited examples for indexing documents that look like this…
// Index some data
IndexData indexData = new IndexData("John", "Smith");
IndexRequest<IndexData> indexRequest = new IndexRequest.Builder<IndexData>().index(index).id("1").value(indexData).build();
client.index(indexRequest);
Given the way this example is written, this approach will send documents to OpenSearch one at a time, with all the overhead / handshaking costs for each request.
What I haven’t been able to find are examples using opensearch-java to send multiple documents in bulk or batches. I’ve tried to figure out how to do it using BulkRequest, OpenSearchClient index()/bulk() methods but I haven’t yet been able to sort it out.
Are there any examples somewhere I am missing that show how to do it using opensearch-java? I even went back to older Elasticsearch examples and the client is just different enough that I’ve not been able to figure out the proper incantations.
For reference, I’m working on a class that has a OpenSearchClient
member variable called client
and an abstract method named sendToIndex
has the following signature…
protected abstract void sendToIndex(List<Document> documents) throws Exception;
The Document
class is specific to our codebase (not OpenSearch specific) but has a asMap()
method that can return Map<String,Object>
type.
For now I’m just gonna make the code work by constructing an IndexRequest
and calling client.index(indexRequest)
for each and every Document
object, but I’m concerned about indexing throughput of sending one document at a time vs 50 or 200 or so.
Help or guidance on the opensearch-java way of sending multiple documents for indexing per request would be greatly appreciated… Thanks!
-Michael