7个版本
0.3.0 | 2021年7月14日 |
---|---|
0.2.4 | 2021年3月11日 |
0.2.2 | 2019年12月18日 |
0.1.0 | 2019年12月12日 |
在Rust模式中排名1146
每月下载量710
在5个crate中使用(3 直接使用)
6KB
50 行
Lucene查询构建器Derive
用于为Rust结构体生成Lucene查询构建器的procmacro derive crate
使用方法
use lucene_query_builder::QueryBuilder;
#[derive(QueryBuilder)]
struct Person {
name: String,
age: i32,
}
简单查询
let query = Person::query_builder()
.name("Bob")
.or()
.name("Alice")
.build();
assert_eq!(query, "query=name:Bob OR name:Alice".to_string());
嵌套查询
let query = Person::query_builder()
.expr(Person::query_builder().name("Bob").or().name("Alice"))
.and()
.age("22")
.build();
assert_eq!(
query,
"query=(name:Bob OR name:Alice) AND age:22".to_string()
);
范围查询
let query = Person::query_builder().age_range("7", "77").build();
assert_eq!(query, "query=age:[7 TO 77]".to_string());
重命名构建函数和字段名称
如果您需要重命名生成的方法,可以使用#[query_builder_rename = "名称"]
#[derive(QueryBuilder)]
struct Person {
name: String,
age: i32,
#[query_builder_rename = "fullname"]
complete_name: String,
}
let query = Person::query_builder()
.name("Bob")
.and()
.fullname("Bob Marley")
.build();
assert_eq!(
query,
"query=name:Bob AND complete_name:\"Bob Marley\"".to_string()
);
如果您需要重命名生成的Lucene字段,可以使用#[query_builder_field = "名称"].
#[derive(QueryBuilder)]
struct Person {
name: String,
age: i32,
#[query_builder_rename = "fullname"]
#[query_builder_field = "fullname"]
complete_name: String,
}
let query = Person::query_builder()
.name("Bob")
.and()
.fullname("Bob Marley")
.build();
assert_eq!(
query,
"query=name:Bob AND fullname:\"Bob Marley\"".to_string()
);
忽略字段
如果您需要忽略一个字段,请使用属性宏: #[query_builder_ignore]
依赖项
~1.5MB
~35K SLoC