#autocomplete #fst #wasm-binary #data #targeting #stored

porigon

基于FST的轻量级自动补全库,针对WebAssembly和内存中存储的数据

4个版本 (重大更新)

0.4.0 2022年2月1日
0.3.0 2022年1月13日
0.2.0 2021年5月10日
0.1.0 2020年3月29日

#900 in WebAssembly

MIT 协议

37KB
598

porigon

用Rust编写的基于FST的轻量级自动补全库,针对WebAssembly和内存中存储的数据

Build status

MIT协议授权。

预期用途

这个库的想法是围绕 fst crate 提供一个轻量级、符合惯用的API,允许你在WebAssembly环境中构建、序列化和反序列化以及查询FST。它是构建可在网页、边缘(例如Cloudflare Worker)或后端(node.js)使用的自动补全服务的理想起点。

现有的解决方案,例如 tantivy,不适合使用,因为它们太重(wasm二进制大小超过1MB)或无法编译为WebAssembly。如果你在寻找一个更全面的全文搜索引擎,请查看下面的替代方案列表。

文档

https://docs.rs/porigon

安装

只需将相应的条目添加到你的 Cargo.toml 依赖列表中

[dependencies]
porigon = "0.1.0"

示例

此示例演示了在内存中构建一个 Searchable,对其执行 StartsWith 查询,并使用 TopScoreCollector 收集前3个文档。

use porigon::{Searchable, TopScoreCollector};

fn main() -> Result<(), Box<dyn std::error::Error>> {
  let items = vec!(
    ("bar".as_bytes(), 1),
    ("foo".as_bytes(), 2),
    ("foobar".as_bytes(), 3)
  );
  let searchable = Searchable::build_from_iter(items)?;

  let mut collector = TopScoreCollector::new(3);
  collector.consume_stream(
    searchable
      .starts_with("foo")
      .rescore(|_, index, _| index * 2)
  );

  let docs = collector.top_documents();
  assert_eq!(docs[0].index, 3);
  
  Ok(())
}

请查看文档或 wasm-example 以获取更多示例。

替代方案

如果你在寻找一个更通用的全文搜索引擎,请查看这些替代方案

依赖项

~2.5MB
~26K SLoC