- Una librería simple para realizar búsqueda de texto sin índice en JavaScript
- Puede usarse en distintos proyectos y ofrece ordenamiento de resultados basado en TF-IDF junto con un rendimiento de búsqueda rápido
- No tiene tantas funciones como FlexSearch o lunr.js, pero es mucho más rápida y eficiente que
text.indexOf(query) > -1
- Es útil para aplicaciones web simples que manejan conjuntos de datos pequeños
Funciones principales
- Búsqueda sin índice: no requiere un proceso de indexación previo para buscar
- Soporte para varias opciones de búsqueda:
- distinción entre mayúsculas y minúsculas
- búsqueda por palabra, búsqueda por prefijo y búsqueda estilo autocompletado
- Rendimiento rápido: puede buscar incluso entre varios miles de elementos en tiempo real
- Ranking TF-IDF: ordena los resultados de búsqueda por “mayor relevancia”
API
- La función
search recibe dos argumentos obligatorios y dos opcionales.
items: lista de elementos donde se buscará. Normalmente es un arreglo de cadenas o un arreglo de objetos con propiedades de tipo cadena.
query: la consulta de texto a buscar.
by (opcional): función que devuelve un valor de tipo cadena desde cada elemento. El valor predeterminado es x => String(x).
options (opcional): objeto que incluye opciones de búsqueda.
caseSensitive: si distingue entre mayúsculas y minúsculas. El valor predeterminado es false.
mode: forma de hacer coincidir palabras incompletas de la consulta.
mode: 'word': solo coincide con palabras completas.
mode: 'prefix': coincide con el prefijo de una palabra.
mode: 'autocomplete': modo híbrido donde la última palabra de la consulta puede estar incompleta.
Ejemplo de uso
import { search } from 'libsearch'; // entorno Node.js
const { search } = window.libsearch; // entorno del navegador
// Búsqueda básica
search(articles, 'berkeley cali', a => a.title);
// => [{ title: 'Weather in Berkeley, California' }]
// Búsqueda por palabra: “California” busca solo “California”
search(articles, 'california', a => a.title, { mode: 'word' });
// Búsqueda con distinción entre mayúsculas y minúsculas: buscar con la “W” mayúscula
search(articles, 'W', a => a.title, { caseSensitive: true });
// Manejo de consulta vacía: devuelve todos los resultados
search(articles, '', a => a.title);
Cómo funciona la búsqueda
- libsearch realiza búsquedas rápidas de texto completo sobre una lista de objetos JavaScript sin un índice de búsqueda preconstruido
-
- Convierte la consulta en una expresión regular
- aprovecha el motor de expresiones regulares optimizado de los motores modernos de JavaScript para convertir la cadena de consulta en un filtro de expresión regular y ejecutar la búsqueda
- ejemplo: “Uni of California” → (^|\W)Uni($|\W), (^|\W)of($|\W), (^|\W)California
-
- Calcula el ranking TF-IDF con base en coincidencias de expresiones regulares y la longitud del documento
- usa la longitud del documento (número de caracteres) en lugar del número de palabras para aproximar TF-IDF
3 comentarios
Sí hay un detalle, eso sí..
Lo revisé porque me interesó, pero parece que no ha tenido mantenimiento en 3 años... ¿Será que la librería es tan perfecta que no necesita mantenimiento...? Me deja con dudas.
Comentarios en Hacker News
115 líneas de TypeScript son bastante ligeras, pero podrían faltar funciones importantes
Se da cuenta de que es fácil implementar la función de búsqueda
Califniaen lugar deCalifornia), pero resulta interesante entender la implementaciónUsa Fuse con frecuencia en apps de JavaScript
Con herramientas como FlexSearch o lunr, construir un índice para miles de elementos es muy rápido
Pregunta cuál es la ventaja de no tener índice
grepbastante