#elasticsearch #search #iterator #results #parser #strongly-typed #client

elastic_responses

解析Elasticsearch的搜索结果,并使用方便的迭代器展示结果

31个版本

使用旧的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.5.1 2017年3月7日

#1838数据库接口

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

MIT/Apache

72KB
1.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的全功能且高效的Elasticsearch客户端。Rust为我们提供了构建超级性能但高度可访问库的许多工具,这是我们希望继续追求的目标。elastic 面向需要与Elasticsearch协作且考虑使用Rust的人,以及已经在使用Rust的用户。我们希望提供一个解决方案,让Elasticsearch的交互在Rust生态系统内外都很有吸引力。

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

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

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

许可证

许可协议之一

依赖关系

~1.8–2.5MB
~52K SLoC