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是索引名。
响应:
索引 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 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" } }
看下面的截图,它将如何在浏览器上显示:
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。
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 }
看下面的截图在浏览器上查看结果:
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": {} } } }
下一章:ES 搜索API
Elasticsearch 提供了搜索 API,用于跨索引和所有类型搜索数据。它有助于通过执行搜索查询来搜索 Elasticsearch 中的数据,并返回与查询匹配的搜索结果。这个 API 使您能够在 Elasticsea ...