I need to clone the content of a document in my elasticsearch index (in the same index) by using the kibana console. I need exactly the same fields in the _source of the document (of course, the copy will have another id). I tryed to:

  1. GET the document
  2. Create a new empty instance of document
  3. Update the new document by manually copying the properties of the result on (1):
POST /blog/post/VAv2FWoBKgnBpki61WiD/_update { "doc" : { "content" : "..." ... 

But the problem is the field contain veeeery long properties. And sometimes I got an error since the strings seem not to be scaped when I manually copy them from the Kibana interface.

I searched in the documentation but I can not find a query to duplicate a document, and it is a quite common think to do I think...

Any clue?

1 Answer

Make use of Reindex API. Here is what you can do.

Summary of steps:

  • Create a destination_index (dummy). Make sure the mapping is exact to that of source_index
  • Using Reindex API, reindex that particular document from source_index to desitnation_index. During this operation, update the _id (I've mentioned the script)
  • Reindex this document back from desitnation_index to source_index

Reindex Query

Step 1: Copy document from source_index to destination_index. (With the script)

POST _reindex { "source": { "index": "source_index", "query": { "match": { "_id": "1" } } }, "dest": { "index": "destination_index" }, "script": { "inline": "ctx._id=2", "lang": "painless" } } 

Note how I've added a script in the above query that would change the _id (_id is set as 2) of the document. Your destination_index would have all the fields with exact same values as that of source except for the _id field.

Step 2: Copy that document from destination_index to source_index

POST _reindex { "source": { "index": "destination_index", "query": { "match": { "_id": "2" } } }, "dest": { "index": "source_index" } } 

Now search the source_index, it would have two documents with different _ids (_id=1 and _id=2) having exact same content.

Hope this helps!

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.