Tenemos una aplicación alojada que administra páginas de contenido. Cada página puede tener una cantidad de campos personalizados y algunos campos estándar (marca de tiempo, nombre de usuario, correo electrónico del usuario, etc.).Filtrado/búsqueda eficiente
Con potencialmente cientos de sitios diferentes que usan el sistema, ¿cuál es una forma eficiente de manejar el filtrado/búsqueda? Imagine una vista de cuadrícula que desee restringir. Puede filtrar en campos específicos (ID de usuario, fecha) o puede ingresar a una búsqueda de texto completo.
Por ejemplo, "todas las páginas iniciadas por userid 10" serían una consulta bastante rápida en una base de datos MySQL. Pero cosas como "todas las páginas iniciadas por un usuario cuyo ID de usuario es 10 y coincide con [alguna consulta de búsqueda]" aspirarían contra la base de datos, por lo que es adecuada para un motor de búsqueda como Lucene.
Básicamente me pregunto cómo otros sitios grandes hacen este tipo de cosas. ¿Utilizan un motor de búsqueda 100% para todos los tipos de filtrado? ¿Mezclan consultas de bases de datos con un motor de búsqueda?
Si usamos solo un motor de búsqueda, hay un problema con el tiempo de demora que tarda un objeto nuevo/actualizado en aparecer en el índice de búsqueda. Es decir, he leído que no es inteligente actualizar el índice inmediatamente, y hacerlo en lotes. Incluso si esto significa cada 5 minutos, los usuarios se confundirán cuando su página recientemente agregada no se muestre inmediatamente cuando vean una simple página (por ejemplo, una consulta de búsqueda de "categoría: 5").
Estamos utilizando MySQL y hemos estado mirando de cerca a Lucene para buscar. ¿Hay alguna otra tecnología que no sepa?
Mi idea es ofrecer una página de filtrado simple que utiliza MySQL para filtrar campos básicos. Luego, ofrezca una página de búsqueda de texto completo separada que presente resultados similares a Google. ¿Es esta la única manera?