Editar, 2016: ¿Por qué no ambos?
Si está interesado en Postgres vs. Lucene, ¿por qué no ambos? Consulte ZomboDB extensión para Postgres, que integra Elasticsearch como un tipo de índice de primera clase. Todavía es un proyecto bastante temprano, pero me parece muy prometedor.
(Técnicamente no está disponible en Heroku, pero vale la pena echarle un vistazo).
Divulgación:soy cofundador de Websolr y Bonsái Complementos de Heroku, por lo que mi perspectiva está un poco sesgada hacia Lucene.
Mi lectura sobre la búsqueda de texto completo de Postgres es que es bastante sólida para casos de uso sencillos, pero hay varias razones por las que Lucene (y, por lo tanto, Solr y ElasticSearch) es superior tanto en términos de rendimiento como de funcionalidad.
Para empezar, jpountz proporciona una respuesta técnica verdaderamente excelente a la pregunta, ¿Por qué Solr es mucho más rápido que Postgres? Vale la pena un par de lecturas completas para digerirlo realmente.
También comenté un episodio reciente de RailsCast comparando las ventajas y desventajas relativas de la búsqueda de texto completo de Postgres versus Solr. Permítanme recapitular eso aquí:
Ventajas pragmáticas de Postgres
- Reutilice un servicio existente que ya está ejecutando en lugar de configurar y mantener (o pagar) otra cosa.
- Muy superior al increíblemente lento SQL
LIKE
operador. - Menos molestias para mantener los datos sincronizados, ya que todos están en la misma base de datos, sin integración a nivel de aplicación con alguna API de servicio de datos externa.
Ventajas de Solr (o ElasticSearch)
De la parte superior de mi cabeza, sin ningún orden en particular...
- Amplíe su carga de indexación y búsqueda por separado de la carga habitual de su base de datos.
- Análisis de términos más flexible para cosas como la normalización del acento, la derivación lingüística, los N-gramas, la eliminación de marcas... Otras características interesantes como el corrector ortográfico, la extracción de "contenido enriquecido" (por ejemplo, PDF y Word)...
- Solr/Lucene puede hacer todo en la lista de TODO de búsqueda de texto completo de Postgres muy bien.
- Clasificación de relevancia de términos mucho mejor y más rápida, personalizable de manera eficiente en el momento de la búsqueda.
- Probablemente un rendimiento de búsqueda más rápido para términos comunes o consultas complicadas.
- Probablemente un rendimiento de indexación más eficiente que Postgres.
- Mejor tolerancia al cambio en su modelo de datos al desvincular la indexación de su almacén de datos principal
Claramente creo que un motor de búsqueda dedicado basado en Lucene es la mejor opción aquí. Básicamente, puede pensar en Lucene como el repositorio de código abierto de facto de experiencia en búsquedas.
Pero si tu única otra opción es LIKE
operador, entonces la búsqueda de texto completo de Postgres es una victoria definitiva.