
Netgrep est un portage expérimental de Ripgrep sur WasM en utilisant le protocole HTTP. La portée de ce projet est de fournir une alternative viable aux moteurs de recherche basés sur l'index pour les applications avec une petite base de données basée sur des fichiers. Il utilise une fourche du référentiel ripgrep d'origine avec juste assez de modifications pour le rendre exécutable sur Wasm.
À l'heure actuelle, Netgrep va simplement dire si un modèle est présent sur un fichier distant tirant parti du moteur de recherche de base ripgrep . Cela se produit pendant le téléchargement du fichier afin de maximiser les performances.
Remarque La recherche de publications sur un blog créé via un générateur de sites statique est un cas d'utilisation intéressant pour cette expérience. NetGrep pourrait facilement être utilisé pour créer un moteur de recherche en temps réel à partir des fichiers postaux bruts. Un exemple en direct pour ce comportement peut être trouvé sur mon blog (vous pouvez jeter un œil au code source).
AVERTISSEMENT Pour le moment, cette bibliothèque n'est exportée qu'en tant que ESM, donc un bundler comme WebPack est nécessaire pour l'utiliser.
Remarque Ce court didacticiel suppose que WebPack 5 est le bundler utilisé dans l'application où
netgrepsera intégré. Un exemple complet est disponible dans l'examplede package.
Installez d'abord le module:
# Using yarn
yarn add @netgrep/netgrep
# Using npm
npm install @netgrep/netgrep L'indicateur d'expérience asyncWebAssembbly doit être activé dans webpack.config.js :
module . exports = {
//...
experiments : {
// ...
asyncWebAssembly : true ,
} ,
} ; Ensuite, il sera possible d'exécuter netgrep directement tandis que le fichier WASM groupé sera chargé de manière asynchrone en arrière-plan:
import { Netgrep } from '@netgrep/netgrep' ;
// Create a Netgrep instance, here it's
// possible to pass an initial configuration.
const NG = new Netgrep ( ) ;
// Execute a Netgrep search on the url using
// the given pattern.
NG . search ( "url" , "pattern" )
. then ( ( output ) => {
console . log ( 'The pattern has matched' , output . result )
} ) ;
// It's possible to pass custom metadata during
// the search. These will be returned back in the result
// for convenience.
NG . search ( "url" , "pattern" , { post } )
. then ( ( output ) => {
console . log ( 'The pattern has matched' , output . result )
console . log ( 'Metadata' , output . metadata )
} ) ;
// There is a convenient method to do batched searches
// to multiple urls. Using `searchBatch` the resulting `Promise`
// will resolve only after the completion of all the searches.
NG . searchBatch ( [
{ url : 'url1' } ,
{ url : 'url2' } ,
{ url : 'url3' }
] , "pattern" )
. then ( ( outputs ) => {
outputs . forEach ( ( output ) => {
console . log ( `The pattern has matched for ${ output . url } ` , output . result )
} ) ;
} ) ;
// If you want to avoid waiting for the completion of
// all the searches, the method `searchBatchWithCallback` will
// execute a callback every time a search completes.
NG . searchBatchWithCallback ( [
{ url : 'url1' } ,
{ url : 'url2' } ,
{ url : 'url3' }
] , "pattern" , ( output ) => {
console . log ( `The pattern has matched for ${ output . url } ` , output . result )
} ) ; Netgrep est sous la licence MIT.