
Motor de búsqueda de texto completo de JavaScript Pure JavaScript rápido, extensible y independiente. Nodo. Deno. Navegador.
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 ( ) ;Mecanografiado
Tenga en cuenta que solo la exportación predeterminada está disponible en Node.js TypeScript, ya que el módulo CommonJS se usa internamente.
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 ( ) ;o
import Thinker from "https://deno.land/x/thinker/dist/thinker.min.mjs" ;
const thinker = Thinker ( ) ;thinker.min.js (UMD y Standalone) o thinker.min.mjs (ES-Module) desde la carpeta Dist/ Para usar como módulo umd (independiente, requirirjs, etc.)
< script src =" https://cdn.jsdelivr.net/npm/thinker-fts/dist/thinker.min.js " > </ script >Para usar como módulo 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 > Una configuración simple con la alimentación y la búsqueda se vería algo así como el fragmento a continuación
// 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 ) ;Resultados:
{
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
}
No es que tenga que conectar a un ranker, de lo contrario, encontrar no proporcionará un conjunto de resultados. El ranker construye el conjunto de resultados.
La configuración predeterminada de los pensadores se anula suministrando un objeto de opciones al constructor de pensadores.
// 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
} ) ;Expresión regular indica qué caracteres recoger como palabras, si usted (como ejemplo) quiere usar pensador con personajes suecos, la configuración sería
{ characters : / ([a-zA-Z0-9åäöÅÄÖ]*) / g }Explicativo, verdadero o falso
Thinker siempre hace una coincidencia parcial, MinwildCardWordlen establece cómo partes cortas de las palabras que deberían indexarse. La configuración predeterminada es 4 que coincide con 'xpre' con 'expresión', pero no 'pre'. Establecer esto demasiado corto podría dar una cantidad desagradable de partidos falsos y podría afectar el rendimiento si se usa con un ranker pesado.
Igual que el anterior, pero Max.
La palabra más corta para indexar, el valor predeterminado es 2 que agrega 'ex' al índice, pero no 'e'
Igual que el anterior, pero Max.
Establezca cuántas veces tiene que existir una palabra en el índice para ser utilizado para sugerencias. Predeterminado a 6.
Si esto está habilitado, Thinker usará palabras sin procesar de los textos ingresados para dar sugerencias cuando las expresiones no dan una coincidencia directa.
Esto es lo que se verá los resultados.
Será renombrado, lo prometo.
Esto es cuántas palabras debe haber en la expresión antes de que todas las palabras se vuelvan opcionales. El valor predeterminado es 1 (deshabilitado).
Si establece esto en 4 y busca una expresión de tres palabras, todas las palabras deberán existir en el documento para que coincida. En el fondo what you want convertirte +what +you +want . Si giva una expresión de cuatro palabras, todas las palabras se vuelven opcionales como USUABL.
Cuando esta propiedad se establece en más de una, las palabras aumentadas se insertarán en el índice, que consiste en la palabra actual y siguiente. Si esta propiedad está establecida en 3 y el campo es "I Want Cookies hoy", una búsqueda de iwantcookies , wantcookiestoday o wantcookies dará una coincidencia.
{
interpretation : {
original : 'expression' ,
...
} ,
...
suggestion : 'expression' ,
...
} El ranker se configura pasando un objeto de opciones a su constructor.
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 ;Factor al peso cuando una expresión coincide con una palabra directamente resp. parcialmente
Factor que se aplica a un peso total de documentos cuando una expresión dan una coincidencia parcial. Si la consulta consiste en tres expresiones que coinciden parcialmente, este factor se aplicará tres veces.
Igual que el anterior, pero con golpes directos.
Objeto que define un peso base diferente para una coincidencia en cada campo de un documento, si sus documentos se ven como
var docs = [
{ id : 1 , fields : [ "This is the title" , "This is the ingress" , "This is the text" ] } ,
...
] ;y los pesos de tus campos se ven como
fields: {
0 : { weight : 4 , boostPercentage : true } ,
1 : { weight : 2 , boostPercentage : false } ,
2 : { weight : 2 , boostPercentage : false }
}Los partidos en el campo del título obtendrían un peso de cuatro, los partidos en el campo de entrada obtendrían un peso de dos, etc.
Además, a medida que BoostperCentage se establece en verdadero para el título, ese peso puede llegar a su doble si la coincidencia es la única palabra en el título.
Por ejemplo, si el título es 'Esto es lo que', y buscamos 'cosas', el peso base es cuatro, y eso se multiplica por un factor calculado
1 palabra combinada, 4 palabras totalmente
1+1/4
1+0.25
Da 1.25 en factor de boostpercentage
Los procesadores de campo son funciones que se aplican a todos y cada uno de los campos con el que se alimenta el pensador, antes de que se realice la indexación.
Strips html, dejando enlaces (a href = " ") y descripciones de imagen (img alt = " ") en el resultado devuelto.
Ejemplo de configuración de pensador con ranker estándar y html-stripping
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stripHtml = Thinker . processors . stripHtml ( ) ;
thinker . addFieldProcessor ( stripHtml ) ;
thinker . ranker = ranker ; Los procesadores de palabras son funciones que se aplican a todas y cada una de las palabras con las que se alimenta el pensador. Se aplican de la misma manera tanto al indexar como cuando se consultan.
Los procesadores de palabras se manejan de la misma manera que están configurados, tenlo en cuenta al configurar las cosas. Si, por ejemplo, se detiene la palabra antes de aplicar las formas de palabras, debe usar palabras de STEMMed en la lista de Formas de Word.
Reemplaza las palabras elegidas con otros, haciendo que los sinónimos sean iguales entre sí.
Ejemplo de configuración del pensador con ranker estándar y formas de palabras
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
wordforms = Thinker . processors . wordforms ( {
"we" : "us" ,
"they" : "them" ,
"github" : "repository"
} ) ;
thinker . addWordProcessor ( wordforms ) ;
thinker . ranker = ranker ;Elimina palabras que no dan mejor precisión, normalmente cosas como 'y', 'i', 'ellos', 'nosotros', 'Can'. Agregar las palabras más comunes aquí puede acelerar un poco los Quries y guardar algo de RAM.
Ejemplo de configuración de pensador con ranker estándar y palabras de detención
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stopwords = Thinker . processors . stopwords ( {
"artikel" : true ,
"bemötande" : true
} ) ;
thinker . addWordProcessor ( stopwords ) ;
thinker . ranker = ranker ;Encuentra el tallo de cada palabra que está indexada, las 'computadoras' se convertirán en 'computadora', 'organizada' se convertirá en 'organizar', etc. Esto mejora en gran medida la precisión de las coincidencias y la ponderación.
Una característica opcional de los Stemmers es proporcionar una lista de palabras que no desea detener.
Actualmente hay dos Stemmers disponibles, suecos a través de una versión personalizada del algoritmo de bola de nieve e inglés a través del algoritmo Porter.
Ejemplo de configuración de pensador con ranker estándar, siglo inglés y algunas palabras de parada 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 ;Ejemplo de configuración de Pensador con palabras ranker estándar, suecos y vástagos y 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 preprocesa las palabras de tal manera que las palabras que suenan igual se coinciden entre sí.
Ejemplo de configuración del pensador con el procesamiento SoundEx.
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
soundex = Thinker . processors . soundex ( ) ;
thinker . addWordProcessor ( soundex ) ;
thinker . ranker = ranker ; Nota: Para el uso normal, todas las dependencias necesarias están agrupadas
Fast-Levenshtein (https://github.com/hiddentao/fast-Levenshtein)
Stemmer (https://github.com/wooorm/stemmer)
node-soundex (https://github.com/louist/node-soundex)
moca (https://github.com/mochajs/mocha)
debería (https://github.com/shouldjs/should.js)
Hexágono
Pehr Boman
Con licencia bajo la licencia MIT