1 个不稳定版本
0.1.0 | 2020年10月19日 |
---|
#2877 在 数据库接口
27KB
496 行
meilimelo
Meilimelo是一个简单的库,用于对MeiliSearch执行查询。
示例
use meilimelo::prelude::*;
#[meilimelo::schema]
struct Employee {
firstname: String,
lastname: String,
roles: Vec<String>
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let meili = MeiliMelo::new("https://meilisearch.example.com:7700")
.with_secret_key("helloworld");
let employees = meili
.search("employees")
.query("johnson")
.run::<Employee>()
.await?;
println!("Hits: {}", people.hits);
for person in &people {
println!("{} {}", person.firstname, person.lastname);
}
Ok(())
}
meilimelo::schema
属性宏允许您将架构派生为可用于MeiliSearch搜索结果的类型(例如,当需要时自动添加_formatted
子对象)。
查询
MeiliSearch的大多数查询参数都由meilimelo
处理。它们都可以通过请求构建器添加。
查询、筛选、限制和偏移量
meili
.search("employees")
.query("johnson")
.filters("age > 23 AND location = Paris")
.limit(10)
.offset(5);
分面
meili
.search("employees")
.facets(FacetBuilder::new("company", "ACME Corp").or("company", "Big Corp").and("roles", "CXM").build())
.distribution(&["roles"]);
输出设置
meili
.attributes(&["firstname", "lastname", "bio"])
.crop(&[Crop::At("bio", 32)])
.crop_length(10)
.highlight(&["bio"])
.matches(true);
索引管理
可以执行索引的基本操作
// Creating index
meili.create_index("employees", "Employees")?;
// Listing indices
for index in &meili.indices().await? {
println!("{}", index.name);
}
文档管理
您可以像这样索引一组Serialize
文档(也支持列出和删除文档)
// Indexing documents
let doc = Employee {
firstname: "Luke".to_string(),
lastname: "Skywalker".to_string()
};
meili.insert("employees", vec![doc]);
// Looping over in-order documents
for doc in &meili.list_documents::<Employee>("employees").await? {
println!("{} {}", doc.firstname, doc.lastname);
}
// Getting document via primary key
let doc = meili.get_document::<Employee>("employees", "lskywalker").await?;
println!("{} {}", doc.firstname, doc.lastname);
// Deleting document
meili.delete_document("employees", "lskywalker").await?;
依赖项
~10–14MB
~280K SLoC