ES 文档API
Elasticsearch 文档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是索引名。
响应
索引 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
}
在浏览器中看下面的截图-
获取 API
Get API 有助于检索或读取存储在索引中的数据。
此 API 负责从索引中检索指定的 JSON 文档。
示例
在这个示例中,我们将使用GET API来读取文档。创建一个新请求并指定索引名称和文档 ID。它将获取并在响应正文中显示结果。
索引名称 = student
文档 ID = 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"
}
}
看下面的截图,它将如何在浏览器上显示-
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
}
看下面的截图它在浏览器上的样子-
删除API
您可以使用此 API 删除特定索引、文档或映射。
向 Elasticsearch 发送 HTTP DELETE 请求以执行删除操作。
创建删除查询不需要大语句。
使用 _delete API 并指定要删除的索引名称。
示例
我们将使用DELETE API 来删除存储在索引中的文档。因此,只需设置 DELETE 请求方法并提供要删除的索引名称和文档 ID。
复制代码
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
}
看下面的截图在浏览器上查看结果-
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",
}
}
]
}
看下面的截图在浏览器上查看结果-
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": [ ]
}
请参阅下面的屏幕截图以更好地了解请求和响应在浏览器上的外观-
如果我们使用 "script": {} 代替 field_name: value(即,"city": "New York"),它将删除所有存在的文档在学生索引中。请求查询将类似于-
{
"query": {
"match": {
"match_all": {}
}
}
}
按 Q 更新
Elasticsearch 文档 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是索引名。
响应
索引 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
}
在浏览器中看下面的截图-
获取 API
Get API 有助于检索或读取存储在索引中的数据。
此 API 负责从索引中检索指定的 JSON 文档。
示例
在这个示例中,我们将使用GET API来读取文档。创建一个新请求并指定索引名称和文档 ID。它将获取并在响应正文中显示结果。
索引名称 = student
文档 ID = 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"
}
}
看下面的截图,它将如何在浏览器上显示-
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
}
看下面的截图它在浏览器上的样子-
删除API
您可以使用此 API 删除特定索引、文档或映射。
向 Elasticsearch 发送 HTTP DELETE 请求以执行删除操作。
创建删除查询不需要大语句。
使用 _delete API 并指定要删除的索引名称。
示例
我们将使用DELETE API 来删除存储在索引中的文档。因此,只需设置 DELETE 请求方法并提供要删除的索引名称和文档 ID。
复制代码
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
}
看下面的截图在浏览器上查看结果-
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",
}
}
]
}
看下面的截图在浏览器上查看结果-
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": [ ]
}
请参阅下面的屏幕截图以更好地了解请求和响应在浏览器上的外观-
如果我们使用 "script": {} 代替 field_name: value(即,"city": "New York"),它将删除所有存在的文档在学生索引中。请求查询将类似于-
{
"query": {
"match": {
"match_all": {}
}
}
}
按 Q 更新常用 API
按查询更新 API(_update_by_query) 对索引中存在的每个文档执行更新,而不更改源。
script 关键字用于创建执行此操作的查询请求。
示例
在此示例中,我们将所有城市为纽约的文档中的邮政编码更新为 29001、
方法: POST
API: _update_by_query
索引名称: student
类型: _doc
更新数据: 邮政编码
执行以下查询并更新文档。
复制代码
POST student/_doc/
_update_by_query
{
"script": {
"inline": "ctx._source.zip=29001",
"lang": "painless"
},
"query": {
"match": {
"city": "New York"
}
}
}
响应
如果输出相同,则文档更新成功。
{
"took": 346,
"timed_out": false,
"total": 3,
"updated": 3,
"deleted": 0,
"batches": 1,
"version_conflicts": 0,
"noops": 0,
"retries": {
"bulk": 0,
"search": 0
},
"throttled_millis": 0,
"request_per_second":-1,
"throttled_until_millis": 0,
"faliures": [ ]
}
响应将与下面的截图相同-
这里,可以看到更新了3条记录,符合给定的条件。
Reindex API
这个API基本上用在我们需要另一个索引中的文档。我们使用 _reindex API 将文档数据从一个索引复制到另一个索引。借助此 API,我们可以轻松地从索引中复制文档并将其复制到另一个索引中。以下是有关 reindex API 的一些要点:
Reindex API 从源索引中提取文档并将该文档索引到目标索引。
_source 必须为源索引中存在的所有文档启用。
在调用 _reindex 之前,您必须先设置目标索引。
示例
执行以下查询以将文档从一个索引重新索引到另一个索引。
方法: POST
API: _reindex
索引名称: student
新索引: new_student
复制代码
POST
_reindex
{
"source": {
"index": "student"
},
"dest": {
"index": "new_student"
}
}
响应
如果输出相同,则文档复制成功。
{
"took": 1748,
"timed_out": false,
"total": 2,
"updated": 0,
"created": 2,
"deleted": 0,
"batches": 1,
"version_conflicts": 0,
"noops": 0,
"retries": {
"bulk": 0,
"search": 0
},
"throttled_millis": 0,
"request_per_second":-1,
"throttled_until_millis": 0,
"faliures": [ ]
}
看下面的截图,它在浏览器上的样子。
因此,使用搜索 API,您可以看到复制到新索引中的所有文档,即 new_student。