go-elasticsearch v9.4.2 - Empty Routing Parameter Cleanup

go-elasticsearch v9.4.2 was published on June 22, 2026, as a regular release of the official Go client for Elasticsearch. The useful change for ingestion code is narrow but practical: esutil.BulkIndexer now omits an empty routing query parameter instead of sending it on bulk requests.

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

Bulk indexing without empty routing

The v9.4.2 release fixes the esutil BulkIndexer path tracked in #1515 and committed in 3845bb1. When a caller has no routing value, the helper should leave routing out of the query string. That is what this tag changes.

For data pipelines that write documents into Elasticsearch, empty routing is not the same as no routing. Elasticsearch routing controls shard target selection for an operation. If application code passes an empty value through a client helper, the request is harder to reason about at the boundary between pipeline config and the storage client. The fix makes the default path cleaner: no routing value means no routing query parameter.

This is the kind of client change that looks small in a changelog but matters in operational traces. Bulk write traffic is usually inspected through request logs, proxy logs, or cluster side diagnostics. Removing an empty parameter gives operators a cleaner request shape when they are comparing traffic from several loaders.

Impact on ingestion jobs

BulkIndexer is common in crawlers, content loaders, and document sync tasks where each item maps to an index operation. Many jobs compute routing only for selected datasets, tenants, or index layouts. With this fix, callers that leave routing empty do not leak an empty query argument into the request layer.

The most likely affected code is shared indexing glue. A single wrapper may serve batch loaders, CDC style jobs, and web content ingestion. That wrapper may accept an optional routing field from upstream config. Omitting empty values makes that optional behavior match the intent of the config: if the field is blank, the request should not claim that routing was set.

This also helps teams that compare client versions during a rollout. The visible request difference is specific. The release notes do not describe changes to payload encoding, retry behavior, authentication, transport setup, or Elasticsearch API coverage. The point of the release is the empty routing parameter in bulk indexing.

Narrow release surface

This is a bug fix release, not a feature train. The notes list one item under Bug Fixes, and the project does not mark v9.4.2 as a prerelease. There are no breaking changes or migration steps in the release notes.

That small surface is still useful. Client libraries sit between application code and cluster behavior. Fixing how empty request parameters are serialized reduces ambiguity without asking pipeline owners to rewrite indexing code. If your jobs already set a real routing value, the release notes do not describe a change to that path. If routing is empty, this version changes the request by leaving the query parameter out.

The practical review is straightforward. Check any wrapper that builds esutil.BulkIndexer requests from optional config, especially where routing is filled from tenant metadata, source partition data, or content taxonomy fields. The expected result is not a new setting. It is a cleaner request when that setting has no value.

Where to get it