Document ID strategies (auto vs manual) in Elasticsearch - Performance Comparison
When storing documents in Elasticsearch, the way we assign IDs affects how fast operations run.
We want to know how the choice between automatic and manual IDs changes the work Elasticsearch does.
Analyze the time complexity of indexing documents with auto-generated IDs vs manual IDs.
POST /my_index/_doc/
{ "name": "Alice" }
POST /my_index/_doc/123
{ "name": "Bob" }
The first request lets Elasticsearch create an ID automatically. The second uses a manual ID "123".
Look at what Elasticsearch does each time it indexes a document.
- Primary operation: Checking if the document ID exists in the index.
- How many times: Once per document indexed.
With manual IDs, Elasticsearch must search for the ID to update or create. With auto IDs, it skips this search.
As you add more documents, the time to check for existing manual IDs grows.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 ID checks |
| 100 | 100 ID checks |
| 1000 | 1000 ID checks |
Each manual ID requires a lookup, so operations grow linearly with the number of documents.
Time Complexity: O(n)
This means the work grows in direct proportion to how many documents you index with manual IDs.
[X] Wrong: "Using manual IDs is always faster because I control the IDs."
[OK] Correct: Manual IDs require Elasticsearch to check if the ID exists, adding extra work that grows with more documents.
Understanding how ID strategies affect performance shows you can think about how data choices impact speed, a key skill in real projects.
"What if we batch index documents with manual IDs instead of one by one? How would the time complexity change?"
Practice
Solution
Step 1: Understand automatic ID generation
Elasticsearch creates unique IDs automatically when you don't specify one.Step 2: Understand manual ID assignment
Users can assign their own IDs to documents for control and easier updates.Final Answer:
Automatic IDs are generated by Elasticsearch; manual IDs are set by the user. -> Option AQuick Check:
Auto = Elasticsearch generated, Manual = user set [OK]
- Confusing which side creates the ID
- Thinking automatic IDs are numeric only
- Believing manual IDs cannot be updated
Solution
Step 1: Identify the correct field for manual ID
Elasticsearch uses "_id" (with underscore) to specify manual document IDs.Step 2: Check the correct structure for indexing
The "body" key holds the document content; "doc" is used for updates, not indexing.Final Answer:
{ "index": "my_index", "_id": "123", "body": { "name": "Alice" } } -> Option AQuick Check:
Manual ID uses "_id" and "body" for document [OK]
- Using "id" instead of "_id"
- Confusing "doc" with "body" for indexing
- Passing numeric ID without quotes
{ "index": "products", "_id": "p100", "body": { "name": "Pen", "price": 1.5 } }What happens if you send the same request again with updated price 1.8?
Solution
Step 1: Understand manual ID behavior on indexing
Using the same manual ID overwrites the existing document with that ID.Step 2: Check the effect of sending updated data
The document with ID "p100" will be updated to have price 1.8.Final Answer:
The existing document with ID "p100" is updated with the new price. -> Option BQuick Check:
Same manual ID means update existing document [OK]
- Thinking a new document is created with same ID
- Expecting an error on duplicate ID
- Assuming no change happens on reindex
{ "index": "users", "id": "u123", "body": { "name": "Bob" } }But the document was not saved with ID "u123". What is the likely problem?
Solution
Step 1: Check the ID field name
Elasticsearch requires "_id" (with underscore) to specify manual IDs, not "id".Step 2: Confirm impact of wrong field
Using "id" means Elasticsearch ignores it and generates an automatic ID instead.Final Answer:
The field "id" should be "_id" to set manual ID. -> Option CQuick Check:
Manual ID needs "_id", not "id" [OK]
- Using "id" instead of "_id"
- Assuming missing fields cause ID issues
- Thinking manual IDs are disallowed
Solution
Step 1: Understand duplicate prevention
Duplicates can be avoided by assigning manual IDs based on unique fields like email.Step 2: Compare with automatic ID approach
Automatic IDs are random and do not prevent duplicates because each document gets a new ID.Final Answer:
Use a manual ID based on a unique field like email to prevent duplicates. -> Option DQuick Check:
Manual unique IDs prevent duplicates, auto IDs do not [OK]
- Thinking auto IDs prevent duplicates
- Using random manual IDs unrelated to content
- Relying on timestamps instead of IDs
Ready to prove it?
Pass the test and this pattern moves unknown
