表明document的惟一标识,与index和type一块儿,能够惟一标识和定位一个document数据库
咱们能够手动指定document的id(put /index/type/id),也能够不指定,由es自动为咱们建立一个idjson
手动指定document id安全
通常来讲,是从某些其余的系统中,导入一些数据到es时,会采起这种方式,就是使用系统中已有数据的惟一标识,做为es中document的id。举个例子,好比说,咱们如今在开发一个电商网站,作搜索功能,或者是OA系统,作员工检索功能。这个时候,数据首先会在网站系统或者IT系统内部的数据库中,会先有一份,此时就确定会有一个数据库的primary key(自增加,UUID,或者是业务编号)。若是将数据导入到es中,此时就比较适合采用数据在数据库中已有的primary key。分布式
自动生成id网站
数据产生出来之后,可能就没有id,直接就放es一个存储,那么这个时候,可能就不太适合说手动指定document id的形式了编码
自动生成的id,长度为20个字符,URL安全,base64编码,GUID,分布式系统并行生成时不可能会发生冲突spa
代码示例code
手动指定惟一标识cdn
PUT /test_index/test_type/1
{
"test_field": "create id by myself"
}
复制代码
自动生成idblog
POST /test_index/test_type
{
"test_field": "create id by es"
}
复制代码
_source元数据:就是说,咱们在建立一个document的时候,使用的那个放在request body中的json串,默认状况下,在get的时候,会原封不动的给咱们返回回来。
PUT /test_index/test_type/2
{
"name": "Tom",
"age": 12,
"gender": "M"
}
复制代码
执行GET请求,返回数据:
GET test_index/test_type/2
{
"_index": "test_index",
"_type": "test_type",
"_id": "2",
"_version": 1,
"found": true,
"_source": {
"name": "Tom",
"age": 12,
"gender": "M"
}
}
复制代码
定制返回结果
定制返回的结果,指定_source中,返回哪些field
GET /test_index/test_type/2?_source=name,age
{
"_index": "test_index",
"_type": "test_type",
"_id": "2",
"_version": 1,
"found": true,
"_source": {
"name": "Tom",
"age": 12
}
}
复制代码
若是须要新建文档,不想替换文档,就须要强制进行建立文档。
语法:
PUT /index/type/id?op_type=create
PUT /index/type/id/_create
复制代码
两种均可以,可是若是 document id 已经存在,则会报错
语法
DELETE /index/type/id
复制代码
不会当即物理删除,只会将其标记为deleted,当数据愈来愈多的时候,es会在适当的时机在后台自动删除标记为deleted的document