Project Icon

meilisearch-rust

Meilisearch 的 Rust 语言搜索引擎客户端

meilisearch-rust 是 Meilisearch 搜索引擎的 Rust 语言客户端。它支持异步操作、WebAssembly 和自定义 HTTP 客户端,提供文档管理、搜索和过滤等功能。该项目兼容 Meilisearch v1.x,支持高亮显示等高级特性。meilisearch-rust 简化了 Rust 应用与 Meilisearch 的集成,为开发者提供灵活的搜索解决方案。

Meilisearch-Rust

Meilisearch Rust SDK

Meilisearch | Meilisearch Cloud | 文档 | Discord | 路线图 | 网站 | 常见问题

crates.io Tests License Bors enabled

⚡ 为 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

注意:您也可以通过 HomebrewAPT 下载 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,您可以通过任务检查文档添加的状态(enqueuedcanceledprocessingsucceededfailed)。

基本搜索

// 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 仓库。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号