19个版本 (稳定版)

2.0.0-beta.22023年3月5日
1.6.0 2023年1月30日
1.5.0 2022年6月1日
1.4.2 2022年3月23日
0.7.2 2020年6月19日

#4 in #索引文件

Download history 35/week @ 2024-04-16 86/week @ 2024-04-23 3/week @ 2024-05-07 21/week @ 2024-05-14 25/week @ 2024-05-21 12/week @ 2024-05-28 21/week @ 2024-06-04 10/week @ 2024-06-11 2/week @ 2024-06-18 4/week @ 2024-06-25 15/week @ 2024-07-02 34/week @ 2024-07-09 52/week @ 2024-07-16 73/week @ 2024-07-23 35/week @ 2024-07-30

每月下载 197次

Apache-2.0

200KB
5K SLoC

Stork

项目更新: 我在Stork上的工作即将结束。

感谢过去几年里使用Stork的每个人!
-James


超快网页搜索,专为静态网站设计。

Crates.io Codecov GitHub branch checks state

Stork是一个库,用于在网页上创建美丽、快速和准确的全文搜索界面。

它由两部分组成。首先,它是一个 命令行工具,可以索引内容并创建一个可以上传到Web服务器的搜索索引文件。其次,它是一个 JavaScript库,使用该索引文件构建一个交互式搜索界面,用户在键入时立即显示最佳搜索结果。

Stork是用Rust编写的,JavaScript库在幕后使用WebAssembly。它易于开始,并且定制起来更加简单,以适应您的需求。它非常适合Jamstack网站和个人博客,但可以在需要交互式搜索栏的任何地方使用。

James Little 开发中

Gif of Stork in Action

入门指南

让我们将一个搜索框上线,用于在联邦党人文集的文本中进行搜索。

https://stork-search.net上查看此演示的实时效果。

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Federalist Search</title>
  </head>
  <body>
    <div class="stork-wrapper">
      <input data-stork="federalist" class="stork-input" />
      <div data-stork="federalist-output" class="stork-output"></div>
    </div>
    <script src="https://files.stork-search.net/stork.js"></script>
    <script>
      stork.register(
        "federalist",
        "http://files.stork-search.net/federalist.st"
      );
    </script>
  </body>
</html>

步骤1:包含HTML

Stork连接到您页面上包含的现有HTML。每个Stork实例都必须有一个输入钩子和一个结果列表;这两个元素应该放在一个包装器中,尽管包装器是可选的。

输入钩子应该具有 data-stork="federalist" 属性,其中 federalist 是您注册该搜索实例的名称。这样,您可以在一个页面上有多个独立的搜索框,它们指向不同的实例。这不一定是 federalist -- 您可以将其更改为您想要的任何内容。

结果列表应该是一个空的 <div> 标签,具有属性 data-stork="federalist-results"。同样,在这里,您可以将 federalist 更改为您想要的任何内容。

上述示例(stork-inputstork-output)中的类是为主题设计的。大多数 Stork 主题假定上述格式;主题文档将告诉您是否需要不同的内容。您也可以设计自己的主题,此时样式和类名由您决定。

步骤 2:包含 JavaScript

您需要包含 stork.js,您可以从 Stork CDN 加载或自己托管。这将加载 Stork WebAssembly blob 并创建 Stork 对象,这将允许注册和配置索引。

然后,您应该至少注册一个索引

stork.register("federalist", "http://files.stork-search.net/federalist.st");

您构建的搜索索引需要存储在某个具有公开 URL 的位置。要注册

这将在 http://files.stork-search.net/federalist.st 下注册名为 federalist 的索引;HTML 中的 data-stork 属性将连接到该名称。

最后,您可以设置一些配置选项,以确定搜索栏如何与索引和页面交互。

构建自己的索引

您可能不想在自己的网站上添加一个允许您搜索联邦党人文集的界面。以下是如何使您的搜索栏属于您自己的方法。

要构建索引,您需要在您的计算机上安装 Stork 可执行文件,您可以在 最新 GitHub 发布版 中安装或通过运行 cargo install stork-search --locked(如果您已安装 Rust 工具链)来安装。

