¡Pruébalo!
BlogSearch es una herramienta de blogs que permite un motor de búsqueda sin ningún servicio externo.
Esto es como DocSearch pero para blogs.
Más técnicamente, BlogSearch es un motor de búsqueda de texto completo puro del lado del cliente para sitios web estáticos, alimentado por SQLite compilado para WebAssembly.
Búsqueda puramente del lado del cliente
No hay servidor para mantener. Sin costo de servicio.
Fácil. Está construido para blogs y sitios web estáticos en mente.
Admite marcos de blog populares:
Jekyll
Gatsby
Hugo
... ¡y cualquier sitio web estático!
SQLite-Wasm: ejecute SQLite en la web, utilizando WebAssembly. Este proyecto está hecho para las necesidades de BlogSearch.
El flujo de trabajo consta de dos pasos: 1. Construye un archivo de índice | |
1. Cree un archivo de índice | 2. Habilite la búsqueda |
El archivo de índice
Luego copia el | Su página web debe cargar el motor BlogSearch. Solo hay un motor disponible:
Cargue el motor usando la etiqueta <Script> o en el archivo JavaScript. Una vez que el motor obtenga el archivo |
A lo largo del proyecto, los términos "índice" y "base de datos" a menudo son mixtos, pero significan el mismo archivo sqlite .db.wasm en la mayor parte del caso. |
Jekyll (Jekyll-BlogSearch)
Gatsby (Gatsby-Plugin-BlogSearch)
Hugo (BlogSearch-Rawler)
Crawler genérico (BlogSearch-Crawler)
Los usuarios deben configurar una herramienta de creación de índice para recopilar el valor de los campos para trabajar correctamente el motor de búsqueda.
La herramienta de construcción de índice debe recopilar los siguientes campos predeterminados para cada publicaciones:
title : El título de la publicación.
body : el contenido de la publicación.
url : El enlace de URL a la publicación.
categories : una lista de categorías separadas por , a las que pertenece la publicación.
tags : una lista de etiquetas separadas por , que la publicación tiene.
Los usuarios pueden configurar todos los campos utilizando las siguientes propiedades:
| Ejemplo | Resultado |
|---|---|
| |
{
...other field options...
categories: {
+ disabled: true,
},
} | |
En el siguiente ejemplo, el tamaño del archivo de índice | |
{
...other field options...
body: {
+ hasContent: false,
},
} | |
| |
{
...other field options...
url: {
+ indexed: false,
},
} | |
Su herramienta de construcción de índice puede tener opciones específicas para la herramienta para el campo (por ejemplo, opción parser para BlogSearch-Crawler). Consulte la documentación de su herramienta de construcción de índices para más detalles. |
< link rel =" stylesheet " href =" https://cdn.jsdelivr.net/npm/[email protected]/dist/basic.css " />
< script src =" https://cdn.jsdelivr.net/npm/[email protected]/dist/blogsearch.umd.js " > </ script >
< script src =" https://cdn.jsdelivr.net/npm/[email protected]/dist/worker.umd.js " > </ script >
< input id =" blogsearch_input_element " type =" search " placeholder =" Search Text " class =" form-control " />
< script >
blogsearch ( {
dbPath : 'your_index_file.db.wasm' ,
inputSelector : '#blogsearch_input_element' ,
} ) ;
</ script >Para obtener más detalles y opciones, vaya al subdirectorio de BlogSearch.
El motor de búsqueda básicamente es SQLite con la extensión FTS5, compilada a WebAssembly. El SQLite FTS5 ofrece el algoritmo de clasificación BM25 incorporado para la funcionalidad de búsqueda. Como SQLite es el motor de base de datos más portátil, ¡también puede abrir cualquier archivo de base de datos SQLite en la web! Gracias a SQLite, podemos escribir fácilmente complementos para BlogSearch con solo unas pocas consultas SQL en diferentes lenguajes de programación.
.db.wasm se recomienda el índice de extensión de archivo? No es un archivo binario websembly. ¿Por qué no solo .db ? Traté de hacerlo .db pero hay un gran problema: el archivo de índice no está comprimido por GZIP por el servidor web. Servicios web populares de blog (especialmente las páginas de GitHub) generalmente sirven un archivo .db como application/octet-stream y no comprimen el archivo. Al mentir que es application/wasm archivo binario websembly .wasm
La compresión es importante porque reduce significativamente el tamaño del archivo. Vi que el tamaño se reduce hasta 1/3.
Para evitar el problema de "pero funciona en mi máquina", se recomienda usar Docker para construir tareas.
Aunque este repositorio es un monoreso donde cada subproyecto tiene propios scripts de compilación, puede ejecutar fácilmente tareas en el directorio raíz.
| Si desea construir solo un subproyecto específico, vaya al subdirectorio y ejecute los comandos de hilo. |
Las herramientas requeridas son las siguientes:
GNU Make (V4.2 o superior se recomienda, ¡se advierte para los usuarios de MacOS!)
estibador
compuesto de acopolador
hilo
Aunque es un proyecto JS para que se utilice porque es mucho más configuratoria y admite la construcción en paralelo.
Para versiones específicas de NodeJS utilizadas en el proyecto, mire el DockerFile.
# Or yarn install, without docker
make install-in-docker # Or yarn install, without docker
make lib-in-dockermake start-in-docker
# You can access the demo page via 0.0.0.0:9000 # Or make test, without docker
make test-in-docker
# Run it in parallel
make test-in-docker -j4 --output-sync=target| ¡Esto llevará mucho tiempo! (~ 30 Mintues) |
# It is highly recommended to use docker here
make examples-in-docker && make demo-in-docker| ¡Esto llevará mucho tiempo! (~ 30 Mintues) |
# Or make all, without docker
make all-in-docker
# Or
# Parallel builds. This reduces the build time almost an half on my machine.
make all-in-docker -j4 --output-sync=targetmake clean
# Then run any commands above make bash-in-dockerEste proyecto está inspirado en DocSearch y tiene una reimplementación en TypeScript.
Aparte de eso, el proyecto es la licencia MIT. Ver licencia