
Moteur de recherche de texte intégral rapide, extensible et autonome et autonome. Nœud. Deno. Navigateur.
npm install thinker-fts --save
Javascript ESM
import Thinker from "thinker-fts" ;
const thinker = Thinker ( ) ;Commonjs javascript
const Thinker = require ( "thinker-fts" ) ;
const thinker = Thinker ( ) ;Manuscrit
Notez que seule l'exportation par défaut est disponible dans Node.js TypeScript, car le module CommonJS est utilisé en interne.
import Thinker from "thinker-fts" ;
const thinker = Thinker ( ) ;Javascrip
import Thinker from "https://cdn.jsdelivr.net/gh/hexagon/thinker-fts@2/dist/thinker.min.mjs" ;
const thinker = Thinker ( ) ;ou
import Thinker from "https://deno.land/x/thinker/dist/thinker.min.mjs" ;
const thinker = Thinker ( ) ;thinker.min.js (umd et autonome) ou thinker.min.mjs (module ES) du DIST / Folder À utiliser comme module UMD (autonome, requirejs etc.)
< script src =" https://cdn.jsdelivr.net/npm/thinker-fts/dist/thinker.min.js " > </ script >À utiliser comme module ES
< script type =" module " >
import Thinker from "https://cdn.jsdelivr.net/npm/thinker-fts/dist/thinker.min.mjs" ;
const thinker = Thinker ( ) ;
// ... see usage section ...
</ script > Une configuration simple avec l'alimentation et la recherche ressemblerait à l'extrait ci-dessous
// See installation section for exact procedure depending on environment, this is Node.js/CommonJS
const Thinker = require ( 'thinker-fts' ) ,
const thinker = Thinker ( ) ;
// Connect standard ranker
thinker . ranker = Thinker . rankers . standard ( ) ;
// Feed thinker with an array of documents formatted like { id: id, fields: [textfield, textfield] }
thinker . feed ( [
{ id : 1 , fields : [ 'Lorem' , 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' ] } ,
{ id : 2 , fields : [ 'Ipsum' , 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.' ] }
] ) ;
// Search for text
var result = thinker . find ( 'ut in' ) ;
// Show result
console . log ( result ) ;Résultats:
{
expressions: [
{
original: 'ut',
interpretation: [Object],
suggestion: undefined,
modifier: undefined,
exactMode: false
},
{
original: 'in',
interpretation: [Object],
suggestion: undefined,
modifier: undefined,
exactMode: false
}
],
performance: {
find: 1.107075,
rank: 0.598558,
sort: 0.688598,
filter: 0.060182,
total: 2.639159
},
documents: [
{ id: 2, weight: 1.5, expressions: [Object] },
{ id: 1, weight: 1.5, expressions: [Object] }
],
totalHits: 2,
returnedHits: 2
}
S'il vous plaît, pas que vous ayez à connecter un Ranker, sinon la recherche ne fournira pas un ensemble de résultats. Le Ranker construit l'ensemble de résultats.
La configuration par défaut des penseurs est remplacée en fournissant un objet d'options au constructeur des penseurs.
// Options only available at initialization
var thinker = Thinker ( {
characters : / ([a-zA-Z0-9]*) / g ,
caseSensitive : false ,
minWildcardWordLen : 3 ,
maxWildcardWordLen : 32 ,
minWordLen : 2 ,
maxWordLen : 32 ,
suggestionMinWordCount : 6 ,
enableSuggestions : false ,
optionalPlusFromExpressions : 1 ,
concatenateWords : 1
} ) ;Exprimant régulièrement indiquant quels personnages ramasser comme des mots, si vous (comme exemple) voulez utiliser le penseur avec des caractères suédois, le paramètre serait
{ characters : / ([a-zA-Z0-9åäöÅÄÖ]*) / g }Explicite de soi, vrai ou faux
Thinker fait toujours une correspondance partielle, MinwildCardWordlen définit à quel point les parties de mots doivent être indexées. Le paramètre par défaut est 4 qui correspond à «xpre» à «expression», mais pas à «pré». Le réglage trop court pourrait donner une quantité de faux-effets non-conformes à de faux matchs et pourrait affecter les performances si elle est utilisée avec un rang lourd.
Identique à ci-dessus, mais max.
Le mot le plus court à index, par défaut est 2 qui ajoute «ex» à l'index, mais pas «e»
Identique à ci-dessus, mais max.
Définissez combien de fois un mot doit exister dans l'index à utiliser pour les suggestions. Par défaut est 6.
Si cela est activé, le penseur utilisera des mots non transformés des textes entrés pour donner des suggestions lorsque les expressions ne donnent pas de correspondance directe.
C'est ce que les résultats.
Sera renommé, je le promets.
C'est le nombre de mots qu'il devrait y avoir dans l'expression avant que tous les mots ne deviennent facultatifs. Par défaut est 1 (désactivé).
Si vous définissez ceci sur 4 et recherchez une expression de trois mots, tous les mots devront exister dans le document pour faire correspondre. En arrière-plan, what you want devenir +what +you +want . Si vous donnez une expression de quatre mots, tous les mots deviennent facultatifs en tant qu'utilisation.
Lorsque cette propriété est définie sur un plus d'un, les mots augmentés seront insérés dans l'index, composé de mot actuel et suivant. Si cette propriété est définie sur 3 et que le champ est "Je veux des cookies aujourd'hui", une recherche d' iwantcookies , wantcookiestoday ou wantcookies donnera un match.
{
interpretation : {
original : 'expression' ,
...
} ,
...
suggestion : 'expression' ,
...
} Le Ranker est configuré en passant un objet Options à son constructeur.
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( {
directHit : 1 ,
partialHit : 0.5 ,
eachPartialExpressionFactor : 1.5 ,
eachDirectExpressionFactor : 2 ,
fields : {
1 : { weight : 4 , boostPercentage : false } ,
2 : { weight : 2 , boostPercentage : false }
}
} ) ;
thinker . ranker = ranker ;Facteur de poids lorsqu'une expression correspond à un mot directement resp. partiellement
Facteur qui est appliqué à un poids total de documents lorsqu'une expression donne une correspondance partielle. Si la requête se compose de trois expressions qui correspondent en partie, ce facteur sera appliqué trois fois.
Identique à ci-dessus, mais avec des coups directs.
Objet définissant un poids de base différent pour une correspondance dans chaque champ d'un document, si vos documents ressemblent
var docs = [
{ id : 1 , fields : [ "This is the title" , "This is the ingress" , "This is the text" ] } ,
...
] ;Et vos poids de champs ressemblent à
fields: {
0 : { weight : 4 , boostPercentage : true } ,
1 : { weight : 2 , boostPercentage : false } ,
2 : { weight : 2 , boostPercentage : false }
}Les matchs dans le champ de titre auraient un poids de quatre, les matchs dans le champ Ingress auraient un poids de deux, etc.
De plus, comme BoostPercentage est défini sur le titre, ce poids peut atteindre son double si le match est le seul mot du titre.
Par exemple, si le titre est `` c'est ça '', et que nous recherchons «des trucs», le poids de base est de quatre, et cela est multiplié par un facteur calculé
1 mot assorti, 4 mots totalement
1 + 1/4
1 + 0,25
Donne 1,25 dans BoostPercentage Factor
Les processeurs de terrain sont des fonctions appliquées à chaque champ dont le penseur est nourri, avant que l'indexation ne soit effectuée.
Stripts html, laissant des liens (un href = " ") et des descriptions d'image (img alt = " ") dans le résultat renvoyé.
Exemple Configuration du penseur avec Standard Ranker et HTML STRIPTING
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stripHtml = Thinker . processors . stripHtml ( ) ;
thinker . addFieldProcessor ( stripHtml ) ;
thinker . ranker = ranker ; Les traitements de texte sont des fonctions appliquées à chaque mot dont le penseur est nourri. Ils sont appliqués de la même manière lors de l'indexation et lors de la requête.
Les traitements de texte sont gérés de la même manière qu'ils sont configurés, gardez cela à l'esprit lors de la configuration des choses. Si vous endiguez par exemple le mot avant d'appliquer des formes de mots, vous devez utiliser des mots en tige dans la liste des formes de mots.
Remplace les mots choisis par d'autres, ce qui fait efficacement des synonymes égaux.
Exemple de configuration du penseur avec des formes de classement standard et des formes
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
wordforms = Thinker . processors . wordforms ( {
"we" : "us" ,
"they" : "them" ,
"github" : "repository"
} ) ;
thinker . addWordProcessor ( wordforms ) ;
thinker . ranker = ranker ;Supprime les mots qui ne donnent pas une meilleure précision, normalement des trucs comme «et«, «je», «ils», «nous», «can». L'ajout des mots les plus courants ici peut accélérer un peu les Qurys et enregistrer un peu de RAM.
Exemple Configuration du penseur avec les mots standard et les mots d'arrêt
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stopwords = Thinker . processors . stopwords ( {
"artikel" : true ,
"bemötande" : true
} ) ;
thinker . addWordProcessor ( stopwords ) ;
thinker . ranker = ranker ;Trouve la tige de chaque mot indexé, les «ordinateurs» deviendront «ordinateur», «organisé» deviendra «organiser», etc. Cela améliore considérablement la précision des correspondances et de la pondération.
Une caractéristique facultative des tiges consiste à fournir une liste de mots que vous ne voulez pas entendre.
Actuellement, il y a deux tigers disponibles, le suédois à travers une version personnalisée de l'algorithme de boule de neige et l'anglais via l'algorithme Porter.
Exemple Configuration du penseur avec Ranker standard, English Soleming et certains mots d'arrêt STEMMER.
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stemmer = Thinker . processors . stemmers . english ( {
"stemmer" : true ,
"stemming" : true ,
"dontstemthiseither" : true ,
"leonardo" : true ,
"anders" , true
} ) ;
thinker . addWordProcessor ( stemmer ) ;
thinker . ranker = ranker ;Exemple de configuration du penseur avec des mots standard, swedish steaning et stemmer stop
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stemmer = Thinker . processors . stemmers . swedish ( {
"berta" : true ,
"jonas" : true ,
"leonardo" : true ,
"anders" : true
} ) ;
thinker . addWordProcessor ( stemmer ) ;
thinker . ranker = ranker ;SoundEx prépare les mots de telle manière que les mots qui sonnent comme les uns des autres.
Exemple Configuration du penseur avec traitement sonore.
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
soundex = Thinker . processors . soundex ( ) ;
thinker . addWordProcessor ( soundex ) ;
thinker . ranker = ranker ; Remarque: Pour une utilisation normale, toutes les dépendances nécessaires sont regroupées
Fast-levenshtein (https://github.com/hiddentao/fast-levenshtein)
STEMMER (https://github.com/wooorm/stemmer)
Node-Sounsex (https://github.com/louist/node-sensex)
moka (https://github.com/mochajs/mocha)
devrait (https://github.com/shouldjs/should.js)
Hexagone
Pehr Boman
Sous licence sous la licence du MIT