返回介绍

Elasticsearch 文档API

发布于 2024-06-23 18:57:05 字数 14069 浏览 0 评论 0 收藏 0

Elasticsearch提供单文档API和多文档API,其中API调用分别针对单个文档和多个文档。

索引API

当使用特定映射对相应索引发出请求时,它有助于在索引中添加或更新JSON文档。 例如,以下请求将JSON对象添加到索引学校和学校映射下。

POST http://localhost:9200/schools/school/4

请求正文

  1. {
  2. "name":"City School", "description":"ICSE", "street":"West End", "city":"Meerut",
  3. "state":"UP", "zip":"250002", "location":[28.9926174, 77.692485], "fees":3500,
  4. "tags":["fully computerized"], "rating":"4.5"
  5. }

响应

  1. {
  2. "_index":"schools", "_type":"school", "_id":"4", "_version":1,
  3. "_shards":{"total":2, "successful":1,"failed":0}, "created":true
  4. }

自动索引创建

当请求将JSON对象添加到特定索引时,如果该索引不存在,那么此API会自动创建该索引以及该特定JSON对象的基础映射。 可以通过将以下参数的值更改为false来禁用此功能,这个值是存在于elasticsearch.yml文件中,打开elasticsearch.yml文件设置如下 。

  1. action.auto_create_index:false
  2. index.mapper.dynamic:false

还可以限制自动创建索引,其中通过更改以下参数的值只允许指定模式的索引名称。
action.auto_create_index:+acc*,-bank*

(其中+表示允许, - 表示不允许)

版本控制

Elasticsearch还提供版本控制功能。我们可以使用版本查询参数指定特定文档的版本。 例如:

POST http://localhost:9200/schools/school/1?version = 1

请求正文

  1. {
  2. "name":"Central School", "description":"CBSE Affiliation", "street":"Nagan",
  3. "city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405],
  4. "fees":2200, "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3"
  5. }

响应内容

  1. {
  2. "_index":"schools", "_type":"school", "_id":"1", "_version":2,
  3. "_shards":{"total":2, "successful":1,"failed":0}, "created":false
  4. }

有两种最重要的版本控制类型: 内部版本控制是以1开头的默认版本,每次更新都会增加,包括删除。版本号可以在外部设置。要启用此功能,我们需要将version_type设置为external。

版本控制是一个实时过程,它不受实时搜索操作的影响。

操作类型

操作类型用于强制创建操作,这有助于避免覆盖现有文档。

POST http://localhost:9200/tutorials/chapter/1?op_type = create

请求正文

  1. {
  2. "Text":"this is chapter one"
  3. }

响应内容

  1. {
  2. "_index":"tutorials", "_type":"chapter", "_id":"1", "_version":1,
  3. "_shards":{"total":2, "successful":1, "failed":0}, "created":true
  4. }

自动生成ID

当在索引操作中未指定ID时,Elasticsearch自动为文档生成ID。

父级和子级

可以通过在父URL查询参数中传递父文档的ID来定义任何文档的父级。

POST http://localhost:9200/tutorials/article/1?parent = 1

请求正文

  1. {
  2. "Text":"This is article 1 of chapter 1"
  3. }

注意:如果在执行此示例时遇到异常,请通过在索引中添加以下内容来重新创建索引。

  1. {
  2. "mappings": {
  3. "chapter": {},
  4. "article": {
  5. "_parent": {
  6. "type": "chapter"
  7. }
  8. }
  9. }
  10. }

超时

默认情况下,索引操作将在主分片上最多等待1分钟,超过后就会失败并响应错误。 可以通过将值传递给timeout参数来显式更改这个超时值。

POST http://localhost:9200/tutorials/chapter/2?timeout = 3m

请求正文

  1. {
  2. "Text":"This is chapter 2 waiting for primary shard for 3 minutes"
  3. }

获取API

API通过对特定文档执行get请求来帮助提取JSON对象。 例如,

GET http://localhost:9200/schools/school/1

