2011-03-11 14 views
11

Cuando el usuario crea un documento, agrego la fecha al índice de solr. Cada vez que los datos cambian, como editar o eliminar, ¿tengo que reindexar toda la información?¿Cómo actualizar el índice de solr?

¿Qué significa reindex en ese caso? Cuando hago

$this->indexData(array(
     'id' => $pid, 
     'title' => $data['titel'] 
)); 

para cada documento y hacer $solr->addDocuments, no sólo sobrescribir datos ya existentes?

Traté de volver a indexar todo el índice en add/delete/edit pero después de eliminar un determinado campo su información todavía parece estar en el índice.

¿Alguna idea?

Respuesta

23

Al indexar un documento a solr, sobrescribirá cualquier documento existente con el mismo <uniqueKey/> que suele ser el id. Entonces, sí, sobrescribe los datos existentes.

Cuando desee cambiar un solo campo de un documento, tendrá que reindexar todo el documento, ya que solr no admite la actualización de un solo campo. Por lo tanto, cuando elimina un campo, tendrá que reindexar el documento sin el campo. Esto sobrescribirá los datos existentes. No se olvide de enviar un commit al final.

Con Solr 4 puede actualizar un solo campo de un documento. Ver Atomic_Updates

5

++ a las anteriores.

Además, si usted tiene un alto volumen de cambios de este tipo, entonces hay un problema potencial:

Cuando la 'actualización' un documento en Solr (como dice Morja) esto no es una 'en lugar de la' actualización . Lo que sucede es que Solr mantiene una tabla de búsqueda interna para sus documentos y cuando actualiza un documento tiene que mantener una lista de redireccionamiento para que cuando se toque un puntero a un documento "actualizado" en el índice invertido, sepa ir al nuevo versión de ese documento.

Esto está bien si tiene suficiente memoria pero eventualmente Solr tendrá que reconstruir las búsquedas cuando use esa memoria manteniendo un registro de todos los cambios. Esto (en mi experiencia) causa ralentizaciones inesperadas y optimizaciones no deseadas.

Posiblemente no sea un problema para ti, pero fue para mí. (miles + actualizaciones por hora)

+1

Con tal volumen de actualizaciones, ¿cómo evita que un usuario sobrescriba las ediciones de otro usuario? – gregm

+0

¿Cómo resolvió su problema? –

0

El problema puede ser que no está comprometiendo documentos después de la actualización (es una eliminación e inserción), pero las confirmaciones demasiado frecuentes pueden desencadenar la optimización, así que tenga cuidado.

No necesita reindexar toda la información, pero todo el documento deberá reconstruirse con el documento actualizado.

Cuestiones relacionadas