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使用

Apache-2.0/MIT

4KB

tinysearch

Logo

CI

tinysearch是一个轻量级、快速的全文搜索引擎。它专为静态网站设计。

tinysearch是用Rust编写的,并编译为WebAssembly以在浏览器中运行。
它可以与Jekyll、Hugo、Zola、Cobalt或Pelican等静态网站生成器一起使用。

Demo

它真的很小巧吗?

我的博客大约有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)。

at your option.

依赖关系

~0.7–1.3MB
~31K SLoC