Essayez-le!
BlogSearch est un outil de blogs qui permet un moteur de recherche sans aucun service externe.
C'est comme DocSearch mais pour les blogs.
Plus techniquement, BlogSearch est un pur moteur de recherche en texte complet côté client pour les sites Web statiques, alimentés par SQLite compilés sur WebAssembly.
Recherche purement côté client
Pas de serveur à maintenir. Pas de coût de service.
Facile. Il est conçu pour les blogs et les sites Web statiques à l'esprit.
Prend en charge les cadres de blog populaires:
Jekyll
Gatsby
Hugo
… Et tous les sites Web statiques!
SQLITE-WASM: Exécutez SQLite sur le Web, en utilisant WebAssembly. Ce projet est réalisé pour les besoins de BlogSearch.
Le workflow est composé de deux étapes: 1. Vous créez un fichier d'index | |
1. Créez un fichier d'index | 2. Activer la recherche |
Le fichier d'index
Ensuite, vous copiez le | Votre page Web devrait charger le moteur de recherche de blogs. Il n'y a qu'un seul moteur disponible:
Chargez le moteur à l'aide de la balise <cript> ou dans le fichier javascript. Une fois que le moteur a approché correctement le fichier |
Tout au long du projet, les termes "index" et "base de données" sont souvent mitigés, mais ils signifient le même fichier SQLite .db.wasm dans la plupart du cas. |
Jekyll (Jekyll-BlogSearch)
Gatsby (Gatsby-Plugin-BlogSearch)
Hugo (BlogSearch-Crawler)
Crawler générique (BlogSearch-Crawler)
Les utilisateurs doivent configurer un outil de construction d'index pour collecter la valeur des champs afin de travailler correctement le moteur de recherche.
L'outil de construction d'index doit collecter les champs par défaut suivants pour chaque public:
title : Le titre du Post.
body : le contenu de la publication.
url : le lien URL vers le message.
categories : une liste ( , ) des catégories auxquelles le poste appartient.
tags : une liste de balises séparées ( , ).
Les utilisateurs peuvent configurer tous les champs en utilisant les propriétés suivantes:
| Exemple | Résultat |
|---|---|
| |
{
...other field options...
categories: {
+ disabled: true,
},
} | |
Dans l'exemple suivant, la taille du fichier d'index | |
{
...other field options...
body: {
+ hasContent: false,
},
} | |
| |
{
...other field options...
url: {
+ indexed: false,
},
} | |
Votre outil de construction d'index peut avoir des options spécifiques à l'outil pour le champ (par exemple, l'option parser pour BlogSearch-Crawler). Voir la documentation de votre outil de construction d'index pour plus de détails. |
< 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 >Pour plus de détails et d'options, accédez au sous-répertoire de BlogSearch.
Le moteur de recherche est essentiellement SQLite avec l'extension FTS5, compilé sur WebAssembly. Le SQLite FTS5 propose l'algorithme de classement BM25 intégré pour la fonctionnalité de recherche. Comme SQLite est le moteur de base de données le plus portable, vous pouvez également ouvrir tous les fichiers de base de données SQLite sur le Web! Grâce à SQLite, nous pouvons facilement écrire des plugins pour BlogSearch avec seulement quelques requêtes SQL dans différents langages de programmation.
.db.wasm est-il recommandé d'index d'extension de fichier? Ce n'est pas un fichier binaire WebAssembly. Pourquoi pas simplement .db ? J'ai essayé de le faire .db mais il y a un gros problème: le fichier d'index n'est pas compressé par le serveur Web. Les services Web de blog populaires (en particulier les pages GitHub) servent généralement un fichier .db en tant application/octet-stream et ne compressent pas le fichier. En mensant qu'il s'agit d' application/wasm fichier binaire WebAssembly .wasm
La compression est importante car elle réduit considérablement la taille du fichier. J'ai vu que la taille est réduite jusqu'à 1/3.
Pour éviter «mais cela fonctionne sur mon problème de machine», il est fortement recommandé d'utiliser Docker pour construire des tâches.
Bien que ce référentiel soit un monorepo où chaque sous-projets possède ses propres scripts de construction, vous pouvez facilement exécuter des tâches dans le répertoire racine.
| Si vous souhaitez créer un sous-projet spécifique uniquement, accédez au sous-répertoire et exécutez les commandes de fil. |
Les outils requis sont les suivants:
GNU Make (v4.2 ou plus est recommandé, être averti pour les utilisateurs de macOS!)
docker
composer docker
fil
Bien qu'il s'agisse d'un projet de projet JS est utilisé car il est beaucoup plus configuratble et prend en charge la construction en parallèle.
Pour les versions NodeJS spécifiques utilisées dans le projet, veuillez consulter le 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| Cela prendra beaucoup de temps! (~ 30 Mintues) |
# It is highly recommended to use docker here
make examples-in-docker && make demo-in-docker| Cela prendra beaucoup de temps! (~ 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-dockerCe projet est inspiré par DocSearch et a une réimplémentation de celui-ci dans TypeScript.
En dehors de cela, le projet est la licence MIT. Voir la licence