2012-08-03 29 views
10

¿hay posibilidad de actualizar un nuevo campo a un documento existente? Por ejemplo: Hay un documento con varios campos, p.Actualizar un nuevo campo al documento existente

ID=99999 
Field1:text 
Field2:text 

Este documento ya está en el índice, ahora quiero insertar un nuevo campo de este documento sin la vieja datos:

ID=99999 
Field3:text 

Por ahora, se eliminará el más antiguo documento y un nuevo Se creará el documento con la ID. Así que si ahora buscar el ID 99999, el resultado será:

ID=99999 
Field3:text 

leí esto en el Wiki Solr

¿Cómo puedo actualizar un campo específico de un documento existente?

Quiero actualizar un campo específico en un documento, ¿es eso posible? Solo necesito indexar un campo para> un documento específico. ¿Debo indexar todo el documento para esto?

No, solo el único documento. Supongamos que tiene un CMS y edita un documento. Tendrá que volver a indexar este documento solo mediante el uso de la declaración de agregar solr para todo el documento (no solo un campo).

En Lucene para actualizar un documento, la operación es realmente una eliminación seguida de un complemento. Necesitará> agregar el documento completo ya que no existe tal semántica de "actualizar solo un campo" en Lucene.

¿Hay alguna solución para esto? ¿Esta función se implementará en una versión posterior (actualmente utilizo 3.6.0)? Como solución alternativa, pensé en escribir un script o una aplicación, que recopilará los campos existentes, agregará el nuevo campo y actualizará todo el documento. Pero creo que esto sufrirá rendimiento. ¿Tienes alguna otra idea?

Saludos

Respuesta

10

que tengo para ustedes 2 respuestas (tanto más o menos mal):

  1. Para actualizar presentada dentro documento Solr que tiene que indexar todo el documento (para actualizar Campo3 dentro del documento de identificación : 99999 tiene que reindexar ese documento con valores para todos los campos)
  2. En Solr 4 implementaron características como esa, pero tienen una condición: todos los campos deben almacenarse, no solo indexarse. Lo que está sucediendo es que están usando valores almacenados y reindexando documentos en segundo plano. Si está interesado, hay un buen artículo al respecto: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/ Esta solución tiene un defecto obvio y ese es el tamaño del índice cuando está almacenando todos los campos.

Espero que esto te ayude con tu problema. Si tiene más preguntas, consulte

+0

Muchas gracias! Tu primera respuesta es justo en lo que pensé. ¿Crees que esto sufrirá mucho el rendimiento? Para la respuesta 2: ¿Me puede dar un enlace oficial con este registro de cambios? No pude encontrar esta característica. Buen enlace :-) –

+0

Depende de la frecuencia con la que realice los cambios, qué tan grande es su índice, qué tan grande son los documentos, qué hardware está usando. Como cualquier cambio cuesta IO, CPU, etc., debería experimentar cuánto en su caso. Para la segunda parte, no puedo encontrarla en el registro: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?view=markup; sin embargo, Yonik Seeley confirma que en http: // grokbase.com/t/lucene/solr-user/127bc3svh7/updating-documents – Fuxi

+0

Mi índice contiene aproximadamente 1,8 millones de documentos, cada documento tiene alrededor de 10-30 campos multivalor. El problema es que el desarrollo de la aplicación costará demasiado tiempo, si no puedo usarlo debido a la pérdida de alto rendimiento. ¿Se recomienda cambiar la versión a la versión alfa 4.0? ¿Tienes alguna experiencia? Muchas gracias :-) –

6

. Es posible hacerlo en Solr 4. E.g.Considere el siguiente documento

{ 
"id": "book123", 
"name" : "Solr Rocks" 
} 

Para añadir un campo de autor con el documento el valor del campo sería un objeto JSON con el "ajuste" atributo y el valor del campo

$ curl http://localhost:8983/solr/update -H 'Content-type:application/json' -d ' 
[ 
{"id"  : "book123", 
    "author" : {"set":"The Community"} 
} 
]' 

Su nuevo documento

$ curl http://localhost:8983/solr/get?id=book123 

será

{ 
"doc" : { 
    "id" : "book123", 
    "name" : "Solr Rocks" 
    "author": "The Community" 
} 
} 

El conjunto agregará o reemplazará el campo de autor. Junto con el conjunto, también tiene la opción de incrementar (inc) y agregar (agregar)

+0

Quiero actualizar el documento en el campo de autor sin usar el campo ID. ¿Cómo puedo hacer eso? – iNikkz

0

Desde Solr 4 en adelante puede actualizar un campo en sol ... no es necesario volver a indexar los índices completos .... varios modificadores son compatibles como ....

conjunto - establecer o sustituir un valor particular, o quitar el valor nulo si no se especifica como el nuevo valor add - agrega un valor adicional a una lista Remove - elimina un valor (o una lista de valores) de una lista removeregex - elimina de una lista que coincide con la expresión regular de Java dada inc - incrementa un valor numérico en una cantidad específica (use un valor negativo para decrementar)

ejemplo:

documento

{ 
"id": "1", 
"name" : "Solr" 
"views" : "2" 
} 

ahora se actualizan con

$ curl http://localhost:8983/solr/demo/update -d ' 
[ 
{"id"   : "1", 
    "author" : {"set":"Neal Stephenson"}, 
    "views" : {"inc":3}, 
    } 
]' 

resultará en

{ 
"id": "1", 
"name" : "Solr" 
"views" : "5" 
"author" : "Neal Stephenson" 
} 
Cuestiones relacionadas