Sphinx + Ultrasphinx

Muy buenas, una pregunta cortita…

Estoy haciendo unos experimentos con Sphinx + Ultrasphinx (+ Interlock),
pero me surge una duda, como hacen para mantener la consistencia entre
el indice de Sphinx y la DB?

Como se manejan en el espacio de tiempo entre que se borra uno de los
registros indexados y se actualiza el índice de Sphinx?

Salud y belleza para todos,
Mauro.

On Jul 2, 2008, at 7:31 PM, Mauro P. wrote:

Estoy haciendo unos experimentos con Sphinx + Ultrasphinx (+
Interlock),
pero me surge una duda, como hacen para mantener la consistencia entre
el indice de Sphinx y la DB?

Como se manejan en el espacio de tiempo entre que se borra uno de los
registros indexados y se actualiza el índice de Sphinx?

Hay varias opciones …

  1. Meter un cron … para que reindexe.
  2. Meter un observer, sweeper o un filtro en el modelo que se encargue
    de ello.

And that’s all … lo que has de valorar tambien es lo que puede
crecer tu base de datos y lo que tarda en re-indexar sphinx, que ya
sabemos todos que es muy rápido, pero nunca se sabe lo que estará
corriendo en el servidor cuando se inicie la
re-indexación.

Francesc E. wrote:

sabemos todos que es muy rápido, pero nunca se sabe lo que estará
corriendo en el servidor cuando se inicie la re-indexación.


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

Si, eso ya lo estoy haciendo.

Yo a lo que me refería, era a como se suele gestionar ese espacio de
tiempo en el que Sphinx da como respuesta a una busqueda un documento
que ya no existe en la DB.

Ultrasphinx utiliza el metodo find_all_by_id para hacer matching de
los resultados de Sphinx con resgistros en la DB, pero si uno de esos
registros no existe da una excepción RecordNotFound de AR. Y quería
consejo sobre como gestionar y evitar esto.

Por otra parte la DB tiene mucha actividad, y por eso me decante por
usar Ultrasphinx que tiene la posibilidad de utilizar un delta index más
ligero y con las modificaciones más recientes.

Mauro.

On Jul 2, 2008, at 8:04 PM, Mauro P. wrote:

Ultrasphinx utiliza el metodo find_all_by_id para hacer matching de
los resultados de Sphinx con resgistros en la DB, pero si uno de esos
registros no existe da una excepción RecordNotFound de AR. Y quería
consejo sobre como gestionar y evitar esto.

Claro, si tienes el cron metido cada 30 minutos, y durante ese tiempo
se borran registros … pues puedes obtener resultados no deseados.
Eso se evita re-indexando la base de datos cada vez que elimines un
dato. Yo en este caso lo que haria es que cada vez que elimines un
contenido, o lo despubliques de la web, metas en cola un proceso de re-
indexación de los datos de la base de datos. Pero aquí la decisión ha
de ser teniendo en cuenta la cantidad de borrado de datos que hay en
la base de datos.

Por curiosidad, que tipo de datos estas tratando? Utilizas sphinx
para full-text-search o para indexar todos los campos de la base de
datos?

El día 2 de julio de 2008 20:32, javier ramirez [email protected]
escribió:> puedes hacer esto

search.client_options['ignore_missing_records'] = true

Genial solución, porque reindexar tras cada borrado de la base de
datos es inviable si tienes mucho movimiento…

Ya puestos, Javier, ¿sabes si se puede poner esta opción por defecto
en UltraSphinx?

Hola

Yo a lo que me refería, era a como se suele gestionar ese espacio de
tiempo en el que Sphinx da como respuesta a una busqueda un documento
que ya no existe en la DB.

una opción es directamente delegar en ultrasphinx y que no te devuelva
registros que no existen. Cuando lanzas una búsqueda tienes una llamada
parecida a

search = Ultrasphinx::Search.new

puedes hacer esto

 search.client_options['ignore_missing_records'] = true

y entonces ya puedes ejecutar

 search.run

y todos felices hasta el siguiente reindex

En cualquier caso, sobre el tema de reindexar, yo uso reindex de tipo
delta, que son menos pesados y pueden pasarse más frecuentemente. Un par
de veces al día hacemos un full reindex, pero durante el resto del
tiempo un delta es suficiente (el delta creo que sólo te vale para
registros añadidos, no para eliminados).

saludos,

javier ramírez

Ya puestos, Javier, ¿sabes si se puede poner esta opción por defecto
en UltraSphinx?

Creo que no lo trae, o al menos en la versión que usamos nosotros. De
todos modos, como el objeto search lo usamos desde un único sitio, sólo
tenemos la inicialización en ese punto.