1 个不稳定版本

0.1.0 2024 年 2 月 17 日

#2146数据库接口

Apache-2.0

2.5MB
61K SLoC

Rust 的强类型 OpenSearch 客户端

Crates.io Documentation [License](

这是一个高级库,提供了一个强类型 DSL,与官方 OpenSearch 查询 DSL 一一对应。这是基于 https://github.com/vinted/elasticsearch-dsl-rs 的 Opensearch 衍生版本

功能

  • 强类型请求和响应
  • 流式批量处理
  • 流式响应
  • 备份/还原客户端的初始实现
  • 基于 Vinted 的 Elasticsearch 查询 DSL 的全类型查询
  • 展示不同代码用法的全面测试

安装

在 Cargo.toml 中添加 opensearch-client crate 和版本

[dependencies]
opensearch-client = {version="0.1.0", features=["indices"]}

每个功能都是可选的,可以根据需要启用或禁用。以下功能可用

  • 默认:没有启用功能
  • 全部:启用所有功能
  • quickwit:启用 quickwit 兼容性
  • 搜索
  • cat
  • 集群
  • 索引:也启用 ["搜索"]
  • 摄入
  • 节点
  • mtermvectors
  • 机器学习
  • 远程
  • 安全
  • 快照
  • 任务
  • 工具:启用 "索引"、"摄入"、"机器学习"

文档

该库的文档可在 docs.rs 上找到

快速入门

mod tests {
  use serde_json::json;
  use testcontainers::clients;
  use opensearch_testcontainer::*;
  use tracing_test::traced_test;

  use crate::{url::Url, OsClientBuilder};

  #[tokio::test(flavor = "multi_thread", worker_threads = 2)]
  #[traced_test]
  async fn bulker_ingester() -> Result<(), Box<dyn std::error::Error>> {
    let docker = clients::Cli::default();
    let os_image = OpenSearch::default();
    let node = docker.run(os_image.clone());
    let host_port = node.get_host_port_ipv4(9200);

    let client = OsClientBuilder::new()
      .accept_invalid_certificates(true)
      .base_url(Url::parse(&format!("https://127.0.0.1:{host_port}")).unwrap())
      .basic_auth(os_image.username(), os_image.password())
      .build();

    let test_size: u32 = 100000;
    let bulker = client.bulker().bulk_size(1000).max_concurrent_connections(10).build();
    for i in 0..test_size {
      bulker
        .index("test", &json!({"id":i}), Some(i.to_string()))
        .await
        .unwrap();
    }
    bulker.flush().await;
    let statitics = bulker.statistics();
    drop(bulker);

    assert_eq!(statitics.index_actions, test_size as u64);
    assert_eq!(statitics.create_actions, 0);
    assert_eq!(statitics.delete_actions, 0);
    assert_eq!(statitics.update_actions, 0);
    client.indices().refresh_post().send().await.unwrap();

    let count = client.count().index("test").send().await.unwrap().into_inner();
    assert_eq!(count.count, test_size);
    Ok(())
  }
}

如果可用,将使用以下环境变量

  • OPENSEARCH_URL:opensearch 服务器地址 (默认: https://127.0.0.1:9200)
  • OPENSEARCH_USER:OpenSearch 服务器默认用户 (默认: admin)
  • OPENSEARCH_PASSWORD:OpenSearch 服务器默认密码 (默认: admin)

更多示例请参阅 示例

许可

根据您的选择,许可协议为 Apache 许可证,版本 2.0MIT 许可证

依赖关系

~11–25MB
~391K SLoC