Pregunta

Me gustaría realizar una búsqueda de datos de texto completo en mi aplicación Ruby on Rails.¿Qué opciones existen?

¿Fue útil?

Solución

Hay varias opciones disponibles y cada una tiene diferentes fortalezas y debilidades.Si desea agregar búsquedas de texto completo, sería prudente investigar cada una un poco y probarlas para ver qué tan bien funciona en su entorno.

MySQL tiene soporte integrado para búsqueda de texto completo.Tiene soporte en línea, lo que significa que cuando se agregan nuevos registros a la base de datos, se indexan automáticamente y estarán disponibles en los resultados de búsqueda.El documentación tiene más detalles.

acts_as_tsearch ofrece un contenedor para una funcionalidad integrada similar para versiones recientes de PostgreSQL

Para otras bases de datos tendrás que utilizar otro software.

Lucena es un popular proveedor de búsqueda escrito en Java.Puedes utilizar Lucene a través de su servidor de búsqueda. solr con rieles usando acts_as_solr.

Si no desea utilizar Java, existe un puerto de Lucene para Ruby llamado Hurón.Se agrega soporte para Rails usando el acts_as_ferret enchufar.

Xapian es otra buena opción y es compatible con Rails usando el acts_as_xapian enchufar.

Finalmente, mi opción preferida es Esfinge utilizando el ultraesfinge enchufar.Es extremadamente rápido y tiene muchas opciones sobre cómo indexar y buscar en sus bases de datos, pero ya no se mantiene activamente.

Otro complemento para Sphinx es Esfinge pensante que tiene mucho de positivo comentario.Es un poco más fácil empezar a utilizar Thinking Sphinx que Ultrasphinx.Sugeriría investigar ambos complementos para determinar cuál se adapta mejor a su proyecto.

Otros consejos

Puedo recomendar Esfinge.Ryan Bates tiene una gran captura de pantalla sobre el uso del complemento Thinking Sphinx para crear una solución de búsqueda de texto completo.

Puedes usar Ferret (que es Lucene escrito en Ruby).Se integra perfectamente con Rails utilizando el mixin acts_as_ferret.Echa un vistazo a "Cómo integrar Ferret con rieles".Una alternativa es Esfinge.

He estado compilando un lista de las diversas opciones de búsqueda de Ruby on Rails en esta otra pregunta.No estoy seguro de cómo o si combinar nuestras preguntas.

Depende de qué base de datos estés utilizando.Recomendaría usar Solr ya que ofrece muchas opciones interesantes.La desventaja es que tienes que ejecutar un proceso por separado.También utilicé Ferret, pero encontré que es menos estable en términos de acceso multiproceso al índice.No he probado Sphinx porque sólo funciona con MySQL y Postgres.

Sólo una nota para referencia futura:Ultra Sphinx ya no recibe mantenimiento.La esfinge pensante es su reemplazo.Aunque carece de varias características en este momento, como un extracto de qué Ultra sphinx tenía, lo compensa con otras características.

Recomendaría acts_as_ferret ya que lo estoy usando para el proyecto Scrumpad en el trabajo.La indexación se puede realizar como un proceso separado que garantiza que, mientras reindexamos, podamos seguir usando nuestra aplicación.Esto puede reducir el tiempo de inactividad del sitio web.Además la búsqueda es mucho más rápida.Puede buscar en varios modelos a la vez y ordenar los resultados según los campos que prefiera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top