ruby-on-rails solr sunspot sunspot-rails

ruby on rails - sunspot_rails no vuelve a indexar el modelo después de guardar



ruby-on-rails solr (3)

Tengo un modelo que implementa un trabajo retrasado que actualiza algunos de sus atributos. El modelo está declarado "buscable" ...

searchable do text :content, :stored => true end

... que pensé que volvería a indexar después de guardar. En las pruebas, este no parece ser el caso. Si ejecuto: rake sunspot:reindex , entonces todo funciona como se espera. ¿Qué podría estar causando este problema?


Como lo mencionó Jason, puede llamar a Sunspot.commit_if_dirty para emitir una confirmación de su cliente.

Desde el lado de la configuración del servidor, otro enfoque sería establecer la propiedad autoCommit en su solrconfig.xml para que emita automáticamente los compromisos cuando se hayan realizado cambios en su índice. Un tiempo maxTime de 60000 ms (un minuto) debería ser suficiente para la mayoría de los sitios.

El uso de autoCommit es probablemente la opción más autoCommit en aplicaciones de producción, donde un alto volumen de confirmaciones puede afectar fácilmente el rendimiento de su servidor Solr. De hecho, es una buena práctica con Sunspot deshabilitar su auto_commit_after_request option cuando su sitio comienza a recibir una cantidad decente de actualizaciones.

Por último, autoCommit tiene la ventaja de poder configurarlo y olvidarlo.

En Websolr , nuestro valor predeterminado es ignorar las confirmaciones emitidas por el cliente a favor de autoCommit .


El índice solo reflejará los cambios después de que se Sunspot.commit . Esto sucede automáticamente cuando ejecutas rake sunspot:reindex .

El complemento Rails de Sunspot también tiene una opción de configuración auto_commit_after_request que llamará a Sunspot.commit_if_dirty después de cada solicitud, pero esto no será activado por sus procesos en segundo plano.

Su mejor apuesta es llamar a Sunspot.commit_if_dirty después de lo último en su trabajo retrasado.


Tuve el mismo problema que tú: cuando estaba probando mi funcionalidad de búsqueda, la mancha solar nunca emitiría un compromiso de solr. Si llamo manualmente a Sunspot.commit todo funciona. Jugué con auto_commit_after_request, pero esto es verdad por defecto, así que no debería ser diferente.

Entonces, después de una investigación adicional, descubrí que Sunspot no emitirá un compromiso automáticamente a menos que el cambio se realice en el contexto de una solicitud web. Si está realizando un cambio de una prueba o un trabajo en segundo plano, debe llamar a Sunspot.commit manualmente.