搜索索引基于文档结构:您向 Stork 提供磁盘上的文档列表以及有关这些文档的一些元数据,然后 Stork 将根据这些文档的内容构建其搜索索引。

首先,您需要一个配置文件,它描述了其他内容,例如该文件列表

[input]
base_directory = "test/federalist"
files = [
    {path = "federalist-1.txt", url = "/federalist-1/", title = "Introduction"},
    {path = "federalist-2.txt", url = "/federalist-2/", title = "Concerning Dangers from Foreign Force and Influence"},
    {path = "federalist-3.txt", url = "/federalist-3/", title = "Concerning Dangers from Foreign Force and Influence 2"},
    {path = "federalist-4.txt", url = "/federalist-4/", title = "Concerning Dangers from Foreign Force and Influence 3"},
    {path = "federalist-5.txt", url = "/federalist-5/", title = "Concerning Dangers from Foreign Force and Influence 4"},
    {path = "federalist-6.txt", url = "/federalist-6/", title = "Concerning Dangers from Dissensions Between the States"},
    {path = "federalist-7.txt", url = "/federalist-7/", title = "Concerning Dangers from Dissensions Between the States 2"},
    {path = "federalist-8.txt", url = "/federalist-8/", title = "The Consequences of Hostilities Between the States"},
    {path = "federalist-9.txt", url = "/federalist-9/", title = "The Union as a Safeguard Against Domestic Faction and Insurrection"},
    {path = "federalist-10.txt", url = "/federalist-10/", title = "The Union as a Safeguard Against Domestic Faction and Insurrection 2"}
]

这个 TOML 文件描述了所有文档的基础目录,然后列出每个文档以及该文档将被找到的网页 URL 以及该文档的标题。

从那里,您可以运行以下命令来构建您的搜索索引

$ stork build --input federalist.toml --output federalist.st

这将创建一个位于 federalist.st 的新文件。您可以使用相同的命令行工具搜索它

$ stork search --index federalist.st --query "liberty"

要将在您的网站上嵌入 Stork 搜索界面,首先将索引文件上传到您的 web 服务器,然后将其 URL 传递到您的网页 Javascript 中的 stork.register() 函数。

更进一步

您可以在项目的网站上阅读更多文档,了解有关定制的更多信息:[https://stork-search.net](https://stork-search.net)

开发

要构建 Stork,您需要

  • Rust,使用稳定工具链
  • wasm-pack
  • yarn
  • Just 如果您想使用与我相同的构建脚本(否则您可以阅读 Justfile 并手动运行脚本)

仓库结构类似于一个典型的 Cargo 工作空间,并进行了一些修改。

  • stork-* 目录包含 Rust 包。 stork-clistork-wasm 是顶级包;其余一切都是依赖项。
  • js 包含 JavaScript 源代码。
  • test-assets 包含 Stork 功能测试所需的二进制资产。
  • local-dev 包含构建和运行用于本地开发的测试网页所需的配置文件、语料库和索引文件。

您可以使用 Rust 入口点或 JavaScript 入口点构建项目(以下列出了构建说明)。构建项目后,您将看到另外三个目录

  • target 包含输出二进制构建工件
  • pkg 包含中间 WASM 构建工件
  • dist 包含用于网络的最终构建工件

如果您对提取最终的 Stork 构建工件感兴趣,可以在使用 yarn build 构建项目后提取以下文件

  • /target/release/stork
  • /dist/stork.js
  • /dist/stork.wasm

为生产构建项目

  • just build-indexer 将索引器二进制文件构建到 target/release/stork
  • just build-js 将构建 WASM 二进制文件和 JavaScript 代码桥接文件到 dist 目录
  • just build-federalist-index 将项目中的 federalist.st 索引文件构建。它将输出到 local-dev/test-indexes/federalist.st

为开发构建项目

  • just build-indexer-dev 将构建索引器二进制文件
  • cargo run -- <CLI OPTIONS> 将运行索引器二进制文件
  • just build-dev-site 将构建 WASM 和 JavaScript 桥接代码,构建 federalist.st 索引,并打包开发网站
  • ./scripts/serve.sh 将提供开发网站

查看项目的 Justfile 了解更多可用的脚本。

依赖项

~15–32MB
~451K SLoC