#查询构建器 #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 • Rust 包仓库 146/week @ 2024-03-13 • Rust 包仓库 94/week @ 2024-03-20 • Rust 包仓库 163/week @ 2024-03-27 • Rust 包仓库 117/week @ 2024-04-03 • Rust 包仓库 123/week @ 2024-04-10 • Rust 包仓库 123/week @ 2024-04-17 • Rust 包仓库 129/week @ 2024-04-24 • Rust 包仓库 163/week @ 2024-05-01 • Rust 包仓库 283/week @ 2024-05-08 • Rust 包仓库 168/week @ 2024-05-15 • Rust 包仓库 86/week @ 2024-05-22 • Rust 包仓库 414/week @ 2024-05-29 • Rust 包仓库 238/week @ 2024-06-05 • Rust 包仓库 147/week @ 2024-06-12 • Rust 包仓库 225/week @ 2024-06-19 • Rust 包仓库 72/week @ 2024-06-26 • Rust 包仓库

每月下载量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