#http-client #elasticsearch #synchronous #requests #api-client #query #req

elastic_reqwest

基于 reqwest 的轻量级 Elasticsearch API 实现

28 个版本

使用 Rust 2015 版本

0.20.10 2018年5月7日
0.20.9 2018年2月6日
0.20.8 2017年12月17日
0.20.6 2017年11月30日
0.1.2 2016年12月31日

#1 in #req

Download history 13/week @ 2024-04-21 5/week @ 2024-04-28 4/week @ 2024-05-12 9/week @ 2024-05-19 2/week @ 2024-05-26 13/week @ 2024-06-02 1/week @ 2024-06-09 3/week @ 2024-06-16 6/week @ 2024-06-23 1/week @ 2024-06-30 12/week @ 2024-07-14 205/week @ 2024-07-28 4/week @ 2024-08-04

221 每月下载量
2 个crate中使用(通过 elastic

MIT/Apache 协议

370KB
9K SLoC

elastic_reqwest 最新版本

提供了一种无需麻烦、同步的 reqwest 实现的 Elasticsearch REST API。使用 reqwest 客户端非常简单;除了创建一个用于请求的 reqwest::Client 对象外,基本上不需要设置。该 reqwest 客户端是通用的,适用于任何需要即时请求的场景。它还将请求过程分为几个逻辑方法,这些方法可以很容易地跨越异步边界。

此库是高级 elastic 客户端的 HTTP 后端。

示例

elastic_reqwest 客户端是 reqwest 的一个薄层;它只是将函数映射到路由。序列化和反序列化 HTTP 内容的责任由调用者承担。

  • 对于查询序列化,json_str crate 提供了 json_str! 宏来创建临时的 API 查询。
  • 对于类型序列化和反序列化,请参阅 elastic_types

目前针对 master Elasticsearch 分支,目标为 5.x。这将通过未来的功能得到稳定化。

elastic_reqwestjson_str 添加到您的 Cargo.toml

[dependencies]
elastic_reqwest = "*"
reqwest = "*"

# Optional for request bodies
json_str = "*"

检查集群的可用性

extern crate elastic_reqwest as cli;
extern crate reqwest;

use cli::{ElasticClient, ParseResponse, parse};
use cli::req::PingRequest;
use cli::res::PingResponse;

let (client, params) = cli::default().unwrap();

let http_res = client.elastic_req(&params, PingRequest::new()).unwrap();

let parse_res = parse::<PingResponse>().from_response(http_res).unwrap();

自定义 Elasticsearch 集群的地址

let (mut client, mut params) = elastic::default();
params.base_url = String::from("http://eshost:9200");

查询 DSL 查询

#[macro_use]
extern crate json_str;
extern crate elastic_reqwest as cli;
extern crate reqwest;

use cli::{ElasticClient, ParseResponse, parse};
use cli::req::SearchRequest;
use cli::res::SearchResponse;
 
let (client, params) = cli::default().unwrap();

let search = {
    let body = json_str!({
        query: {
            filtered: {
                query: {
                    match_all: {}
                },
                filter: {
                    geo_distance: {
                        distance: "20km",
                        location: {
                            lat: 37.776,
                            lon: -122.41
                        }
                    }
                }
            }
        }
    });
    
    SearchRequest::for_index_ty("myindex", "mytype", body)
};

let http_res = client.elastic_req(&params, search).unwrap();

let search_res = parse::<SearchResponse>().from_response(http_res).unwrap();

依赖项

~15–24MB
~426K SLoC