Updating documents in Elasticsearch - Time & Space Complexity
When updating documents in Elasticsearch, it is important to understand how the time taken grows as the number of documents increases.
We want to know how the update operation scales when more documents are involved.
Analyze the time complexity of the following code snippet.
POST /my_index/_update_by_query
{
"script": {
"source": "ctx._source.counter += params.count",
"params": {"count": 1}
},
"query": {
"term": {"status": "active"}
}
}
This code updates all documents with status "active" by increasing their counter field by 1.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The update script runs once for each matching document.
- How many times: Equal to the number of documents matching the query.
As the number of matching documents grows, the total updates grow proportionally.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 update script executions |
| 100 | 100 update script executions |
| 1000 | 1000 update script executions |
Pattern observation: The work grows directly with the number of documents to update.
Time Complexity: O(n)
This means the time to update grows linearly with the number of documents matched.
[X] Wrong: "Updating documents is always a quick single operation regardless of how many documents match."
[OK] Correct: Each matching document must be updated individually, so more documents mean more work and longer time.
Understanding how update operations scale helps you explain performance considerations clearly and shows you grasp how Elasticsearch handles data changes.
"What if we changed the update to only affect a fixed number of documents regardless of total matches? How would the time complexity change?"
Practice
_update API in Elasticsearch do?Solution
Step 1: Understand the purpose of
The_updateAPI_updateAPI is designed to change parts of a document without replacing the entire document.Step 2: Compare options with the API function
Only It modifies specific fields of an existing document without replacing the whole document. correctly describes modifying specific fields without full replacement, while others describe unrelated actions.Final Answer:
It modifies specific fields of an existing document without replacing the whole document. -> Option BQuick Check:
_update API modifies parts of a document [OK]
- Thinking _update deletes documents
- Confusing _update with document retrieval
- Assuming _update creates new indexes
status to "active" in a document with ID 1 in index users?Solution
Step 1: Identify the correct HTTP method and endpoint
The update API uses POST method with the path/index/_update/document_id.Step 2: Check the request body format
The fields to update must be inside thedocobject. POST /users/_update/1 { "doc": { "status": "active" } } matches this format exactly.Final Answer:
POST /users/_update/1 { "doc": { "status": "active" } } -> Option CQuick Check:
Use POST with _update and doc object [OK]
- Using GET instead of POST for update
- Omitting the doc wrapper in the body
- Using _doc endpoint instead of _update
POST /products/_update/42
{
"doc": {
"price": 19.99
}
}What happens to the other fields of the document with ID 42?
Solution
Step 1: Understand partial update behavior
The_updateAPI updates only the fields inside thedocobject, leaving other fields intact.Step 2: Analyze the given request
Only thepricefield is specified, so other fields stay as they were.Final Answer:
They remain unchanged; only the price field is updated. -> Option AQuick Check:
_update changes specified fields only [OK]
- Assuming update replaces whole document
- Expecting update to fail without all fields
- Thinking update resets other fields
POST /orders/_update/100
{
"status": "shipped"
}Solution
Step 1: Check the update request format
The update body must have adocobject wrapping the fields to update.Step 2: Identify the error in the request
The request body lacks thedocwrapper, causing a syntax error.Final Answer:
Missing the doc wrapper around the fields to update. -> Option DQuick Check:
Update body needs doc wrapper [OK]
- Omitting doc wrapper in update body
- Confusing POST and PUT methods
- Assuming missing document causes syntax error
stock field by 5 in a product document with ID 10. Which update request correctly does this?Solution
Step 1: Understand how to increment a field
To increase a numeric field, use a script that modifies the field value.Step 2: Analyze each option
POST /products/_update/10 { "script": "ctx._source.stock += 5" } uses a script to add 5 tostock. Others either overwrite or use wrong syntax.Final Answer:
POST /products/_update/10 { "script": "ctx._source.stock += 5" } -> Option AQuick Check:
Use script to increment numeric fields [OK]
- Trying to increment by setting doc field directly
- Using incorrect JSON structure for update
- Confusing doc and script usage
Ready to prove it?
Pass the test and this pattern moves unknown
