9个版本
0.7.0 | 2022年9月27日 |
---|---|
0.6.4 | 2022年8月6日 |
0.6.3 | 2021年12月29日 |
0.6.2 | 2021年8月23日 |
0.1.0 | 2019年4月15日 |
在数据库实现类别中排名124
每月下载量44次
被tinysearch-engine使用
4KB
tinysearch
tinysearch是一个轻量级、快速的全文搜索引擎。它专为静态网站设计。
tinysearch是用Rust编写的,并编译为WebAssembly以在浏览器中运行。
它可以与Jekyll、Hugo、Zola、Cobalt或Pelican等静态网站生成器一起使用。
它真的很小巧吗?
我的博客大约有40篇文章的测试索引文件,创建了一个99KB的WASM有效负载(压缩后49KB,40KB brotli)。
这比上面的演示镜像要小;所以是的。
它是如何工作的
tinysearch是文章《使用布隆过滤器编写全文搜索引擎》中Python代码的Rust/WASM端口。它可以视为lunr.js和elasticlunr的替代品,它们对小型网站来说太重了,会加载大量的JavaScript。
底层使用Xor Filter —— 一种比布隆过滤器和布谷鸟过滤器更小的快速集合成员资格近似数据结构。每篇博客文章都会转换为过滤器,然后使用bincode将其序列化为二进制blob。请注意,底层技术可能会发生变化。
限制
- 只能找到完整的单词。因此,还没有搜索建议(尚未实现)。这是为了减少内存使用而必须做出的权衡。前缀搜索的紧凑数据结构大约比Xor过滤器大10倍。关于前缀搜索紧凑数据结构的新研究可能会在未来解除这一限制。
- 由于我们将所有文章的搜索索引打包成一个静态二进制文件,我们建议只将其用于中小型网站。每篇文章大约需要2 kB未压缩空间(约1 kB压缩)。
安装
需要使用 wasm-pack 来构建WASM模块。使用以下命令安装:
cargo install wasm-pack
为了优化JavaScript输出,您还需要 terser
npm install terser -g
如果您希望将WebAssembly压缩到尽可能小,我们还建议安装 binaryen。在macOS上,您可以使用 homebrew 安装它
brew install binaryen
或者,您可以从 发布页面 下载二进制文件或使用您的操作系统包管理器。
之后,您可以安装 tinysearch 本身
cargo install tinysearch
使用方法
需要一个包含要索引内容的JSON文件作为输入。请参阅 示例文件。
ℹ️ JSON文档中的 body
字段是可选的,可以跳过以仅索引帖子标题。
创建索引后,您可以运行
tinysearch fixtures/index.json
这将为您的网站创建一个WASM模块和JavaScript粘合代码。您可以从任何网络服务器打开 demo.html
来查看结果。
例如,Python有一个内置的网络服务器,可用于快速测试
python3 -m http.server
然后浏览到 http://0.0.0.0:8000/demo.html 来运行演示。
您还可以查看不同静态网站生成器的代码示例 在此。
高级使用
要使用高级选项,请运行
tinysearch --help
请检查在生产环境中托管WebAssembly所需的条件 -- 您需要明确设置gzip MIME类型。
Docker
如果您没有完整的Rust设置,您也可以使用我们的nightly构建Docker镜像。
以下是使用Docker快速尝试tinysearch的方法
# Download a sample blog index from endler.dev
curl -O https://raw.githubusercontent.com/tinysearch/tinysearch/master/fixtures/index.json
# Create the WASM output
docker run -v $PWD:/app tinysearch/cli --engine-version path=\"/engine\" --path /app/wasm_output /app/index.json
默认情况下,使用最新的稳定Alpine Rust镜像。要获取nightly版本,请运行
docker build --build-arg RUST_IMAGE=rustlang/rust:nightly-alpine -t tinysearch/cli:nightly .
高级Docker构建参数
WASM_REPO
:覆盖wasm-pack仓库WASM_BRANCH
:覆盖要使用的仓库分支TINY_REPO
:覆盖tinysearch的仓库TINY_BRANCH
:覆盖tinysearch分支
Github动作
要将tinysearch集成到持续部署管道中,可以使用 github动作。
- name: Build tinysearch
uses: leonhfr/tinysearch-action@v1
with:
index: public/index.json
output_dir: public/wasm
output_types: |
wasm
用户
以下网站使用tinysearch
您也在使用tinysearch吗?请在此处添加您的网站!
维护者
- Matthias Endler (@mre)
- Jorge-Luis Betancourt (@jorgelbg)
- Mad Mike (@fluential)
许可
tinysearch根据您的选择采用Apache License,Version 2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)或MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)。
- Apache License, Version 2.0, (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
at your option.
依赖关系
~0.7–1.3MB
~31K SLoC