diff --git a/include/elasticlient/bulk.h b/include/elasticlient/bulk.h index 2598d8c..fd3a7c8 100644 --- a/include/elasticlient/bulk.h +++ b/include/elasticlient/bulk.h @@ -85,6 +85,17 @@ class SameIndexBulkData: public IBulkData { const std::string &docType, const std::string &id, const std::string &doc); + /** + * Add update document request to the bulk. + * \param docType document type (as specified in mapping). + * \param id document ID. + * \param doc Json document to index. Must not contain newline char. + * \return true if bulk has reached its desired capacity. + */ + bool updateDocument( + const std::string &docType, const std::string &id, + const std::string &doc); + /// Clear bulk (size() == 0 after this). void clear(); diff --git a/src/bulk.cc b/src/bulk.cc index a9f659d..4785a7d 100644 --- a/src/bulk.cc +++ b/src/bulk.cc @@ -68,6 +68,15 @@ bool SameIndexBulkData::createDocument( return impl->data.size() >= impl->size; } +bool SameIndexBulkData::updateDocument( + const std::string &docType, const std::string &id, const std::string &doc) +{ + validateDocument(doc, id); + impl->data.emplace_back(createControl("update", docType, id), doc); + // return true if bulk has reached its desired capacity + return impl->data.size() >= impl->size; +} + void SameIndexBulkData::clear() { impl->data.resize(0);