48 个版本

0.4.22 2024年8月1日
0.4.21 2024年4月5日
0.4.20 2024年1月5日
0.4.19 2023年9月18日
0.1.6 2021年11月16日

#47 in 数据库接口

Download history 964/week @ 2024-05-04 1153/week @ 2024-05-11 1114/week @ 2024-05-18 1134/week @ 2024-05-25 1231/week @ 2024-06-01 979/week @ 2024-06-08 897/week @ 2024-06-15 780/week @ 2024-06-22 654/week @ 2024-06-29 669/week @ 2024-07-06 642/week @ 2024-07-13 769/week @ 2024-07-20 1062/week @ 2024-07-27 997/week @ 2024-08-03 518/week @ 2024-08-10 505/week @ 2024-08-17

每月3,240次下载

MIT/Apache

725KB
16K SLoC

用 Rust 编写的强类型 Elasticsearch DSL

Crates.io Crates.io Crates.io Docs.io Rust

一个高级库,提供强类型 DSL,与官方 Elasticsearch 查询 DSL 一对一映射。

特性

  • 强类型查询
  • 强类型聚合
  • 强类型补全
  • 响应结构
  • 自动跳过空查询,使 DSL 使用起来更愉快
  • 该包不依赖于 elasticsearch-rs,可以用作任何 HTTP 客户端的独立库来调用 Elasticsearch

安装

在 Cargo.toml 中添加 elasticsearch-dsl 包及其版本

[dependencies]
elasticsearch-dsl = "0.4"

文档

该库的文档可在 docs.rs 上找到

快速入门

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));
}
{
  "_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
      }
    }
  ]
}

有关更多信息,请参阅 示例

许可证

根据您的选择,许可协议为 Apache License, Version 2.0MIT 许可证

依赖

~1.7–2.8MB
~53K SLoC