Un combo de búsqueda sobre el catálogo de artículos de un cliente: miles de referencias con nombres del estilo Tornillo hexagonal M8 inox A2. El filtro era un includes() sobre el nombre en minúsculas y llevaba un año sin una queja. Las quejas llegaron todas juntas cuando el equipo de almacén empezó a usarlo desde el móvil: escriben “torn m8 inox” y no sale nada. Las palabras están ahí, pero no seguidas.
Buscar era lo fácil; el problema fue el orden
Pasar de includes a una coincidencia por subsecuencia es media tarde de trabajo. Y de repente “m8” devuelve trescientas filas, todas legítimas. El reto real no era encontrar, era decidir cuál va primero. Esa decisión no se razona en abstracto: depende de cómo escribe la gente que va a usar el desplegable.
Doce búsquedas reales y una tabla de verdades
Lo que desbloqueó el asunto fue dejar de pedirle a la IA “una función de búsqueda difusa” y empezar a darle material: un recorte del catálogo tal cual, y las consultas que la gente escribía de verdad —sacadas del historial de incidencias— junto al resultado que esperaba ver arriba en cada una. Una tabla de doce filas. A partir de ahí, cada cambio en la función de puntuación se podía comprobar en vez de discutirlo.
Lo que salió de esas iteraciones:
- Normalizar antes de comparar. “hidraulica” tenía que encontrar “hidráulica”, y al revés. Sin eso, medio catálogo era invisible para quien escribe rápido.
- Puntuar dónde encaja, no solo si encaja. Coincidir al principio de una palabra vale mucho más que coincidir en mitad.
- Penalizar los huecos. Si las letras de la consulta aparecen desperdigadas por toda la cadena, eso ya no es una coincidencia, es ruido.
- Umbral relativo al mejor resultado, no absoluto. Con dos caracteres todo puntúa bajo y un corte fijo se cargaba la lista entera.
- En empate, gana la referencia más corta. Suena arbitrario y acertaba casi siempre.
La conversación útil no fue “escríbeme un fuzzy search”. Fue “con estas doce consultas, esta puntuación falla en tres: propón dos cambios y dime cuál rompe menos”.
Por qué esto no acaba pegado en un chat
Ese material —nombres de artículos, referencias internas y, sobre todo, lo que buscan los empleados de otra empresa— no es mío para andar subiéndolo a ningún sitio. Y sin ese material, la ayuda de la IA se queda en un algoritmo de manual: puntúa bonito y ordena mal.
Con el modelo corriendo dentro del navegador la disyuntiva desaparece. El catálogo y las consultas entran en el prompt porque el prompt no sale de la pestaña. Iteras con los datos que importan, que son justo los que nunca te dejarían usar de otra forma.
Abre Elffuss Code y prueba con tus propios datos: el modelo corre en tu navegador, así que ni el código ni el prompt suben a ningún servidor.
Abrir Code →