WARNING: The 2.x versions of Elasticsearch have passed their EOL dates. If you are running a 2.x version, we strongly advise you to upgrade.
This documentation is no longer maintained and may be removed. For the latest information, see the current Elasticsearch documentation.
Creating a New Documentedit
How can we be sure, when we index a document, that we are creating an entirely new document and not overwriting an existing one?
Remember that the combination of _index
, _type
, and _id
uniquely
identifies a document. So the easiest way to ensure that our document is new
is by letting Elasticsearch autogenerate a new unique _id
, using the POST
version of the index request:
POST /website/blog/ { ... }
However, if we already have an _id
that we want to use, then we have to tell
Elasticsearch that it should accept our index request only if a document with
the same _index
, _type
, and _id
doesn’t exist already. There are two ways
of doing this, both of which amount to the same thing. Use whichever method is
more convenient for you.
The first method uses the op_type
query-string parameter:
PUT /website/blog/123?op_type=create { ... }
And the second uses the /_create
endpoint in the URL:
PUT /website/blog/123/_create { ... }
If the request succeeds in creating a new document, Elasticsearch will
return the usual metadata and an HTTP response code of 201 Created
.
On the other hand, if a document with the same _index
, _type
, and _id
already exists, Elasticsearch will respond with a 409 Conflict
response
code, and an error message like the following:
{ "error": { "root_cause": [ { "type": "document_already_exists_exception", "reason": "[blog][123]: document already exists", "shard": "0", "index": "website" } ], "type": "document_already_exists_exception", "reason": "[blog][123]: document already exists", "shard": "0", "index": "website" }, "status": 409 }
- Elasticsearch - The Definitive Guide:
- Foreword
- Preface
- Getting Started
- You Know, for Search…
- Installing and Running Elasticsearch
- Talking to Elasticsearch
- Document Oriented
- Finding Your Feet
- Indexing Employee Documents
- Retrieving a Document
- Search Lite
- Search with Query DSL
- More-Complicated Searches
- Full-Text Search
- Phrase Search
- Highlighting Our Searches
- Analytics
- Tutorial Conclusion
- Distributed Nature
- Next Steps
- Life Inside a Cluster
- Data In, Data Out
- What Is a Document?
- Document Metadata
- Indexing a Document
- Retrieving a Document
- Checking Whether a Document Exists
- Updating a Whole Document
- Creating a New Document
- Deleting a Document
- Dealing with Conflicts
- Optimistic Concurrency Control
- Partial Updates to Documents
- Retrieving Multiple Documents
- Cheaper in Bulk
- Distributed Document Store
- Searching—The Basic Tools
- Mapping and Analysis
- Full-Body Search
- Sorting and Relevance
- Distributed Search Execution
- Index Management
- Inside a Shard
- You Know, for Search…
- Search in Depth
- Structured Search
- Full-Text Search
- Multifield Search
- Proximity Matching
- Partial Matching
- Controlling Relevance
- Theory Behind Relevance Scoring
- Lucene’s Practical Scoring Function
- Query-Time Boosting
- Manipulating Relevance with Query Structure
- Not Quite Not
- Ignoring TF/IDF
- function_score Query
- Boosting by Popularity
- Boosting Filtered Subsets
- Random Scoring
- The Closer, The Better
- Understanding the price Clause
- Scoring with Scripts
- Pluggable Similarity Algorithms
- Changing Similarities
- Relevance Tuning Is the Last 10%
- Dealing with Human Language
- Aggregations
- Geolocation
- Modeling Your Data
- Administration, Monitoring, and Deployment