• 索引一个文档
    • 使用自己的ID
    • 自增ID

    索引一个文档

    文档通过index API被索引——使数据可以被存储和搜索。但是首先我们需要决定文档所在。正如我们讨论的,文档通过其_index_type_id唯一确定。们可以自己提供一个_id,或者也使用index API 为我们生成一个。

    使用自己的ID

    如果你的文档有自然的标识符(例如user_account字段或者其他值表示文档),你就可以提供自己的_id,使用这种形式的index API:

    1. PUT /{index}/{type}/{id}
    2. {
    3. "field": "value",
    4. ...
    5. }

    例如我们的索引叫做“website”,类型叫做“blog”,我们选择的ID是“123”,那么这个索引请求就像这样:

    1. PUT /website/blog/123
    2. {
    3. "title": "My first blog entry",
    4. "text": "Just trying this out...",
    5. "date": "2014/01/01"
    6. }

    Elasticsearch的响应:

    1. {
    2. "_index": "website",
    3. "_type": "blog",
    4. "_id": "123",
    5. "_version": 1,
    6. "created": true
    7. }

    响应指出请求的索引已经被成功创建,这个索引中包含_index_type_id元数据,以及一个新元素:_version

    Elasticsearch中每个文档都有版本号,每当文档变化(包括删除)都会使_version增加。在《版本控制》章节中我们将探讨如何使用_version号确保你程序的一部分不会覆盖掉另一部分所做的更改。

    自增ID

    如果我们的数据没有自然ID,我们可以让Elasticsearch自动为我们生成。请求结构发生了变化:PUT方法——“在这个URL中存储文档”变成了POST方法——"在这个类型下存储文档"。(译者注:原来是把文档存储到某个ID对应的空间,现在是把这个文档添加到某个_type下)。

    URL现在只包含_index_type两个字段:

    1. POST /website/blog/
    2. {
    3. "title": "My second blog entry",
    4. "text": "Still trying this out...",
    5. "date": "2014/01/01"
    6. }

    响应内容与刚才类似,只有_id字段变成了自动生成的值:

    1. {
    2. "_index": "website",
    3. "_type": "blog",
    4. "_id": "wM0OSFhDQXGZAWDf0-drSA",
    5. "_version": 1,
    6. "created": true
    7. }

    自动生成的ID有22个字符长,URL-safe, Base64-encoded string universally unique identifiers, 或者叫 UUIDs。