25 个发布版本

使用旧的 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.0 2017 年 2 月 20 日

#2963数据库接口

Download history 57/week @ 2024-04-01 2/week @ 2024-04-15 16/week @ 2024-04-22 6/week @ 2024-05-13 17/week @ 2024-05-20 11/week @ 2024-06-03 4/week @ 2024-06-10 7/week @ 2024-06-17 7/week @ 2024-06-24 120/week @ 2024-07-01 26/week @ 2024-07-15

154 每月下载量
6 个 Crates 中使用 (2 直接使用)

MIT/Apache

28KB
749

elastic 最新版本 Gitter

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

此外,如果您想使用强类型查询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的文档类型和查询响应上实现强类型,而不是尝试映射整个查询DSL。

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

许可证

根据以下之一授权

依赖项

~4.5MB
~93K SLoC