Elasticsearch Client Update


#1

It’s been a while since I’ve done a dedicated update for the Elasticsearch client I’ve been working on, but have been making steady progress for the last year or so. Any feedback is most welcome!

Functionality is distributed across a bunch of independent crates so you can choose what you need. Over the top of that I’m working on a meta-crate that brings them together in a batteries-included client.

The landscape now looks like:

elastic_reqwest

A lightweight REST API client using reqwest.

elastic_requests

REST API request types generated from the official spec. It makes liberal use of Cow to be zero-copy where possible. The code generation is all using syn and quote.

elastic_types

A strongly-typed document mapping and serialisation. It handles building mapping json and serialising/deserialising documents based on that mapping. It’s especially useful for date fields that can use different formats. It takes inspiration from the Python client, but is fully typed so you annotate struct fields with mapping data using standard Rust types.

elastic

A meta-crate that wraps up elastic_reqwest, elastic_requests and elastic_types into a simple interface for consumers. This is the current work in progress.

I’m taking an intentionally different approach to rs-es, which is an alternative client that offers nice builders for the Elasticsearch Query DSL. My aim is more freeform queries over strongly-typed documents. That’s based on the way I tend to use Elasticsearch personally so it might not suit everybody.