36个版本

0.21.0-pre.52019年7月7日
0.21.0-pre.22019年2月23日
0.20.10 2018年5月7日
0.20.9 2018年2月6日
0.10.0 2017年3月20日

#960数据库接口

Download history 1/week @ 2023-12-11 10/week @ 2023-12-18 9/week @ 2023-12-25 25/week @ 2024-01-01 411/week @ 2024-01-15 770/week @ 2024-01-22 788/week @ 2024-01-29 788/week @ 2024-02-05 691/week @ 2024-02-12 621/week @ 2024-02-19 504/week @ 2024-02-26 342/week @ 2024-03-04 72/week @ 2024-03-11 19/week @ 2024-03-18 18/week @ 2024-03-25

每月459次下载
用于 2 crates

MIT/Apache

1MB
22K SLoC

elastic 最新版本 Gitter

elastic 是一个高效、模块化的针对 ElasticsearchRust API客户端。API针对Elastic Stack 7.x

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

快速参考

稳定性

这个crate仍然非常不稳定,并且在未来一段时间内可能会继续发布破坏性版本,变更日志不太详细。

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

构建状态

平台 通道 状态 (master)
Linux / OSX 稳定/夜间 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 (http://localhost: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

有关详细信息,请参阅 文档

替代方案

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

目标

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

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

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

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

许可

以下任一许可下授权

依赖项

~24–39MB
~718K SLoC