2012-02-08 15 views
7

Necesito actualizar una gran cantidad de documentos a menudo. Por ejemplo, configure "en línea" = verdadero para user_id = 5 y así sucesivamente. Pero la velocidad de indexación a través del controlador http es muy lenta. Soporte Solr eliminar documentos por consulta, ¿hay forma de actualizar por consulta?Actualización del índice de Solr por consulta

+0

Hay un problema jira bien elaborado sobre este tema y por qué no se resuelve: https: //issues.apache.org/jira/browse/SOLR-7490 – cheffe

Respuesta

10

No, lamentablemente no hay ninguna característica como actualización por consulta. Sería realmente útil, como una nueva característica para posibilitar la actualización de un documento sin necesidad de volver a enviarlo por completo; Hay un niño de 5 años de edad jira issue para eso. Por ahora solo debe volver a enviar sus documentos con los campos actualizados, se sobrescribirán (significa eliminado + reinsertado) si usa el mismo uniqueKey.

Por cierto, ¿está haciendo una solicitud http para que cada documento se actualice? Si es así, puede que sea más rápido de enviar más de un documento en un momento como este:

<add> 
    <doc> 
    <field name="employeeId">05991</field> 
    <field name="office">Bridgewater</field> 
    </doc> 
    <doc> 
    <field name="employeeId">05992</field> 
    <field name="office">Bridgewater</field> 
    </doc> 
    <doc> 
    <field name="employeeId">05993</field> 
    <field name="office">Bridgewater</field> 
    </doc> 
</add> 
1

Como javanna respondió, no hay ninguna posibilidad de actualizar mediante consulta, como Solr tampoco permite actualizar campos individuales en un documento almacenado en el índice, por lo que volver a enviar es el único método de actualización. Sin embargo, tengo curiosidad sobre por qué tus actualizaciones son tan lentas. Debajo hay algunas maneras en que puede mejorar la velocidad de actualización.

  • Si la emisión de una confirmación después de la actualización de cada documento individual, a continuación, esperar y sólo emitir la actualización después de actualizar un lote de documentos en el índice. Desde el Solr Tutorial:

    Commit puede ser una operación costosa, así que es mejor que hacer muchos cambios a un índice en un lote y luego enviar el comando commit al final. También hay un comando de optimización que hace lo mismo que commit, , además de fusionar todos los segmentos de índice en un solo segmento, , lo que hace que sea más rápido buscar y hacer que los documentos eliminados sean eliminados.

  • Considere el uso de confirmaciones suaves o confirmaciones automáticas automáticas para reducir la latencia de actualización. Consulte la página NearRealtimeSearch en Solr Wiki para obtener más información.

+0

Supuse que el proceso de actualización era lento solo por la cantidad de solicitudes http ... ¡Buenas sugerencias! – javanna

0

Yo usaría DIH con una consulta SQL modificada que aceptará los parámetros de la URL. consulta SQL se verá así:

SELECT user_name, user_online FROM users WHERE user_id=${dataimporter.request.user_id} 

A continuación, volver a indexar los usuarios seleccionados que va a agregar el parámetro user_id a URL así:

http://<host>:<port>/solr/dataimport?command=full-import&clean=false&user_id=5 

Documentos sobre el uso de DIH y personalizados parámetros: Solr - DataImportHandler

1

Puede desarrolle un complemento mínimo de Solr que hará el trabajo por usted en el lado del servidor de sol.
Tenga una mirada en: Discussion on Solr mailing list

6

Todavía no hay ninguna actualización por consulta, pero las respuestas a partir de 2012, han quedado desfasadas. Ahora en Solr 4.x hay https://wiki.apache.org/solr/Atomic_Updates para que pueda hacer lo que desea hacer en dos pasos sin necesidad de acceder al documento original.

+0

Existen límites para la actualización atómica. Como dijo Erick en maillist, sigue siendo una actualización de documento completo detrás de la escena. Los campos de un documento que no aparece al usar la actualización atómica deben ser "almacenados"; de lo contrario, sus valores originales pueden perderse después de la actualización atómica porque creo que recupera los valores de dichos campos no listados del índice original y los combina con los campos enumerados para realizar la actualización atómica y luego actualiza todo el documento detrás de la escena. (El último Solr es v6.1.0 al escribir este comentario) –

Cuestiones relacionadas