ES 文档API

正如我们在早期教程中已经讨论过的,Elasticsearch 是一个面向文档的数据库,它以文档形式存储所有数据。 API 使用 JSON 文档格式来存储数据。 文档 API 是那些在文档级别执行操作的 API。因此,如果您想在文档级别执行某些操作,则必须使用文档出现。借助文档 API,您可以很好地做到这一点。

在 Elasticsearch 中,文档 API 分为两类: 单文档API a> 和 多文档 API。我们将通过示例详细讨论每个 API:

1.单个文档 API

如果您想对单个文档而不是一组文档执行操作,这些 API 非常有用。因此,当您要对单个文档执行操作时,可以使用这些单个文档 API。单文档 API 进一步分为四种 API,如下所示:

  • 索引 API
  • 获取 API
  • 更新 API
  • 删除 API

首先,创建一个索引来使用所有这些 API。使用以下命令:

PUT student

这里PUT是请求方法,student是索引名。

响应:

Elasticsearch Document APIs

索引 API

  • 此 API 有助于在发出请求时在指定索引中添加文档。
  • 它还允许我们在文档已经存在的情况下更新文档。
  • Index API 用于完全替换现有文档。
  • Index API 允许我们添加和更新文档。
  • 我们必须使用 POST 方法在需要指定文档 ID 的地方添加数据。

示例:

使用以下代码在索引中添加数据:

POST student/_doc/02/
{
"name ": "Stan Lee",
"gender": "Male",
"phone": "9876543211",
"street": " new Rochelle", 
"city": "New York", 
"country": "United States", 
"zip": "10029"
}

这里POST是请求方法,_doc是文档类型,用于在索引中添加数据。

响应:

如果您在响应正文中获得以下输出,则成功添加请求正文中提供的数据。

{ 
"index": "student",
"type": "_doc",
"id": "02",
"version": 1,
"result": "created",
"_shards": {
"total":2,
"successful":1,
"failed": 0
}
"_seq_no": 0,
"_primary_term": 1
}

在浏览器中看下面的截图:

Elasticsearch Document APIs

获取 API

  • Get API 有助于检索或读取存储在索引中的数据。
  • 此 API 负责从索引中检索指定的 JSON 文档。

示例:

在这个示例中,我们将使用GET API来读取文档。创建一个新请求并指定索引名称和文档 ID。它将获取并在响应正文中显示结果。

索引名称 = student 文档 ID = 02

GET student/_doc/02/

选择 GET 方法并将剩余的代码附加到请求字符串中。

响应:

下面的输出将显示在上面的响应正文中请求:

{ 
"index": "student",
"type": "_doc",
"id": "02",
"version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"name ": "Stan Lee",
"gender": "Male",
"phone": "9876543211",
"street": "New Rochelle", 
"city": "New York", 
"country": "United States", 
"zip": "10029"
}
}

看下面的截图,它将如何在浏览器上显示:

Elasticsearch Document APIs

Update API

Update API 有助于更新现有文档,它使用脚本和版本控制。它允许传递合并到现有文档的部分文档。 _update 在发出请求时使用。

  • Script 关键字用于创建执行此操作的查询请求。它可以修改、更新或删除文档。您还可以使用 doc 代替 script 关键字来更新文档。
  • 版本控制用于确保在获取和重新索引期间未发生更新。
  • 请记住,它只会更新单个文档,而不是全部。

它接受两个参数索引名称和文档ID,即 和 。

示例:

Elasticsearch 提供了 _update API 和 POST 请求方法来更新文档。在本例中,我们将把 zip 从 10029 替换为 94003、

方法: POST API: _update 索引名称: student 类型: _doc 更新数据: 邮政编码

执行以下查询并更新文档。

POST student/_doc/02/
_update
{
"doc": {
"zip": "94003"
}
} 

响应:

如果输出相同,则文档更新成功。

{ 
"index": "student",
"type": "_doc",
"id": "02",
"version": 2,
"result": "updated",
"shards": {
"total": 2,
"successful": 1,
"failed": 0
}
"_seq_no": 1,
"_primary_term": 1
}

看下面的截图它在浏览器上的样子:

Elasticsearch Document APIs

删除API

  • 您可以使用此 API 删除特定索引、文档或映射。
  • 向 Elasticsearch 发送 HTTP DELETE 请求以执行删除操作。
  • 创建删除查询不需要大语句。
  • 使用 _delete API 并指定要删除的索引名称。

示例:

