Pregunta

Hay varias opciones de complementos para crear un motor de búsqueda en su aplicación Ruby on Rails.¿Cuál de estos es el mejor?

¿Fue útil?

Solución

Thinking Sphinx tiene una sintaxis más concisa para definir qué campos y qué modelos están indexados.

Tanto UltraSphinx como Thinking Sphinx (recientemente) tienen una característica ultra genial que tiene en cuenta la proximidad geográfica de los objetos.

UltraSphinx tiene problemas molestos con la forma en que carga los modelos (no carga toda la pila de Rails, por lo que podrías obtener errores extraños y difíciles de diagnosticar, que se manejan agregando explícitos). require declaraciones).

Usamos Thinking Sphinx en proyectos nuevos y UltraSphinx en proyectos que utilizan contenido geográfico.

Otros consejos

Esta pregunta ya se hizo anteriormente. aquí con respuestas más detalladas.

Una opción sólida utilizada por uno de mis amigos es solr, un motor de búsqueda que utiliza el Lucene original basado en Java.Para usarlo con Rails, hay, por supuesto, un complemento act_as, actos_as_solr.

Presentó el combo recientemente en Montreal sobre rieles y ofrece una descripción general agradable y completa de cómo usar acts_as_solr en su blog.

Aparentemente también soporta muy bien los acentos franceses.

Estoy pasando por este proceso exacto ahora mismo, así que, aunque no tengo experiencia real, he pasado muchas horas investigando todas las opciones.Esto es lo que he aprendido hasta ahora:

  • *Sphinx: buena reputación por su velocidad y funcionalidad, pero Sphinx necesita claves enteras y mi modelo usa GUID;ThinkingSphinx anunció recientemente soporte para GeoSpatial
  • Acts_As_Solr: recomendado por un amigo con un sitio de gran volumen;los creadores originales han dejado de trabajar en él y es difícil encontrar documentación;requiere un servlet Java
  • Acts_As_Ferret: parece fácil de usar, pero muchos detractores dicen que es inestable
  • Otros dos con información limitada son Acts_As_Indexed y Acts_As_Searchable

Tengo una hoja de cálculo con mi intento de documentar las ventajas y desventajas de todos ellos.Si alguien está interesado en verlo y/o ayudarme a corregirlo, que se ponga en contacto conmigo.Lo publicaré en algún lugar una vez que sepa que es exacto.

Mi recomendación sería probar UltraSphinx o Thinking Sphinx si tiene claves primarias normales.Voy a probar Acts_As_Xapian basándome en la buena documentación, el conjunto de funciones y lo activo que parece estar el proyecto.

Solo he usado el combo Ferret/acts_as_ferret (decisión heredada) en un proyecto de cliente.Recomiendo encarecidamente mirar el otro opciones primero.

aaf es muy frágil y puede detener su aplicación Rails si comete un error en la configuración o si por alguna razón encuentra un error en aaf.

En tal caso, en lugar de simplemente fallar la funcionalidad de búsqueda, cualquier acción del controlador que toque un modelo indexado fallará por completo y generará una excepción.¿Cuál es malo, está bien?

Yo uso el actos_as_xapian enchufar.Seguí este tutorial:

http://locomotivation.com/2008/07/23/simple-ruby-on-rails-full-text-search-using-xapian

Funciona muy bien.

Estoy usando acts_as_ferret.Es fácil de configurar y generalmente rápido.La función incorporada de búsqueda de registros activos es bastante útil:puede aplicar cualquier condición o unirse a otros modelos después de que su búsqueda encuentre los registros coincidentes.

A diferencia de Sphinx, no es necesario volver a indexar TODOS sus registros cuando agrega datos nuevos.Hay ganchos after_save y after_update que insertarán su nuevo registro en la base de datos de ferret.Este fue uno de los grandes puntos de venta para mí.

