Loading

Elasticsearch Rust Client

This is the official Rust client for Elasticsearch. Full documentation is hosted on docs.rs—this page provides only an overview.

Further resources:

  • Fluent builders for all Elasticsearch REST API endpoints
  • Persistent keep-alive connections
  • TLS support with system or custom certificates
  • Proxy support with authentication
  • Async support with Tokio

The Elasticsearch Rust client is forward compatible; meaning that the client supports communicating with greater minor versions of Elasticsearch. Elasticsearch language clients are also backwards compatible with lesser supported minor Elasticsearch versions.

To create a client to make API calls to Elasticsearch running on https://localhost:9200

 let client = Elasticsearch::default(); 

Alternatively, you can create a client to make API calls against Elasticsearch running on a specific url::Url

 let transport = Transport::single_node("https://example.com")?; let client = Elasticsearch::new(transport); 

If you’re running against an Elasticsearch deployment in Elastic Cloud, a client can be created using a Cloud ID and credentials retrieved from the Cloud web console

 let cloud_id = "<cloud id from cloud web console>"; let credentials = Credentials::Basic("<username>".into(), "<password>".into()); let transport = Transport::cloud(cloud_id, credentials)?; let client = Elasticsearch::new(transport); 

The following makes an API call to tweets/_search with the json body {"query":{"match":{"message":"Elasticsearch"}}}

 let response = client .search(SearchParts::Index(&["tweets"])) .from(0) .size(10) .body(json!({ "query": { "match": { "message": "Elasticsearch rust" } } })) .send() .await?; let response_body = response.json::<Value>().await?; let took = response_body["took"].as_i64().unwrap(); for hit in response_body["hits"]["hits"].as_array().unwrap() { // print the source document println!("{:?}", hit["_source"]); }