O TineSearch é um mecanismo de pesquisa leve, rápido e de texto completo. Ele foi projetado para sites estáticos.
O TineSearch está escrito em ferrugem e depois compilado ao WebAssembly para executar em um navegador.
Ele pode ser usado junto com geradores de sites estáticos como Jekyll, Hugo, Zola, Cobalto ou Pelicano.

O arquivo de índice de teste do meu blog com cerca de 40 postagens cria uma carga útil do WASM de 99kb (49kb Gzipped, 40kb Brotli).
Isso é menor que a imagem de demonstração acima; Então, sim.
O TineSearch é uma porta de ferrugem/WASM do código Python do artigo "Escrevendo um mecanismo de pesquisa de texto completo usando filtros Bloom". Pode ser visto como uma alternativa ao LUNR.JS e ELASSTLUNR, que são pesados demais para sites menores e carregam muito JavaScript.
Sob o capô, ele usa um filtro XOR - umaestrutura de dados para a aproximação rápida da associação ao conjunto que é menor que os filtros Bloom e Cuckoo. Cada post do blog é convertido em um filtro que será serializado em uma bolha binária usando o Bincode. Observe que as tecnologias subjacentes estão sujeitas a alterações.
O WASM-PACK é necessário para construir o módulo WASM. Instale com
cargo install wasm-packPara otimizar a saída JavaScript, você também precisará de TERSER:
npm install terser -g
Se você deseja tornar o WebAssembly o menor possível, recomendamos a instalação do Binaryen. No macOS, você pode instalá -lo com homebrew:
brew install binaryenComo alternativa, você pode baixar o binário na página de lançamento ou usar o gerenciador de pacotes do SO.
Depois disso, você pode instalar o próprio Tinysearch:
cargo install tinysearch
Um arquivo JSON, que contém o conteúdo para indexar, é necessário como entrada. Por favor, dê uma olhada no arquivo de exemplo.
O campo body no documento JSON é opcional e pode ser ignorado para indexar os títulos de postagem.
Depois de criar o índice, você pode executar
tinysearch fixtures/index.json
Isso criará um módulo WASM e o código de cola JavaScript para integrá -lo ao seu site. Você pode abrir a demo.html de qualquer servidor da web para ver o resultado.
Por exemplo, o Python possui um servidor da web embutido que pode ser usado para um teste rápido:
python3 -m http.server
Em seguida, navegue para http://0.0.0.0:8000/demo.html para executar a demonstração.
Você também pode dar uma olhada nos exemplos de código para diferentes geradores de sites estáticos aqui.
Para opções de uso avançado, execute
tinysearch --help
Verifique o que é necessário para hospedar o WebAssembly na produção - você precisará definir explicitamente os tipos de MIME GZIP.
Se você não tiver uma configuração de ferrugem completa disponível, também pode usar nossas imagens de Docker noturnas.
Aqui está como tentar rapidamente o TINysearch com o Docker:
# 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.jsonPor padrão, a imagem de ferrugem alpina mais recente é usada. Para ficar todas as noites, corra
docker build --build-arg RUST_IMAGE=rustlang/rust:nightly-alpine -t tinysearch/cli:nightly .WASM_REPO : substitua o repositório de pacote WASMWASM_BRANCH : substitua a filial do repositório para usarTINY_REPO : repositório de substituição do TineSearchTINY_BRANCH : Substruir Tinysearch Branch Para integrar o TINySearch em pipelines de implantação contínua, uma ação do GitHub está disponível.
- name : Build tinysearch
uses : leonhfr/tinysearch-action@v1
with :
index : public/index.json
output_dir : public/wasm
output_types : |
wasm Os sites a seguir usam o Tinysearch:
Você também está usando o tinysearch? Adicione seu site aqui!
TineSearch está licenciado em qualquer um dos
por sua opção.