metadata 文档元数据
_index 保存文档的索引名。index只是一个逻辑概念,其实际是由主分片和副本分片组成
_type 文档所归属的类型。在index这个级别上,数据分类可能还太分散,此时需要_type进行细分。比如商品目录,需要将商品细分为电子、电脑、厨房等
_id 文档编号,可指定或ES生成
索引一个文档
PUT /{index}/{type}/{id} { "field": "value", ... }
或者可不提供{id},ES将自动生成一个
获得一个文档
GET /website/blog/123?pretty
GET /website/blog/123?_source=title,text
指定返回的源数据字段名GET /website/blog/123/_source
将只返回源数据的相关信息检查一个文档是否存在
curl -i -XHEAD http://localhost:9200/website/blog/123
。加上-i表示显示头信息、-XHEAD表示ES服务端只需返回HEAD的信息即可。当HEAD中返回200的status表示数据存在,404表示数据不存在替换文档
同“索引一个文档”一致,当已经存在相同id时,ES将直接替换原有的文档,在返回参数中有个created参数等于false
新增一个文档
PUT /website/blog/123?op_type=create
PUT /website/blog/123/_create
以上两种方式都可以。当不存在指定ID的文档时,其响应的HEAD中status=201、BODY中的created=true。而当已经存在对应文档时,HEAD和BODY中均有status=409表示冲突
删除一个文档
DELETE /website/blog/123
当删除成时,found等于true,否则为false部分更新
POST /website/blog/1/_update { "doc" : { "tags" : [ "testing" ], "views": 0 }}
POST /website/blog/1/_update { "script" : "ctx._source.views+=1"}
POST /website/blog/1/_update { "script" : "ctx._source.tags+=new_tag", "params" : { "new_tag" : "search" }}
POST /website/blog/1/_update { "script" : "ctx.op = ctx._source.views == count ? 'delete' : 'none'", "params" : { "count": 1 }}
POST /website/pageviews/1/_update { "script" : "ctx._source.views+=1", "upsert": { "views": 1 }}
POST /website/pageviews/1/_update?retry_on_conflict=5 { "script" : "ctx._source.views+=1", "upsert": { "views": 0 }}
批量获取文档
GET /_mget { "docs" : [ { "_index" : "website", "_type" : "blog", "_id" : 2 }, { "_index" : "website", "_type" : "pageviews", "_id" : 1, "_source": "views" } ]}
GET /website/blog/_mget { "docs" : [ { "_id" : 2 }, { "_type" : "pageviews", "_id" : 1 } ]}
GET /website/blog/_mget { "ids" : [ "2", "1" ]}
批量操作文档 bulk
bulk格式
{ action: { metadata }}\n { request body }\n { action: { metadata }}\n { request body }\n ...
注意最后一行也需要\n action有以下类型:create、index、update、delete(不需要request body行)
metadata有:_index、_type、_id
POST /_bulk { "delete": { "_index": "website", "_type": "blog", "_id": "123" }} { "create": { "_index": "website", "_type": "blog", "_id": "123" }} { "title": "My first blog post" } { "index": { "_index": "website", "_type": "blog" }} { "title": "My second blog post" } { "update": { "_index": "website", "_type": "blog", "_id": "123", "_retry_on_conflict" : 3} } { "doc" : {"title" : "My updated blog post"} } POST /website/log/_bulk { "index": {}} { "event": "User logged in" } { "index": { "_type": "blog" }} { "title": "Overriding the default type" }