Document API

本文详细介绍了Elasticsearch的多种API用法,包括Index API的自动创建索引和自动生成ID,Get API的字段过滤,Update API的脚本更新和noop更新,以及Bulk API和Reindex API的批量操作。此外,还讲解了并发控制和文档读写的基本模型,确保数据一致性。
摘要由CSDN通过智能技术生成

Index API

index api用来新增文档,支持如下几种方式:

# 指定id创建,如果id已存在,则会进行更新,`_version` + 1
PUT {
   index}/_doc/{
   id}

# 强制创建,如果id已经存在,409错误(以下二者等价)
PUT {
   index}/_doc/{
   id}?op_type=create
PUT {
   index}/_create/{
   id}

# POST创建,自动生成ID
POST {
   index}/_doc/

指定ID请求方式为PUT,自动生成ID的请求方式为POST

具体示例:

// 示例1 往"twitter"中插入文档,指定id是1
PUT twitter/_doc/1
{
    "user" : "Jack",
    "post_date" : "2019-05-15T14:12:12",
    "message" : "trying out Elasticsearch"
}

结果:

{
   
  "_index" : "twitter",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
   
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

_shards字段提供了索引操作的副本处理信息:

  • total 应执行的分片数
  • successful 成功执行的分片数
  • failed 失败数

只要successful的值至少为1,那么索引操作就是成功了。

id已经存在的情况下会执行更新操作:

PUT twitter/_doc/1
{
   
    "user" : "Jack2",
    "post_date" : "2019-05-15T14:12:12",
    "message" : "trying out Elasticsearch"
}
  "_index" : "twitter",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
   
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 2,
  "_primary_term" : 1
}

自动创建索引

通过索引插入文档时,如果索引(集)不存在,比如上述的twitter,将会自动创建索引。当然我们可以修改这个设定:

PUT _cluster/settings
{
  "persistent": {
    "action.auto_create_index": "false" // false 禁止 true 允许
  }
}

action.auto_create_index的值支持更为复杂的设定,比如:

"action.auto_create_index": "twitter, facebook,-tieba,+topic*"

+是允许,-是禁止,*是通配符。

以上配置的含义是,允许为twitter, facebook, 以及任何匹配topic*的自动创建索引,禁止为tieba创建索引。

操作类别

索引操作可以接收op_type参数,来强制进行create操作,允许如果确实就修改(put-if-absent)的行为。当指定create时,如果文档的id在索引集中已存在,那么索引操作失败。

示例:

PUT twitter/_doc/1?op_type=create
{
   
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}
{
   
  "error": {
   
   .......
  },
  "status": 409
}

op_type=create也可以使用如下方式,二者效果是一样的:

PUT twitter/_doc/1?op_type=create  <=>  PUT twitter/_create/1

自动生成ID

索引操作时如果不指定ID,将自动生成,并且会默认op_typecreate,注意,请求方式是POST

POST twitter/_doc/
{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}
{
   
  "_index" : "twitter",
  "_type" : "_doc",
  "_id" : "A6y0umsBAkV3IICsYCLL",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
   
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 1,
  "_primary_term" : 1
}

Get API

get api根据id,从索引(集)中获取JSON文档,支持如下几种方式

# 获取文档及元信息
GET {
   index}/_doc/{
   id}

# 仅获取文档字段,不包含元信息
GET {
   index}/_source/{
   id}

以上两种方式都支持字段过滤。

示例:

GET twitter/_doc/1
{
   
  "_index" : "twitter",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2,
  "_seq_no" : 2,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
   
    "user" : "Jack2",
    "post_date" : "2019-05-15T14:12:12",
    "message" : "trying out Elasticsearch"
  }
}

如果没找到,返回:

{
   
  "_index" : "twitter",
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值