2010-09-03 10 views
17

Tengo un modelo que implementa un trabajo retrasado que actualiza algunos de sus atributos. El modelo se declara como "buscable" ...sunspot_rails no vuelve a indexar el modelo después de guardar

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

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

+0

¿podría agregar algunas mejores palabras clave a estas preguntas para que tenga un mejor alcance? – Danny

+0

No creo que esta pregunta esté muy bien redactada, ni tampoco las soluciones. Por un lado, el usuario obviamente está usando 'sunspot_rails', no solo' sunspot '. Para dos, las respuestas sugirieron discutir cosas que son discutibles debido a las configuraciones de manchas solares predeterminadas de sunspot_rails. – nessur

+0

También estoy interesado en una prueba rspec para confirmaciones de modelo, para asegurarme de que está funcionando. –

Respuesta

5

El índice solo reflejará los cambios después de llamar al Sunspot.commit. Esto ocurre automáticamente cuando ejecuta rake sunspot:reindex.

Sunspot's Rails plugin 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 los procesos en segundo plano.

Su mejor opción es llamar al Sunspot.commit_if_dirty después de lo último en su trabajo retrasado.

+2

(repitiéndome) La pregunta es sobre el plugin 'sunspot_rails', no sobre la mancha solar de vainilla. – nessur

20

Según lo mencionado por Jason, puede llamar al Sunspot.commit_if_dirty para emitir un compromiso 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 emitir automáticamente confirmaciones cuando se hayan realizado cambios en su índice. Un 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 inteligente en las aplicaciones de producción, donde un gran volumen de confirmaciones puede afectar fácilmente el rendimiento de su servidor Solr. De hecho, es una buena práctica con Sunspot para deshabilitar es auto_commit_after_request option cuando su sitio comienza a obtener una buena cantidad de actualizaciones.

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

En Websolr, nuestro valor predeterminado es ignorar los commits emitidos por el cliente a favor de autoCommit.

+2

la pregunta es sobre el plugin 'sunspot_rails', no sobre la mancha solar de vainilla. – nessur

+4

Hola, no estoy seguro de qué punto estás tratando de hacer aquí.sunspot_rails es poco más que una envoltura ligera para enganchar Sunspot en los modelos y controladores de Rails. Además de eso, esta pregunta se reduce a la emisión de confirmaciones, que puede emitir desde 'curl' para todos los asuntos del cliente. –

+0

La pregunta se refiere a la funcionalidad 'autocompromiso', y esta misma 'envoltura liviana' se agrega a la funcionalidad base de Sunspots, por lo que es muy relevante qué gema ha instalado un usuario. Las características no documentadas hacen que el mundo funcione, y el principiante promedio puede sentirse intrigado al saber que sunsport_rails instala un enlace de controlador que por defecto confirma cualquier cambio pendiente en el índice de solr. – nessur

6

Tuve exactamente el mismo problema que tú: cuando estaba probando mi función de búsqueda, la mancha solar nunca emitiría un compromiso para soldar. Si llamo manualmente a Sunspot.com, todo funciona. Jugueteé con auto_commit_after_request, pero esto es cierto por defecto, así que no debería ser diferente.

Luego de investigar un poco más, descubrí que Sunspot no emitirá un commit 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.

Cuestiones relacionadas