
Schnell, extendierbar und eigenständig reines JavaScript Volltext -Suchmaschinen. Knoten. Deno. Browser.
npm install thinker-fts --save
JavaScript ESM
import Thinker from "thinker-fts" ;
const thinker = Thinker ( ) ;JavaScript CommonJs
const Thinker = require ( "thinker-fts" ) ;
const thinker = Thinker ( ) ;Typoskript
Beachten Sie, dass nur der Standard -Export in node.js TypeScript verfügbar ist, da das CommonJS -Modul intern verwendet wird.
import Thinker from "thinker-fts" ;
const thinker = Thinker ( ) ;JavaScript
import Thinker from "https://cdn.jsdelivr.net/gh/hexagon/thinker-fts@2/dist/thinker.min.mjs" ;
const thinker = Thinker ( ) ;oder
import Thinker from "https://deno.land/x/thinker/dist/thinker.min.mjs" ;
const thinker = Thinker ( ) ;thinker.min.js (UMD und Standalone) oder thinker.min.mjs (ES-Module) aus dem Dist/ Ordner Als UMD-Modul zu verwenden (allein, fordertjs usw.)
< script src =" https://cdn.jsdelivr.net/npm/thinker-fts/dist/thinker.min.js " > </ script >Als ES-Modul zu verwenden
< script type =" module " >
import Thinker from "https://cdn.jsdelivr.net/npm/thinker-fts/dist/thinker.min.mjs" ;
const thinker = Thinker ( ) ;
// ... see usage section ...
</ script > Ein einfaches Setup mit Füttern und Suchen würde ungefähr wie der Snippet unten aussehen
// 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 ) ;Ergebnisse:
{
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
}
Bitte nicht, dass Sie einen Rankier verbinden müssen , sonst wird Fund kein Ergebnissatz bereitgestellt. Der Ranker erstellt das Ergebnissatz.
Die Standardkonfiguration der Denker wird überschrieben, indem der Denkerkonstruktor ein Optionsobjekt versorgt wird.
// 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
} ) ;Regelmäßige Ausdrucksausdruck, welche Zeichen als Wörter aufnehmen sollen, wenn Sie (als Beispiel) den Denker mit schwedischen Charakteren verwenden möchten, wäre die Einstellung
{ characters : / ([a-zA-Z0-9åäöÅÄÖ]*) / g }Selbsterklärend, wahr oder falsch
Der Denker stellt immer teilweise Übereinstimmung, MinwildCardwordlen legt fest, wie kurze Teile von Wörtern indexiert werden sollten. Die Standardeinstellung ist 4, die mit 'XPre' mit 'Ausdruck' übereinstimmt, aber nicht "pre". Wenn Sie dies zu kurz einstellen, kann es zu einer unnyary -Menge an falschen Übereinstimmungen führen und die Leistung beeinflussen, wenn sie mit einem starken Ranger verwendet werden.
Gleich wie oben, aber max.
Das kürzeste Wort zum Index ist Standard 2, der dem Index 'Ex' hinzufügt, aber nicht 'e'
Gleich wie oben, aber max.
Legen Sie fest, wie oft ein Wort im Index existieren muss, um für Vorschläge verwendet zu werden. Standardeinstellung auf 6.
Wenn dies aktiviert ist, verwendet der Denker unverarbeitete Wörter aus den eingegebenen Texten, um Vorschläge zu machen, wenn Ausdrücke keine direkte Übereinstimmung abgeben.
So resultiert. Ausdrücke [n] werden aussehen, wenn Sie nach "Exresssion" suchen (fehlte p)
Wird umbenannt, das verspreche ich.
So viele Wörter sollten sich im Ausdruck befinden, bevor alle Wörter optional werden. Standardmäßig 1 (deaktiviert).
Wenn Sie dies auf 4 festlegen und nach einem Ausdruck von drei Wörtern suchen, müssen alle Wörter im Dokument zu giva e übereinstimmen. Im Hintergrund what you want werden Sie +what +you +want . Wenn Sie einen Ausdruck mit vier Wortgründen giva, werden alle Wörter als Usuable optional.
Wenn diese Eigenschaft auf mehr als eins eingestellt ist, werden erweiterte Wörter in den Index eingefügt, das aus aktuellem und nächstem Wort besteht. Wenn diese Eigenschaft auf 3 gesetzt ist und das Feld "Ich möchte Cookies heute", wird eine Suche nach iwantcookies , wantcookiestoday oder wantcookies ein Match geben.
{
interpretation : {
original : 'expression' ,
...
} ,
...
suggestion : 'expression' ,
...
} Der Ranker wird konfiguriert, indem ein Optionsobjekt an seinen Konstruktor weitergegeben wird.
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 ;Faktor zum Gewicht, wenn ein Ausdruck mit einem Wort direkt reagiert wird. teilweise
Faktor, der auf ein Dokumente des Gesamtgewichts angewendet wird, wenn ein Ausdrücke eine teilweise Übereinstimmung ergeben. Wenn die Abfrage aus drei Ausdrücken besteht, die alle teilweise übereinstimmen, wird dieser Faktor dreimal angewendet.
Gleich wie oben, aber mit direkten Hits.
Objekt definiert ein anderes Grundgewicht für eine Übereinstimmung in jedem Feld eines Dokuments, wenn Ihre Dokumente nachsehen
var docs = [
{ id : 1 , fields : [ "This is the title" , "This is the ingress" , "This is the text" ] } ,
...
] ;und Ihre Feldergewichte sehen aus wie
fields: {
0 : { weight : 4 , boostPercentage : true } ,
1 : { weight : 2 , boostPercentage : false } ,
2 : { weight : 2 , boostPercentage : false }
}Übereinstimmungen im Titelfeld würden ein Gewicht von vier Jahren erhalten, übereinstimmende Übereinstimmungen im Eingangsfeld würden ein Gewicht von zwei usw. erhalten usw.
Da Boostpercentage für den Titel auf TRUE eingestellt ist, kann dieses Gewicht bis zu seinem Doppel aufstehen, wenn das Spiel das einzige Wort im Titel ist.
Wenn der Titel beispielsweise "Dies ist das Zeug" ist und wir nach "Zeug" suchen, beträgt das Grundgewicht vier, und das wird mit einem berechneten Faktor multipliziert
1 Wort angepasst, 4 Wörter total
1+1/4
1+0,25
gibt 1,25 im Boostpercentage -Faktor
Feldprozessoren sind Funktionen, die auf jedes Feld angewendet werden, mit dem der Denker gefüttert wird, bevor die Indexierung durchgeführt wird.
Stridpts html, hinterlassen Links (a href = " ") und Bildbeschreibungen (IMG Alt = " ") im zurückgegebenen Ergebnis.
Beispiel für den Denker mit Standard-Ranker und HTML-Striping einrichten
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stripHtml = Thinker . processors . stripHtml ( ) ;
thinker . addFieldProcessor ( stripHtml ) ;
thinker . ranker = ranker ; Textprozessoren sind Funktionen, die auf jedes Wort angewendet werden, mit dem der Denker gefüttert wird. Sie werden sowohl bei der Indexierung als auch beim Abfragen genauso angewendet.
Textverarbeitungsprogramme werden genauso behandelt, wie sie konfiguriert werden, und denken Sie daran, wenn Sie Dinge einrichten. Wenn Sie beispielsweise das Wort vor dem Anwenden von Wortformen bestimmen, müssen Sie Stammwörter in der Liste der Wortformen verwenden.
Ersetzt ausgewählte Wörter durch andere und macht sich effektiv gegenseitig die Synonyme entsprechen.
Beispiel einrichten Denker mit Standard -Ranger und Wortformen einrichten
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
wordforms = Thinker . processors . wordforms ( {
"we" : "us" ,
"they" : "them" ,
"github" : "repository"
} ) ;
thinker . addWordProcessor ( wordforms ) ;
thinker . ranker = ranker ;Entfernt Wörter, die keine bessere Präzision geben, normalerweise Dinge wie "und", "ich", "sie", "wir", "können". Das Hinzufügen der häufigsten Wörter hier kann die Korys ein wenig beschleunigen und etwas RAM speichern.
Beispiel einrichten Denker mit Standard -Ranger und stoppen Wörter
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stopwords = Thinker . processors . stopwords ( {
"artikel" : true ,
"bemötande" : true
} ) ;
thinker . addWordProcessor ( stopwords ) ;
thinker . ranker = ranker ;Findet den Stamm jedes Wortes, das indexiert ist, "Computer" werden zu "Computer", "organisiert" "organisiert" usw. Dies verbessert die Genauigkeit der Übereinstimmungen und Gewichtung erheblich.
Eine optionale Funktion der Stemmers besteht darin, eine Liste von Wörtern zu liefern, die Sie nicht stürzen möchten.
Derzeit sind zwei Stemmers verfügbar, schwedisch durch eine benutzerdefinierte Version des Snowball -Algorithmus und Englisch durch den Porter -Algorithmus.
Beispiel für den Denker mit Standard -Ranker, englischem Stamm und einigen Stemmer -Stoppwörtern.
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 ;Beispiel für den Denker mit Standard -Ranger, schwedischem Stamm und Stemmer -Stoppwörtern
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äproiert die Wörter so, dass Wörter, die gleich klingen, zueinander passen.
Beispiel einrichten Denker mit der SoundEx -Verarbeitung einrichten.
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
soundex = Thinker . processors . soundex ( ) ;
thinker . addWordProcessor ( soundex ) ;
thinker . ranker = ranker ; Hinweis: Für den normalen Gebrauch sind alle benötigten Abhängigkeiten gebündelt
Fast-Levenshtein (https://github.com/hiddentao/fast-levenshtein)
Stemmer (https://github.com/wooorm/stemmer)
node-soundex (https://github.com/louist/node-soundex)
Mocha (https://github.com/mochajs/mocha)
sollte (https://github.com/shouldjs/should.js)
Hexagon
Pehr Boman
Lizenziert unter der MIT -Lizenz