Solr Fuzzy Suggester y Solr Infix Suggester a través de Ajax

Ilustración
Descripción del proyecto
Para una búsqueda eficiente en un sitio web, es importante que los usuarios encuentren resultados relevantes de forma rápida y sencilla. Solr Fuzzy Suggester y Solr Infix Suggester ofrecen una solución eficaz para esto. Se pueden invocar y filtrar mediante consultas Ajax.
La activación del suggester se realiza a través del componente XML SuggestComponent en el archivo solrconfig.xml, como se muestra en el siguiente ejemplo de código:
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">mySuggester</str>
<str name="lookupImpl">FuzzyLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">suggest_field</str>
<str name="weightField">weight</str>
<str name="suggestAnalyzerFieldType">text_general</str>
<str name="buildOnStartup">true</str>
</lst>
</searchComponent>
Al utilizar Solr Fuzzy Suggester y Solr Infix Suggester, los usuarios pueden obtener resultados relevantes de forma rápida y sencilla, ya que reciben sugerencias y funciones de autocompletado. Los resultados de la consulta se pueden filtrar posteriormente para garantizar que solo se muestren los resultados más relevantes.
Mediante la implementación de estas tecnologías, los sitios web pueden ofrecer una funcionalidad de búsqueda mejorada y una mejor experiencia de usuario.
Ejemplo de configuración (Resaltador de sintaxis)
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">mySuggester</str>
<str name="lookupImpl">FuzzyLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">cat</str>
<str name="weightField">price</str>
<str name="suggestAnalyzerFieldType">string</str>
<str name="buildOnStartup">false</str>
</lst>
</searchComponent>
La imagen muestra lo que hace el suggester: la entrada no produce una coincidencia exacta, y Solr Suggester devuelve sugerencias similares. Hay varias formas de determinar la similitud de cadenas (string). Aquí mencionaré dos.
1) Fuzzy (Distancia de Levenshtein)
La primera posibilidad es fuzzy, que se basa en el algoritmo de la distancia de Levenshtein (Levenshtein distance).
En JavaScript, se vería así:
function levenshtein(a, b) {
var t = [], u, i, j, m = a.length, n = b.length;
if (!m) { return n; }
if (!n) { return m; }
for (j = 0; j <= n; j++) { t[j] = j; }
for (i = 1; i <= m; i++) {
for (u = [i], j = 1; j <= n; j++) {
u[j] = a[i - 1] === b[j - 1] ? t[j - 1] : Math.min(t[j - 1], t[j], u[j - 1]) + 1;
} t = u;
} return u[n];
}
// a y b son cadenas (strings)
2) Infix (coincidencias de prefijo e índice Lucene)
La segunda posibilidad es infix, que se basa en coincidencias de prefijo con tokens en el texto indexado. Utiliza el índice Lucene para su diccionario. Lucene es una biblioteca de búsqueda de texto completo (Apache Software Foundation) que contiene bibliotecas de software de código abierto.
En la práctica, es una estructura indexada que crea tokens durante el procesamiento. Los espacios pueden indicar el final o el comienzo de una cadena. Las cadenas individuales se normalizan para obtener mejores coincidencias — por ejemplo, convertir mayúsculas a minúsculas — y se indexan múltiples variantes relacionadas del diccionario.
La ventaja radica en las opciones que se pueden definir en la consulta (query), lo que proporciona mayor flexibilidad.
¿Qué hacen los motores de búsqueda comerciales?
La combinación de ambos enfoques es esencialmente lo que ofrecen la mayoría de los motores de búsqueda. Al ingresar datos en el campo de búsqueda, se sugieren cadenas individuales en el contexto de otras cadenas y términos. Así se logra una búsqueda semántica.
En los grandes proveedores de búsqueda, estos resultados están configurados comercialmente y dirigen a los usuarios a índices prioritarios. Las páginas se ordenan y categorizan mediante reglas y directrices. Los grupos de interés se determinan a través de tecnologías de seguimiento (tracking), algoritmos de IA y marketing de bases de datos (database marketing), y la búsqueda se adapta al grupo objetivo.
Related Projects

Raíces locales, alcance global — Sistemas de comunicación y medios para los negocios modernos
Ayudo a los negocios locales a presentarse como marcas globales: posicionamiento claro, contenido de alto rendimiento y una distribución que convierte la atención en leads.

De los negocios globales a la cocina — Un sistema de comunicación inversa que aún escala
Deja de escalar por el ruido. Empieza con señales globales, redúcelas a unas pocas verdades estables y conviértelas en plantillas semanales, listas de verificación y “menús” repetibles que entreguen valor real.

Portal de digitalización para Archivo Museo Biblioteca
El Deutsche Museum Digital se dedica a la digitalización y apertura científica de los fondos de la colección de objetos, el archivo y la biblioteca del Deutsches Museum.