es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo asegurarme de que un valor existente no sea sobrescrito al realizar una actualización de ElasticSearch en Java?

Tengo una entrada de ElasticSearch con el ID “myId” en el índice “myIndex”. Esta entrada tiene el campo “someExistingField”.

Ahora quiero actualizar esta entrada. Por razones técnicas, la solicitud de actualización no contiene datos de “someExistingField”.

Quiero asegurarme de que, en el alcance de esta actualización:

  • solo se cambien los valores que se especifican en la solicitud de actualización y
  • los valores no mencionados en la solicitud de actualización no se cambien.

Actualmente estoy usando este código:

final Map<String, Object> esDocument = ...;

final UpdateRequest request = new UpdateRequest(myIndex, myId);
request.doc(esDocument, XContentType.JSON);

esClient.update(request, RequestOptions.DEFAULT);

¿Cómo debo cambiar este código para que no sobrescriba los valores existentes que no están especificados en la “request”?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para evitar la sobrescritura de valores existentes que no estén especificados en la solicitud de actualización, debes utilizar la función de actualización parcial de Elasticsearch. Para hacerlo, debes modificar el código de la siguiente manera:

    final Map<string, object=""> esDocument = ...;
    
    final UpdateRequest request = new UpdateRequest(myIndex, myId);
    request.doc(esDocument, XContentType.JSON);
    request.docAsUpsert(true); // Agrega esta línea para habilitar la actualización parcial
    
    esClient.update(request, RequestOptions.DEFAULT);
    

    La llamada al método docAsUpsert agrega el documento especificado en el método doc como un documento de inserción (upsert). Esto significa que si el documento no existe, se creará con los campos especificados en la solicitud de actualización. Si ya existe, solo se actualizarán los campos especificados y los demás campos se mantendrán sin cambios.</string,>

Comments are closed.