Cuando tienes que indexar masivamente tus datos, ferret es definitivamente más lento que acts_as_sphinx (por un factor de 3).Terminé escribiendo mi propio método para volver a indexar modelos, que funciona tan rápido como una esfinge: básicamente, precarga todos los datos de la base de datos en lugar de ir registro por registro para crear el nuevo índice.

La documentación de ferret es buena para lo básico, pero es un poco escasa una vez que se realizan búsquedas y clasificaciones más complejas y se utiliza un servidor dRb para alojar un índice remoto.Dicho esto, parece un producto mucho más maduro que acts_as_sphinx, aunque tengo una experiencia limitada con sphinx.

Si está utilizando un servicio de alojamiento compartido como yo (Bluehost), sus opciones pueden estar limitadas a lo que ofrece el proveedor.En mi caso, no pude encontrar una manera buena y confiable de iniciar y mantener en ejecución un servidor separado, como Lucene o Solr.

Por lo tanto, elegí Xapian y me ha funcionado bien.Hay 2 complementos para rieles que he investigado:acts_as_xapian y xapian_fu.El primero le permitirá ponerse en marcha rápidamente, pero parece que ya no se mantiene.Acabo de empezar a trabajar con xapian_fu.

En caso de que alguien todavía esté interesado, lo último que podemos usar ahora es búsqueda elástica.Hay gemas disponibles para ello como neumático o rieles de búsqueda elásticos.También está basado en Lucene como Solr, basado en Java.Solr en realidad está integrado con este proyecto ahora...

He usado Thinking Sphinx y parece bastante bueno, pero no he tenido tiempo de evaluar todas las opciones.

Recomiendo Pensar en la Esfinge.Es la opción más rápida en mi opinión.

He usado Ferret y funcionó bien para mis propósitos, pero no he evaluado las otras opciones.

Una opción que no he probado es la basada en C++. Xapian

estamos usando http://hyperestraier.sourceforge.net/, que fue heredado.No he buscado otros motores, pero el hiperestraier proporciona todos los ganchos necesarios.Sin embargo, configurar el índice de búsqueda es complicado.Probablemente haya opciones más fáciles disponibles.

Depende de qué base de datos estés utilizando.Recomendaría usar Solr ya que ofrece muchas opciones interesantes para búsqueda difusa y tiene un excelente analizador de consultas.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.

Estoy usando una opción diferente que funcionó sorprendentemente bien.Estoy usando jruby y hablando directamente con lucene.

Utilicé acts_as_solr en el pasado y encontré algunos problemas.Principalmente realiza una llamada sincrónica para cada guardado de AR.Esto no es tan malo, pero en mi situación, un guardado a veces causaba muchas llamadas sincrónicas a solr y ocasionalmente tomaba más tiempo del que permitía mestizo y obtenía una excepción de tiempo de espera de mestizo (o algo así)

Thinking Sphinx es una mejor alternativa que Ultrasphinx, que parece abandonada, pero, en general, Xapian tiene un motor más potente que Sphinx y es más fácil de implementar la búsqueda en tiempo real.

Recomiendo acts_as_ferret.Pero aunque la parte difícil es ponerlo en funcionamiento correctamente en su servidor, una vez hecho esto, casi no tendrá ningún problema ya que el servidor Ferret se ejecutará como un proceso en segundo plano separado para actualizar su índice cada vez que haya una nueva actualización.Además, funciona muy bien en mestizo con Apache para nosotros.

También he estado buscando la solución perfecta.Al principio elegí Thinking Sphinx, que funcionó bien.Pero como tengo la intención de alojar mi aplicación web en héroeku, la única opción es usar solr.El mayor inconveniente, sin embargo, es que el desarrollo de los principales actos_as_solr La gema parece haberse detenido después de mayo de 2008.Entonces eso es demasiado viejo para mi gusto.Acabo de encontrar Mancha solar como una alternativa avanzada y con actualizaciones recientes, así que esa es una que voy a considerar.

Otra opción que ofrece Heroku es optar por un servidor de índice alojado basado en Solr, llamado Websolr.La joya requerida websolr-acts_as_solr Afortunadamente, también está muy actualizado.

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