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_type
是create
,注意,请求方式是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",