Con un cabreo monumental hice un cambio drástico, deseché el «nuevo buscador» basado en Zend Lucene y lo reimplementé en Sphinx. Por ahora funciona todo igual salvo las operaciones booleanas que ya implementaré estos días (con mejoras).
El Zend Lucene tenía muchos problemas: mucho consumo de memoria –hasta centenares de megas por cada consulta–, por lo que hay que limitar los resultados que ordena, muy lento, falla el sistema de locking cuando se actualizan varios artículos concurrentemente, problemas con las tablas de conversión UTF-8. Además de ello hay que reconocer que indexar textos tan cortos tiene sus problemas.
Perdí más de una semana tocando el Lucene y creando nuevas clases, pero cuando solucionaba un problema surgían dos más.
Hoy Ayer con el cabreo me puse a estudiar el Sphinx, y salvo que tuve que haer la tabla de conversión de caracteres españoles y catalanes, lo demás funcionó como una seda. Además el servidor lo tenemos en marcha en el servidor de backup, así que ni siquiera va a molestar al principal aunque tenga fallos graves.
Otra de las ventajas del Sphinx es que se pueden enviar «colas de consultas», por lo que para búsquedas de varias palabras se hace el ordenamiento por varios criterios, prima el de de la frase completa, luego con contenga todas las palabras buscadas y finalmente cualquiera de ellas. En las dos primeras consultas se ordena por fecha –lo que soluciona una parte importante del problema del menéame, encontrar los «dupes» recientes– y la última consulta ordena por relevancia/frecuencia. Estas preferencias por frases largas versus por fecha para menos palabras se nota en menéame es un saco y menéame saco (en el primera consulta sale en primera posición, en la segunda sale en sexta posición).
Ya iremos afinando, pero con las cientos de pruebas que hice (con ayuda de algunos que estaban por la fisgona) parece dar muchos mejores resultados, y la diferencia de velocidad y tiempo de respuesta es muy notable. Demasiada diferencia como para seguir con el anterior un día más.