#查询构建器 #Lucene #结构体 #生成

lucene_query_builder

用于为Rust结构体生成Lucene查询构建器的procmacro derive crate

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

Download history 146/week @ 2024-03-13 94/week @ 2024-03-20 163/week @ 2024-03-27 117/week @ 2024-04-03 123/week @ 2024-04-10 123/week @ 2024-04-17 129/week @ 2024-04-24 163/week @ 2024-05-01 283/week @ 2024-05-08 168/week @ 2024-05-15 86/week @ 2024-05-22 414/week @ 2024-05-29 238/week @ 2024-06-05 147/week @ 2024-06-12 225/week @ 2024-06-19 72/week @ 2024-06-26

每月下载量710
5个crate中使用(3 直接使用)

MIT许可协议

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