12 个版本 (6 个破坏性更新)

0.7.0 2021 年 2 月 7 日
0.6.1 2020 年 5 月 21 日
0.5.1 2020 年 3 月 18 日
0.4.1 2020 年 2 月 28 日
0.1.0 2019 年 12 月 12 日

#194 in 数据库实现

MIT 许可证

46KB
918

pallet

Docs Crates.io

基于 sledtantivy 构建的可搜索文档数据存储。

提供一个类型化树接口到 sled 数据库,具有标准数据存储操作(findcreateupdatedelete),同时也有 Lucene/Elasticsearch 风格的搜索。

包含的 pallet_macros 包提供了一个简单的方法来为数据结构推导 pallet::DocumentLike

用法

#[macro_use]
extern crate serde;

#[derive(Serialize, Deserialize, Debug, pallet::DocumentLike)]
#[pallet(tree_name = "books")]
pub struct Book {
    #[pallet(default_search_field)]
    title: String,
    #[pallet(default_search_field)]
    description: Option<String>,
    #[pallet(index_field_type = "u64")]
    rating: u8,
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let temp_dir = tempfile::TempDir::new_in(".")?;

    let db = sled::open(temp_dir.path().join("db"))?;

    let store = pallet::Store::builder().with_db(db).with_index_dir(temp_dir.path()).finish()?;

    let books = vec![
        Book {
            title: "The Old Man and the Sea".into(),
            description: Some(
                "He was an old man who fished alone in a skiff in \
            the Gulf Stream and he had gone eighty-four days \
            now without taking a fish."
                    .into(),
            ),
            rating: 10,
        },
        Book {
            title: "The Great Gatsby".into(),
            description: Some("About a man and some other stuff".into()),
            rating: 8,
        },
    ];

    let _ = store.create_multi(&books)?;

    let books = store.search("man AND rating:>8")?;

    println!("{:?}", books);

    Ok(())
}

pallet_macros

请参考用法示例。以下属性可以用来自定义实现

  • tree_name:容器级属性,用于指定 sled::Tree 名称。
  • index_field_name:重命名搜索模式中的字段。
  • index_field_type:设置索引字段类型,必须实现 Into<tantivy::schema::Value>
  • index_field_options:设置索引字段选项。默认情况下,字符串类型的选项是 tantivy::schema::TEXT,而数值类型的选项是 tantivy::schema::INDEXED
  • default_search_field:将此字段包含在默认搜索字段列表中。
  • skip_indexing:不索引此字段。

更新日志

0.7.0

  • 更新 sled/tantivy 依赖项(感谢 @lberezy)

0.6.0

  • 添加 serde-cbor 序列化支持(感谢 @minioin)

0.5.0

  • Document内部类型上添加Deref
  • 使索引编写器持久化

0.4.0

  • 添加各种构建器。
  • indextree功能拆分出来。
  • 设置search::Searcher特质和其他搜索辅助工具。

0.3.2

  • 添加一些文档

0.3.0

  • pallet_macros添加到派生pallet::DocumentLike

当前版本:0.7.0

许可证:MIT

依赖项

~21MB
~354K SLoC