响应

  1. {
  2. "_index":"schools", "_type":"school", "_id":"1", "_version":2,
  3. "found":true, "_source":{
  4. "name":"Central School", "description":"CBSE Affiliation",
  5. "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
  6. "location":[31.8955385,76.8380405], "fees":2200,
  7. "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3"
  8. }
  9. }
  • 这个操作是实时的,不受索引刷新率的影响。
  • 还可以指定版本,然后Elasticsearch将仅提取该版本的文档。
  • 还可以在请求中指定_all,以便Elasticsearch可以在每种类型中搜索该文档ID,并且它将返回第一个匹配的文档。
  • 还可以从该特定文档的结果中指定所需的字段。
    GET http://localhost:9200/schools/school/1?fields = name,fees

响应

  1. ……………………..
  2. "fields":{
  3. "name":["Central School"], "fees":[2200]
  4. }
  5. ……………………..

还可以通过在get请求中添加_source字段来获取结果中的源部分。
GET http://localhost:9200/schools/school/1/_source

响应

  1. {
  2. "name":"Central School", "description":"CBSE Afiliation", "street":"Nagan",
  3. "city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405],
  4. "fees":2200, "tags":["Senior Secondary", "beatiful campus"], "rating":"3.3"
  5. }

还可以在通过将 refresh 参数设置为true进行get操作之前刷新碎片。

删除API

可以通过向Elasticsearch发送HTTP DELETE请求来删除指定的索引,映射或文档。 例如,
DELETE http://localhost:9200/schools/school/4

响应

  1. {
  2. "found":true, "_index":"schools", "_type":"school", "_id":"4", "_version":2,
  3. "_shards":{"total":2, "successful":1, "failed":0}
  4. }
  • 可以指定文档的版本以删除指定的版本。
  • 可以指定路由参数以删除指定用户的文档,如果文档不属于该特定用户,则操作将失败。
  • 在此操作中,可以像GET API那样指定刷新(refresh)和超时(timeout)选项。

更新API

脚本用于执行此操作,版本控制用于确保在获取和重建索引期间没有发生更新。 例如,使用下面脚本更新学校的费用 -
POST http://localhost:9200/schools_gov/school/1/_update

请求正文

  1. {
  2. "script":{
  3. "inline": "ctx._source.fees+ = inc", "params":{
  4. "inc": 500
  5. }
  6. }
  7. }

响应结果

  1. {
  2. "_index":"schools_gov", "_type":"school", "_id":"1", "_version":2,
  3. "_shards":{"total":2, "successful":1, "failed":0}
  4. }

注意:如果获取脚本异常,建议在elastcisearch.yml中添加以下行

  1. script.inline: on
  2. script.indexed: on

可以通过向更新的文档发送获取请求来检查更新。
GET http://localhost:9200/schools_gov/school/1

多获取API

它具有相同的功能,如GET API,但此get请求可以返回多个文档。使用doc数组来指定需要提取的所有文档的索引,类型和ID。
POST http://localhost:9200/_mget

请求正文

  1. {
  2. "docs":[
  3. {
  4. "_index": "schools", "_type": "school", "_id": "1"
  5. },
  6. {
  7. "_index":"schools_gev", "_type":"school", "_id": "2"
  8. }
  9. ]
  10. }

响应结果

  1. {
  2. "docs":[
  3. {
  4. "_index":"schools", "_type":"school", "_id":"1",
  5. "_version":1, "found":true, "_source":{
  6. "name":"Central School", "description":"CBSE Afiliation",
  7. "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
  8. "location":[31.8955385,76.8380405], "fees":2000,
  9. "tags":["Senior Secondary", "beatiful campus"], "rating":"3.5"
  10. }
  11. },
  12. {
  13. "_index":"schools_gev", "_type":"school", "_id":"2", "error":{
  14. "root_cause":[{
  15. "type":"index_not_found_exception", "reason":"no such index",
  16. "index":"schools_gev"
  17. }],
  18. "type":"index_not_found_exception", "reason":"no such index",
  19. "index":"schools_gev"
  20. }
  21. }
  22. ]
  23. }

批量API

此API用于通过在单个请求中进行多个索引/删除操作来批量上传或删除JSON对象。 需要添加“_bulk”关键字来调用此API。此API的示例已在Elasticsearch填充这篇文章中执行。所有其他功能与GET API相同。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文