An open API service indexing awesome lists of open source software.

https://github.com/vinted/elasticsearch-dsl-rs

Strongly typed Elasticsearch DSL written in Rust
https://github.com/vinted/elasticsearch-dsl-rs

elasticsearch rust

Last synced: about 1 year ago
JSON representation

Strongly typed Elasticsearch DSL written in Rust

Awesome Lists containing this project

README

          

# Strongly typed Elasticsearch DSL written in Rust

[![Crates.io](https://img.shields.io/crates/v/elasticsearch-dsl)](https://crates.io/crates/elasticsearch-dsl)
[![Crates.io](https://img.shields.io/crates/l/elasticsearch-dsl)](https://crates.io/crates/elasticsearch-dsl)
[![Crates.io](https://img.shields.io/crates/d/elasticsearch-dsl)](https://crates.io/crates/elasticsearch-dsl)
[![Docs.io](https://docs.rs/elasticsearch-dsl/badge.svg)](https://docs.rs/elasticsearch-dsl)
[![Rust](https://github.com/vinted/elasticsearch-dsl-rs/actions/workflows/CI.yml/badge.svg)](https://github.com/vinted/elasticsearch-dsl-rs/actions/workflows/CI.yml)

A high level library, giving a strongly typed DSL that maps one to one with the official
Elasticsearch query DSL.

## Features

- Strongly typed queries
- Strongly typed aggregations
- Strongly typed completions
- Response structures
- Automatically skips empty queries making DSL pleasant to use
- Crate doesn't depend on [elasticsearch-rs](https://github.com/elastic/elasticsearch-rs) and can
be used as a standalone library with any HTTP client to call Elasticsearch

## Installation

Add `elasticsearch-dsl` crate and version to Cargo.toml

```toml
[dependencies]
elasticsearch-dsl = "0.4"
```

## Documentation

Documentation for the library is available on [docs.rs](https://docs.rs/elasticsearch-dsl)

## Quick start

```rust
use elasticsearch_dsl::*;

fn main() {
let query = Search::new()
.source(false)
.stats("statistics")
.from(0)
.size(30)
.query(
Query::bool()
.must(Query::multi_match(
["title", "description"],
"you know, for search",
))
.filter(Query::terms("tags", ["elasticsearch"]))
.should(Query::term("verified", true).boost(10)),
)
.aggregate(
"country_ids",
Aggregation::terms("country_id")
.aggregate("catalog_ids", Aggregation::terms("catalog_id"))
.aggregate("company_ids", Aggregation::terms("company_id"))
.aggregate(
"top1",
Aggregation::top_hits()
.size(1)
.sort(FieldSort::ascending("user_id")),
),
)
.rescore(Rescore::new(Query::term("field", 1)).query_weight(1.2));
}
```

```json
{
"_source": false,
"stats": ["statistics"],
"from": 0,
"size": 30,
"query": {
"bool": {
"must": [
{
"multi_match": {
"fields": ["title", "description"],
"query": "you know, for search"
}
}
],
"filter": [{ "terms": { "tags": ["elasticsearch"] } }],
"should": [{ "term": { "verified": { "value": true, "boost": 10.0 } } }]
}
},
"aggs": {
"country_ids": {
"terms": { "field": "country_id" },
"aggs": {
"catalog_ids": { "terms": { "field": "catalog_id" } },
"company_ids": { "terms": { "field": "company_id" } },
"top1": {
"top_hits": {
"size": 1,
"sort": [{ "user_id": { "order": "asc" } }]
}
}
}
}
},
"rescore": [
{
"query": {
"rescore_query": { "term": { "field": { "value": 1 } } },
"query_weight": 1.2
}
}
]
}
```

See [examples](examples) for more.

#### License


Licensed under either of Apache License, Version
2.0
or MIT license at your option.