我们将使用DELETE API 来删除存储在索引中的文档。因此,只需设置 DELETE 请求方法并提供要删除的索引名称和文档 ID。

DELETE student/_doc/02/

Response

如果您得到以下输出,则文档 02 已成功删除。

{ 
"index": "student",
"type": "_doc",
"id": "02",
"version": 3,
"result": "deleted",
"shards": {
"total": 2,
"successful": 1,
"failed": 0
}
"_seq_no": 2,
"_primary_term": 1
}

看下面的截图在浏览器上查看结果:

Elasticsearch Document APIs

2.多文档 API

与单个文档 API 不同,您可以使用多文档 API 来跨多个文档进行查询。 例如-批量删除或更新数据,重新索引等。多文档API进一步分为五个API,如下所示:

  • 多获取 API
  • 批量 API
  • 按查询删除 API
  • 按查询更新 API
  • 重新索引 API

多获取API

  • 它使用 _docs 索引数组检索多个文档。
  • 它提供相同的功能,类似于 Single Get API。唯一的区别是此 API 返回多个文档。
  • 为了提取文档,我们使用 doc 数组来指定所有这些文档的索引、类型和 ID。
  • 我们需要使用 POST API 从索引中检索多个文档。那还不够;我们还需要在请求字符串中附加 _mget 并定义文档 ID 查询空间以获取多条记录。

请记住,必须在索引(数据库)中添加三四个以上的记录才能执行此操作。请参阅下面的示例:

POST student/_mget/
{
  "docs": [
   {  
       "_index": "student", "_type": "_doc", "_id": "01"
   },
   {  
       "_index": "student", "_type": "_doc", "_id": "03"
   }
  ]
}

在这里,我们正在获取 ID 为 01 和 03 的文档。

响应:

您将获得类似于以下响应的输出。

"docs": [
{ 
"index": "student",
"type": "_doc",
"id": "01",
"version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
      "source": {
 "name": "Alen Paul",
 "gender": "Male",
 "phone": "9876543210", 
 "street": "Malen Park",
 "city": "California",
 "country": "United State",
 "zip": "94025",
                  }
}
"index": "student",
"type": "_doc",
"id": "03",
"version": 1,
"_seq_no": 3,
"_primary_term": 1,
"found": true,
      "source": {
 "name": "Stan Lee",
 "gender": "Male",
 "phone": "9876543211", 
 "street": "New Rochelle",
 "city": "New York",
 "country": "United State",
 "zip": "10029",
                  }
}
      ]
}

看下面的截图在浏览器上查看结果:

Elasticsearch Document APIs

BulkAPI

Bulk API 有助于批量上传或删除 JSON 对象。为此,请在单个请求中进行多个索引/删除操作。批量 API 类似于 Get API,并提供与其相同的所有其他功能。

  • 添加"_bulk"关键字以调用此 API。
  • 用于批量执行删除/更新/索引操作。

下面是一些批量命令的例子:

{ "delete": { "_index" : "student", "_type": "_docs", "_id": "02"} }
{ "update": { "_index" : "student", "_type": "_docs", "_id": "04"} } {"doc": {"field3": "value3"} } 

按查询删除 API

  • _delete_by_query 请求用于删除所有匹配的文档。
  • 在处理此请求时,Elasticsearch(ES) 执行多次搜索以找到要删除的所有文档。

示例:

执行以下查询并更新索引。这将删除所有具有 city = New York 的文档。

POST student/_doc/
_delete_by_query
{
  "query": {
    "match": {
        "city": "New York"
    }
  }
}

响应:

如果输出相同,则文档删除成功。

{ 
"took": 9376,
"timed_out": false,
"total": 3,
"deleted": 3,
"batches": 1,
"version_conflicts": 0,
"noops": 0,
"retries": {
"bulk": 0,
"search": 0
},
"throttled_millis": 0,
"request_per_second":-1,
"throttled_until_millis": 0,
"faliures": [ ]
}

请参阅下面的屏幕截图以更好地了解请求和响应在浏览器上的外观:

Elasticsearch Document APIs

如果我们使用 "script": {} 代替 field_name: value(即,"city": "New York"),它将删除所有存在的文档在学生索引中。请求查询将类似于:

{
  "query": {
    "match": {
        "match_all": {}
    }
  }
}

下一章:ES 搜索API

Elasticsearch 提供了搜索 API,用于跨索引和所有类型搜索数据。它有助于通过执行搜索查询来搜索 Elasticsearch 中的数据,并返回与查询匹配的搜索结果。这个 API 使您能够在 Elasticsea ...