Обновление проекта : я завершаю работу со Stork. Спасибо всем, кто пользовался Stork на протяжении последних нескольких лет! |
Невероятно быстрый веб-поиск, созданный для статических сайтов.
Stork — библиотека для создания красивых, быстрых и точных интерфейсов полнотекстового поиска в сети.
Он состоит из двух частей. Во-первых, это инструмент командной строки , который индексирует контент и создает файл индекса поиска, который можно загрузить на веб-сервер. Во-вторых, это библиотека Javascript , которая использует этот индексный файл для создания интерактивного интерфейса поиска, который сразу же отображает оптимальные результаты поиска для вашего пользователя по мере его ввода.
Stork построен на Rust, а библиотека Javascript «за кулисами» использует WebAssembly. Начать работу легко, а настроить его в соответствии с вашими потребностями еще проще. Он идеально подходит для сайтов Jamstack и личных блогов, но его можно использовать везде, где вам нужна интерактивная панель поиска.
В настоящее время находится в разработке Джеймсом Литтлом.
Давайте разместим в Интернете окно поиска, которое будет осуществлять поиск по тексту документов федералиста.
Посмотрите эту демонстрацию в прямом эфире на 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 >
Stork подключается к существующему HTML-коду, который вы включаете на свою страницу. Каждый экземпляр Stork должен иметь входной перехватчик и список результатов; эти два элемента должны быть помещены в оболочку, хотя оболочка не является обязательной.
Перехватчик ввода должен иметь атрибут data-stork="federalist"
, где federalist
— это имя, под которым вы регистрируете этот экземпляр поиска. (Таким образом, вы можете иметь на странице несколько независимых окон поиска, каждое из которых указывает на разные экземпляры.) Оно не обязательно должно быть federalist
— вы можете изменить его на все, что захотите.
Список результатов должен представлять собой пустой тег <div>
с атрибутом data-stork="federalist-results"
. Опять же, здесь вы можете изменить federalist
на все, что захотите.
Классы в приведенном выше примере ( stork-input
, stork-output
) предназначены для этой темы. Большинство тем Stork имеют указанный выше формат; документация темы сообщит вам, требует ли она чего-то другого. Вы также можете создать свою собственную тему, после чего стиль и имена классов будут выбираться по вашему усмотрению.
Вам необходимо включить stork.js
, который вы можете загрузить из Stork CDN или разместить самостоятельно. Это загрузит большой двоичный объект Stork WebAssembly и создаст объект Stork, который позволит регистрировать и настраивать индексы.
Затем вам следует зарегистрировать хотя бы один индекс:
stork . register ( "federalist" , "http://files.stork-search.net/federalist.st" ) ;
Создаваемый вами поисковый индекс должен храниться где-то с общедоступным URL-адресом. Зарегистрироваться
При этом индекс, хранящийся по адресу http://files.stork-search.net/federalist.st
регистрируется под именем federalist
; атрибуты data-stork
в HTML будут привязаны к этому имени.
Наконец, вы можете установить некоторые параметры конфигурации того, как ваша панель поиска будет взаимодействовать с индексом и страницей.
Вероятно, вы не захотите добавлять на свой веб-сайт интерфейс, позволяющий осуществлять поиск по газетам федералистов. Вот как сделать панель поиска своей.
Для создания индекса вам понадобится исполняемый файл 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 на свой веб-сайт, сначала загрузите индексный файл на свой веб-сервер, а затем передайте его URL-адрес функции stork.register()
в Javascript вашей веб-страницы.
Вы можете прочитать дополнительную документацию и узнать больше о настройке на сайте проекта: https://stork-search.net.
Для сборки Аиста вам понадобится:
Репозиторий структурирован как типичное рабочее пространство Cargo, с некоторыми изменениями.
stork-*
хранятся пакеты Rust. stork-cli
и stork-wasm
— пакеты верхнего уровня; все остальное — зависимость.js
содержит исходный код Javascript.test-assets
содержит двоичные ресурсы, необходимые для функциональных тестов Stork.local-dev
содержит файлы конфигурации, корпуса и индексные файлы, необходимые для создания и запуска тестовой веб-страницы, используемой для локальной разработки.Вы можете собрать проект, используя точку входа Rust или точку входа Javascript (инструкции по сборке приведены ниже). После создания проекта вы увидите еще три каталога:
target
содержит выходные артефакты двоичной сборкиpkg
содержит промежуточные артефакты сборки WASMdist
содержит окончательные артефакты сборки для Интернета. Если вы заинтересованы в извлечении финальных артефактов сборки 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
создаст индексный файл федералиста.st, на который ссылаются во всем проекте. Он будет выведен в local-dev/test-indexes/federalist.st
.just build-indexer-dev
создаст двоичный файл индексатораcargo run -- <CLI OPTIONS>
запустит двоичный файл индексатора.just build-dev-site
создаст код моста WASM и Javascript, создаст индекс федералиста.st и упакует сайт разработки../scripts/serve.sh
будет обслуживать сайт разработки.Посмотрите Justfile проекта, чтобы увидеть больше доступных скриптов.