Meilisearch Rust SDK
Meilisearch | Meilisearch Cloud | 文档 | Discord | 路线图 | 网站 | 常见问题
⚡ 为 Rust 开发者编写的 Meilisearch API 客户端 🦀
Meilisearch Rust 是为 Rust 开发者准备的 Meilisearch API 客户端。
Meilisearch 是一个开源搜索引擎。了解更多关于 Meilisearch 的信息。
目录
📖 文档
本 README 包含了使用这个 Meilisearch SDK 所需的所有文档。
有关如何使用 Meilisearch 的一般信息(如 API 参考、教程、指南和深入文章),请参阅我们的主要文档网站。
⚡ 提升您的 Meilisearch 体验
使用 Meilisearch Cloud 告别服务器部署和手动更新。立即开始 14 天免费试用!无需信用卡。
🔧 安装
要使用 meilisearch-sdk
,请在您的 Cargo.toml
中添加以下内容:
[dependencies]
meilisearch-sdk = "0.27.1"
以下可选依赖项也可能有用:
futures = "0.3" # 如果您不使用异步运行时,可以阻塞异步函数
serde = { version = "1.0", features = ["derive"] }
这个 crate 是 async
的,但您可以选择使用异步运行时如 tokio 或者仅仅阻塞 futures。
您可以启用 sync
功能使大多数结构体成为 Sync
。这可能会稍微慢一些。
不使用 serde 也可以使用这个 crate,但许多功能需要 serde。
运行 Meilisearch 实例
这个 crate 需要一个 Meilisearch 服务器来运行。
有许多简单的方法可以下载并运行 Meilisearch 实例。
例如,在终端中使用 curl
命令:
# 安装 Meilisearch
curl -L https://install.meilisearch.com | sh
# 启动 Meilisearch
./meilisearch --master-key=masterKey
注意:您也可以通过 Homebrew 或 APT 下载 Meilisearch。
🚀 快速开始
添加文档
use meilisearch_sdk::client::*;
use serde::{Serialize, Deserialize};
use futures::executor::block_on;
#[derive(Serialize, Deserialize, Debug)]
struct Movie {
id: usize,
title: String,
genres: Vec<String>,
}
#[tokio::main(flavor = "current_thread")]
async fn main() {
// 创建客户端(不发送任何请求,因此不会失败)
let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY)).unwrap();
// 索引是存储文档的地方。
let movies = client.index("movies");
// 在索引中添加一些电影。如果 'movies' 索引不存在,Meilisearch 会在您首次添加文档时创建它。
movies.add_documents(&[
Movie { id: 1, title: String::from("Carol"), genres: vec!["Romance".to_string(), "Drama".to_string()] },
Movie { id: 2, title: String::from("Wonder Woman"), genres: vec!["Action".to_string(), "Adventure".to_string()] },
Movie { id: 3, title: String::from("Life of Pi"), genres: vec!["Adventure".to_string(), "Drama".to_string()] },
Movie { id: 4, title: String::from("Mad Max"), genres: vec!["Adventure".to_string(), "Science Fiction".to_string()] },
Movie { id: 5, title: String::from("Moana"), genres: vec!["Fantasy".to_string(), "Action".to_string()] },
Movie { id: 6, title: String::from("Philadelphia"), genres: vec!["Drama".to_string()] },
], Some("id")).await.unwrap();
}
使用 uid
,您可以通过任务检查文档添加的状态(enqueued
、canceled
、processing
、succeeded
或 failed
)。
基本搜索
// Meilisearch 支持容错:
println!("{:?}", client.index("movies_2").search().with_query("caorl").execute::<Movie>().await.unwrap().hits);
输出:
[Movie { id: 1, title: String::from("Carol"), genres: vec!["Romance", "Drama"] }]
Json 输出:
{
"hits": [{
"id": 1,
"title": "Carol",
"genres": ["Romance", "Drama"]
}],
"offset": 0,
"limit": 10,
"processingTimeMs": 1,
"query": "caorl"
}
自定义搜索
let search_result = client.index("movies_3")
.search()
.with_query("phil")
.with_attributes_to_highlight(Selectors::Some(&["*"]))
.execute::<Movie>()
.await
.unwrap();
println!("{:?}", search_result.hits);
Json 输出:
{
"hits": [
{
"id": 6,
"title": "Philadelphia",
"_formatted": {
"id": 6,
"title": "<em>Phil</em>adelphia",
"genre": ["Drama"]
}
}
],
"offset": 0,
"limit": 20,
"processingTimeMs": 0,
"query": "phil"
}
自定义带过滤器的搜索
如果你想启用过滤功能,必须将你的属性添加到索引设置的 filterableAttributes
中。
let filterable_attributes = [
"id",
"genres",
];
client.index("movies_4").set_filterable_attributes(&filterable_attributes).await.unwrap();
你只需执行一次此操作。
请注意,每当你更新 filterableAttributes
时,Meilisearch 都会重建你的索引。根据你的数据集大小,这可能需要一些时间。你可以使用任务来跟踪进度。
然后,你可以执行搜索:
let search_result = client.index("movies_5")
.search()
.with_query("wonder")
.with_filter("id > 1 AND genres = Action")
.execute::<Movie>()
.await
.unwrap();
println!("{:?}", search_result.hits);
Json 输出:
{
"hits": [
{
"id": 2,
"title": "Wonder Woman",
"genres": ["Action", "Adventure"]
}
],
"offset": 0,
"limit": 20,
"estimatedTotalHits": 1,
"processingTimeMs": 0,
"query": "wonder"
}
自定义 HttpClient
默认情况下,SDK 使用 reqwest
来进行 HTTP 调用。
SDK 允许你通过自己实现 HttpClient
特征并使用 new_with_client
方法初始化 Client
来自定义 HTTP 客户端。
你可能会对 futures-unsend
功能感兴趣,它允许你指定一个非 Send 的 HTTP 客户端。
Wasm 支持
SDK 通过 reqwest 支持 wasm。不过,在导入时你需要启用 futures-unsend
功能。
🌐 在浏览器中使用 WASM 运行
这个 crate 完全支持 WASM。
WASM 版本和原生版本之间唯一的区别是,原生版本在 Error 枚举中多了一个变体(Error::Http
)。这应该不会有太大影响,但我们也可以在 WASM 中添加这个变体。
然而,开发一个在网络浏览器中运行的程序需要一个与 CLI 程序非常不同的设计。要查看使用 Meilisearch 的简单 Rust 网络应用示例,请参阅我们的演示。
警告:如果没有可用的 Window(例如:Web 扩展),meilisearch-sdk
将会崩溃。
🤖 与 Meilisearch 的兼容性
本包保证与 Meilisearch v1.x 版本兼容,但某些功能可能不存在。请查看问题以获取更多信息。
⚙️ 贡献
欢迎为这个项目提供任何新的贡献!
如果你想了解更多关于开发工作流程的信息或想要贡献,请访问我们的贡献指南以获取详细说明!
Meilisearch 提供并维护许多像这样的 SDK 和集成工具。我们希望为各种项目提供令人惊叹的搜索体验。如果你想贡献、提出建议或只是想了解当前的进展,请访问我们的 integration-guides 仓库。