一、文档的添加
POST http://127.0.0.1:9200/{index}/{type}/{id} { "key":"value", "key2":"value2", "key2":"value2", }
这是最基本的一个文档添加语句{index}表示添加的索引如果没有回自动建立(可以理解为数据库),{type}标示类型如果没有回自动建立(可以理解为表),{id}标示添加文档的id可以理解为数据库中的主键,添加的文档内容就是json 格式的数据,在添加前可以不定义每个字段的类型ES可以自动的根据类型定义字段的属性。
添加多个文档
POST http://127.0.0.1:9200/{index}/{type}/_bulk {"index":{"_id":"1"}} {"key1":"value1"} {"index":{"_id":"2"}} {"key1":"value2"}
_bulk 表示大量id在json里面定义
不同索引下的批量添加
POST http://127.0.0.1:9200/_bulk { "index": { "_index": "{index}", "_type": "{type}", "_id": "{id}" }} { "key1": "key2" } { "index": { "_index": "{index}", "_type": "{type}", "_id": "{id}" }} { "key1": "key2" } { "index": { "_index": "{index}", "_type": "{type}", "_id": "{id}" }} { "key1": "key2" }
在添加时index和type必须明确,但是可不指定id的值,如果不指定会自动生成的id有22字符串长度URL-safe, Base64-encoded string universally unique identifiers, 或者叫 UUID。
如果指定的id已经存在就会覆盖原来的json数据。
在添加时指定了id但是又想避免覆盖可以在url上添加_create或者?op_type=create参数 添加的id如果已经存在会返回409状态。
添加成功会返回
{ "_index": "{index}",//索引名 "_type": "{type}",//类型名 "_id": "{id}",//id "_version": 1,//数据版本号 改变一次默认会加1 "result": "created", // 结果添加 "_shards": { "total": 2,//在多少个分配中进行了操作 "successful": 1,//成功建立的索引分片数量至少时1 "failed": 0//建立索引失败的片数 }, "created": true //如果是添加为true 修改为false }
二、文档的修改
上面在添加文档的时候已经说了,在添加的时候如果自定了id如果id已经存在了就会覆盖原来的,这就是最基本的修改。
还有一种修改是通过脚本在原有的数据基础上进行修改。
POST /{index}/{type}/{id}/_update { "script" : "ctx._source.key += 5" }
ctx._source 表示当前文档。在当前文档的key属性的原有值上在加5。
可以增加新的属性。
每次修改成功会返回一个json格式和上面添加类似,同时_version默认加1
三、文档的删除
删除文档比较简单只要发出的请求是DELETE类型同时指定index,type,id 就可以了
例如:
DELETE /{index}/{type}/{id}/_update
成功返回:
{ "found" : true, "_index" : {index}, "_type" : {type}, "_id" : {id}, "_version" : 3 }
删除是_version也会加1。
如果文档本身不存在会得到一个 404 的状态。found值为false
在ES内部原来的文档不会被立马删除,只是被标记为被删除,但是已经不能访问了。在后面ES会自己删除。
四、文档的查看
1.直接通过id获取文档
GET /{index}/{type}/{id}?pretty
结果为:
{ "_index" : {index}, "_type" : {type}, "_id" : {id}, "_version" : 3, "found" : true, "_source":{ "key1":"value" } }
返回对应inden内type中id的数据pretty标示返回的数据以json格式化 换行输出,方便阅读。
_index 表示查询的索引,_type 标示查询的类型 ,_id 标示查询的id , found标示查询结果,_source 标示查询到的源数据
在查询过程中_type 是可选的 如果不全定可以使用_all。
在查询是可以设置是否返回_source字段,只需要在url后面添加_source=false就可以了,例如:
GET /{index}/{type}/{id}?_source=false&pretty
如果返回_source的字段中只需要返回一个或某几个字段可以在url后面添加_source_include或者_source_exclude来设置
例如:
GET /{index}/{type}/{id}?_source_include=key1,key3,keys11*&pretty
就像上面的连接一样多个可以用逗号隔开,也可以使用通配符*。
在查询时也可以设置值返回源数据,例如:
GET /{index}/{type}/{id}/_source?pretty
2.多文档查询
在一次中查询多个文档,可以分别指定index,type,id来进行多个文档的查询。查询的结果包含查询到的文档数组。
例如
POST /_mget?pretty { "docs":[ {"_index":"index1","_type":"index1","_id":"1"}, {"_index":"index2","_type":"index2","_id":"2"} ] }
返回的结果结构为:
{ "docs":[ { "_index" : {index}, "_type" : {type}, "_id" : {id}, "_version" : 3, "found" : true, "_source":{ "key1":"values1" } }, { "_index" : {index}, "_type" : {type}, "_id" : {id}, "_version" : 3, "found" : true, "_source":{ "key1":"values1" } } ] }
同一个索引或类型下多条件查询 同等于 or 查询
POST /{index}/{type}/_mget?pretty { "docs":[ {"_id":"1","_source":false}, {"_id":"2","_source":["key1","key2"]} ] }