Indexing Documents into Elasticsearch
Understand how to index single and multiple documents into an Elasticsearch index, including automatic ID generation and custom IDs.
Indexing Documents into Elasticsearch is a free Elasticsearch & Full Text Search Systems lesson on CoddyKit — lesson 1 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Elasticsearch & Full Text Search Systems learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
What is Indexing?
Welcome to indexing! In Elasticsearch, indexing is the process of storing data into an index to make it searchable.
Think of it like adding a new book to a library's catalog. You provide the book's details, and the library stores them in a way that makes the book easy to find later.
Documents & Indices Refresher
Before we dive in, let's quickly recap two core concepts:
- Document: A basic unit of information in Elasticsearch, similar to a row in a traditional database. It's usually a JSON object.
- Index: A collection of documents that have similar characteristics. It's like a database in a relational world.
When you index, you add a document to an index.
The Index API
You interact with Elasticsearch using its REST API. To index a document, you'll typically use HTTP POST or PUT requests.
POST /<index>/_doc: Used to index a document, often letting Elasticsearch generate an ID.PUT /<index>/_doc/<id>: Used to index a document with a specific, user-provided ID.
Let's see them in action!
Auto-Generated IDs
The simplest way to index is to let Elasticsearch generate a unique ID for your document. You use the POST method to the _doc endpoint without specifying an ID.
Here's an example using curl to index a document into an index named products:
curl -X POST "localhost:9200/products/_doc?pretty" \
-H 'Content-Type: application/json' \
-d'{"name": "Laptop", "price": 1200}'Understanding Auto IDs
After the previous POST request, Elasticsearch would return a response including a unique _id for your document, like "_id": "AbCdEfGhIjKlMnOpQrSt".
When should you use auto-generated IDs?
- When you don't have a natural unique identifier for your data.
- For logs or temporary data where a unique ID isn't critical for external reference.
- When you want to guarantee a new document is always created.
Indexing with Custom IDs
Often, your data already has a unique identifier from another system (e.g., a database primary key). In such cases, you can provide your own ID using the PUT method.
The ID is specified directly in the URL path: /<index>/_doc/<your_id>.
curl -X PUT "localhost:9200/products/_doc/prod_101?pretty" \
-H 'Content-Type: application/json' \
-d'{"name": "Smartphone", "price": 800}'Why Use Custom IDs?
Using custom IDs offers several advantages:
- Integration: Easily map Elasticsearch documents to records in an external database.
- Predictability: You know the document's ID beforehand.
- Updates: It makes updating specific documents straightforward, as you always refer to them by their known ID.
Idempotency with PUT
A key concept when using PUT with a custom ID is idempotency. This means that performing the same operation multiple times will produce the same result as performing it once.
- If a document with the specified ID already exists,
PUTwill update it. - If it doesn't exist,
PUTwill create it.
This is different from POST, which always creates a *new* document with a new ID.
Indexing Many Documents
While indexing documents one-by-one is fine for small numbers, it can be inefficient for large datasets due to network overhead.
Elasticsearch provides a powerful _bulk API that allows you to perform multiple index, update, or delete operations in a single request. This dramatically improves indexing performance.
We'll explore the _bulk API in more detail in a future lesson!
Indexing Method Check
Imagine you have a new set of sensor readings. Each reading is unique, and you don't have a predefined ID for them, but you want to store them in Elasticsearch to be searchable.
Recap: Indexing Essentials
Great job! In this lesson, you learned the fundamentals of indexing documents into Elasticsearch:
- What indexing means and its role in making data searchable.
- The difference between documents and indices.
- How to use
POST /<index>/_docto index documents with auto-generated IDs. - How to use
PUT /<index>/_doc/<id>to index documents with custom IDs. - The concept of idempotency when using
PUT. - A brief introduction to the efficiency of bulk indexing.
Next, we'll explore more operations on these documents!
Frequently asked questions
Is the “Indexing Documents into Elasticsearch” lesson free?
Yes — the full text of “Indexing Documents into Elasticsearch” is free to read here on the web, and the Elasticsearch & Full Text Search Systems course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Elasticsearch & Full Text Search Systems course, upgrade to CoddyKit PRO.
What will I learn in “Indexing Documents into Elasticsearch”?
Understand how to index single and multiple documents into an Elasticsearch index, including automatic ID generation and custom IDs. You practise Elasticsearch & Full Text Search Systems with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Elasticsearch & Full Text Search Systems?
No prior experience is required. Elasticsearch & Full Text Search Systems on CoddyKit is structured for beginners through advanced learners; this is — lesson 1 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Indexing Documents into Elasticsearch” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Elasticsearch & Full Text Search Systems lesson?
Yes. Every Elasticsearch & Full Text Search Systems lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Indexing Documents into Elasticsearch
- CRUD Operations with Documents
- Basic Mapping and Data Types
- Bulk Indexing and the Bulk API