We are working on updating this book for the latest version. Some content might be out of date.
Documents are indexed—stored and made
searchable—by using the index
API. But first, we need to decide where the document lives. As we just
discussed, a document’s _index
, _type
, and _id
uniquely identify the
document. We can either provide our own _id
value or let the index
API
generate one for us.
If your document has a natural
identifier (for example, a user_account
field
or some other value that identifies the document), you should provide
your own _id
, using this form of the index
API:
PUT /{index}/{type}/{id} { "field": "value", ... }
For example, if our index is called website
, our type is called blog
,
and we choose the ID 123
, then the index request looks like this:
PUT /website/blog/123 { "title": "My first blog entry", "text": "Just trying this out...", "date": "2014/01/01" }
Elasticsearch responds as follows:
{ "_index": "website", "_type": "blog", "_id": "123", "_version": 1, "created": true }
The response indicates that the indexing request has been successfully created
and includes the _index
, _type
, and _id
metadata, and a new element:
_version
.
Every document in Elasticsearch has a version number. Every time a change is
made to a document (including deleting it), the _version
number is
incremented. In Dealing with Conflicts, we discuss how to use the _version
number to ensure that one part of your application doesn’t overwrite changes
made by another part.
If our data doesn’t have a natural ID, we can let Elasticsearch autogenerate
one for us.
The structure of the request changes: instead of using
the PUT
verb (“store this document at this URL”), we use the POST
verb (“store this document under this URL”).
The URL now contains just the _index
and the _type
:
POST /website/blog/ { "title": "My second blog entry", "text": "Still trying this out...", "date": "2014/01/01" }
The response is similar to what we saw before, except that the _id
field has been generated for us:
{ "_index": "website", "_type": "blog", "_id": "AVFgSgVHUP18jI2wRx0w", "_version": 1, "created": true }
Autogenerated IDs are 20 character long, URL-safe, Base64-encoded string universally unique identifiers, or UUIDs.