#mapping #elasticsearch #强类型 #客户端 #类型 #API 客户端 #文档

elastic_types

Elasticsearch 核心类型和映射 API 的强类型实现

52 个版本

使用旧的 Rust 2015

0.21.0-pre.42019 年 4 月 23 日
0.21.0-pre.22019 年 2 月 23 日
0.20.10 2018 年 5 月 7 日
0.20.9 2018 年 2 月 6 日
0.3.5 2016 年 7 月 18 日

#2409数据库接口

Download history 8/week @ 2024-04-27 8/week @ 2024-05-18 1/week @ 2024-05-25 1/week @ 2024-06-01 3/week @ 2024-06-15 1/week @ 2024-06-22 7/week @ 2024-07-06 15/week @ 2024-07-13 5/week @ 2024-07-20 79/week @ 2024-07-27 1/week @ 2024-08-03

87 每月下载量
3 个 Crates 中使用 (2 个直接使用)

MIT/Apache

270KB
5.5K SLoC

elastic 最新版本 Gitter

elastic 是一个高效的、模块化的 Elasticsearch API 客户端,使用 Rust 编写。API 面向 Elastic Stack 7.x

elastic 提供强类型文档和弱类型查询。

快速参考

还可以查看官方的 elasticsearch Crate!

稳定性

该 Crate 仍然非常不稳定,未来可能会继续发布破坏性的版本,变更日志可能不太详细。

如果您在开源项目中遇到升级问题,请随时 提交问题,我们将提供帮助。目标肯定是在最终提供稳定的 API。

构建状态

平台 频道 状态 (master)
Linux / macOS 稳定/夜间 Build Status
Windows 夜间 Build status

文档

版本 文档
当前 (master) Documentation

示例

elastic 添加到您的 Cargo.toml

[dependencies]
elastic = "0.21.0-pre.5"
elastic_derive = "0.21.0-pre.5"
serde_json = "1"

创建一个 SyncClient 并开始发送请求

#[macro_use]
extern crate elastic_derive;
#[macro_use]
extern crate serde_json;
extern crate elastic;

use serde_json::Value;
use elastic::prelude::*;

// A reqwest HTTP client and default parameters.
// The builder includes the base node url (https://127.0.0.1:9200).
let client = SyncClient::builder().build()?;

let query = "some query string";

// A search request with a freeform body.
let res = client.search::<Value>()
                .index("_all")
                .body(json!({
                    "query": {
                        "query_string": {
                            "query": query
                        }
                    }
                }))
                .send()?;

// Iterate through the hits in the response.
for hit in res.hits() {
    println!("{:?}", hit);
}

elastic 还为使用 tokio 异步 io 栈提供了 AsyncClient。有关完整示例,请参阅 示例 文件夹。

构建文档

文档映射是在编译时从您的 纯旧Rust结构 中派生的。只需添加一个 #[derive(ElasticType)] 属性

#[derive(ElasticType, Serialize, Deserialize)]
struct MyDocument {
	#[elastic(id)]
	pub id: String,
	pub title: String,
	pub timestamp: Date<DefaultDateMapping<EpochMillis>>,
	pub content: Text<DefaultTextMapping>,
}

然后您就可以在 Client 请求方法中使用 MyDocument

更多详细信息请参阅 文档

替代方案

elastic.co 已发布一个官方客户端,elasticsearch。尽管它目前仍处于alpha阶段(截至2020-02-10),但它非常全面,并且大部分代码都是从官方REST API规范中生成的。

此外,如果您想使用强类型Query DSL构建器,请参阅 rs-es。此客户端提供了与Elasticsearch交互的惯用Rust API,它的优点是在编译时而不是运行时知道您的查询将能够解析。

目标

为了通过异步io为Rust提供一个功能齐全且高效的Elasticsearch客户端。Rust为我们提供了许多构建超级高性能且高度可访问库的工具,这是我们希望继续的目标。 elastic 旨在为需要与Elasticsearch一起工作且正在考虑使用Rust的人,以及已经使用Rust的用户。我们希望提供一个解决方案,使Elasticsearch的交互在Rust生态系统内外都具有吸引力。

REST API由一个简单的内联JSON宏(如 serde_jsonjson!)进行覆盖,因此始终可以构建任何查询。这意味着您不需要学习另一个用于与Elasticsearch交互的API;在 Dev Tools 中模拟的查询可以直接复制粘贴到您的Rust源代码中。

此项目的核心重点是Elasticsearch中的文档类型和查询响应的强类型,而不是尝试映射整个Query DSL。

可以根据需要将Elastic的插件产品(如 watchergraph)作为功能门控模块添加。

许可证

以下任一许可证下授权

依赖关系

~10MB
~192K SLoC