28个发布版本

使用旧版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.1.4 2016年12月31日

#293 in HTTP客户端

Download history 73/week @ 2024-04-02 13/week @ 2024-04-23 1/week @ 2024-05-14 3/week @ 2024-05-21 6/week @ 2024-06-04 1/week @ 2024-06-11 1/week @ 2024-06-18 75/week @ 2024-07-02 1/week @ 2024-07-09 12/week @ 2024-07-16

每月88次下载
4个crate中使用(通过elastic_reqwest

MIT/Apache

265KB
7K SLoC

elastic 最新版本 Gitter

elastic 是一个高效的、模块化的用于 Elasticsearch 的 Rust API客户端。该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 规范生成的。

此外,如果您想使用强类型查询 DSL 构建器,请参阅 rs-es。此客户端提供了用于与 Elasticsearch 交互的 Rust 风格 API,并且可以在编译时而不是运行时知道您的查询是否可以解析。

目标

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

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

此项目的核心重点是针对 Elasticsearch 中的文档类型和查询响应进行强类型处理,而不是试图映射整个查询 DSL。

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

许可证

以下任一许可证下提供

依赖关系

~1MB
~14K SLoC