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.