go-elasticsearch v9.4.2 - BulkIndexer Routing Fix

   |   3 minute read   |   Using 509 words

elastic/go-elasticsearch v9.4.2 was published on June 22, 2026. This Go client release focuses on one esutil bug fix: BulkIndexer now omits an empty routing query param when no routing value is set. The original entry is on the GitHub release page.

The full release notes and downloads are on the GitHub release page.

BulkIndexer Stops Sending Empty Routing

The only listed bug fix in v9.4.2 is in esutil, where BulkIndexer stops adding an empty routing query param to bulk requests. The release note points to issue #1515 and commit 3845bb1.

That sounds small because it is small. It is still worth taking seriously if bulk indexing is a hot path in a service. Empty request params are annoying in client libraries because they blur intent. A caller that did not set routing should not look like a caller that set routing to an empty value.

With this release, the request shape is cleaner. If code builds bulk jobs without a routing value, BulkIndexer should leave that query param out. That makes request logging easier to read and removes one small source of confusion when checking how documents are sent to Elasticsearch.

Why This Matters For Bulk Indexing

Bulk indexing usually sits in boring but important paths: ingest jobs, sync workers, event consumers, and batch backfills. These paths often run with a lot of volume and little human attention. Small client details can become noisy when every request is logged, traced, or inspected during an incident.

The fix does not add a new API. It does not change how routing works when a real routing value is provided. The practical change is about omission. If routing is empty, the client should not send a routing query param at all.

That is useful for operators who compare client behavior against raw Elasticsearch requests. It also helps application owners who have tests or request captures around bulk ingestion. The behavior now better matches the likely intent of the caller.

Scope Of This Patch

The release notes for v9.4.2 list no breaking changes, no deprecations, and no migration steps. They also do not mention new endpoints, generated API updates, or broader transport changes.

In other words, treat this as a narrow patch release. The change is centered on BulkIndexer request construction in esutil. If a service does not use BulkIndexer, there may be nothing visible to test beyond the usual dependency update checks.

That is boring, which is fine for a patch release. Boring is what you want when the change sits close to request generation.

For services that do use BulkIndexer, a focused check is enough. Run the code path that builds bulk requests without routing and confirm that the outgoing URL no longer carries an empty routing query param. If there are tests around captured request URLs, this is the place where an expected value may need to change.

The release is not marked as a prerelease. It is a normal tagged release for the v9 Go client line.

Where to get it



denis256 at denis256.dev