一、基本说明
在ES中,文档归属于一种类型(type),而这些类型存在于索引(index)中。文档,索引,与ES文档库的关系可以如下图所示:
每一条ES中的数据,都是一条json格式的字符串,这些数据不仅包含我们所添加的数据,还包含有一个三个元数据 _index(索引),_type(对象的类),_id(唯一标识主键)。
我们在创建ES的数据时,可以不去单独进行索引与文档类型的创建操作。只需要在进行添加数据时,说明要存储的索引与文档名称即可,可参见第二部分中的数据新增。
二、数据新增与修改
数据进行新增时,可以使用下方的请求来进行数据新增:
请求方式:PUT
URL:http://192.168.1.199:9200/megacorp/employee/1
Header:Content-Type:application/json
Body:
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 30,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ],
"birthday": "1989-02-02"
}
说明:
URL:megacorp/employee/1 分别为 {索引}/{文档类型}/{id}
Body:具体的数据内容,json格式的字符串信息。
我们可以任意的定义索引与文档类型以及id,如果索引与文档类型不存在,ES则会创建出相应的索引与文档类型,新增到库中。数据的id,是数据的唯一主键,id+索引+文档类型是全局唯一的。在新增数据时,不可以使其重复,如果出现重复则会将原本的旧数据覆盖。
如果在新增时,不希望设置主键,可以将请求方式修改为POST请求,并去掉末尾的Id,在新增数据时,ES就会自己生成一个字符串唯一Id。请求方式如下:
请求方式:POST
URL:http://192.168.1.199:9200/megacorp/employee
Header:Content-Type:application/json
Body:
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 30,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ],
"birthday": "1989-02-02"
}
查询得出的结果中,Id如下:
7KtG5mgBlW1hvtUzqtXv
三、简单数据查询
首先,我们在我们的库中添加两条新的数据,Pony Ma和Jack Ma请求如下方所示:
请求方式:PUT
URL:http://192.168.1.199:9200/megacorp/employee/2
Header:Content-Type:application/json
Body:
{
"first_name": "Jack",
"last_name": "Ma",
"age": 30,
"about": "I regret having founded alibaba",
"interests": [
"speech"
],
"birthday": "1989-01-01"
}
请求方式:PUT
URL:http://192.168.1.199:9200/megacorp/employee/3
Header:Content-Type:application/json
Body:
{
"first_name" : "Pony",
"last_name" : "Ma",
"age" : 29,
"about" : "Making money makes you happy",
"interests": [ "A low profile" ],
"birthday" : "1990-01-01"
}
在我们将数据新增到了ES中以后,就可以使用GET请求进行单条数据的查询了。
请求方式:GET
URL:http://192.168.1.199:9200/megacorp/employee/1
说明:megacorp/employee/1 分别为 {索引}/{文档类型}/{id}
下方为响应Body:
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_version": 5,
"found": true,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 30,
"about": "I love to go rock climbing",
"interests": [
"sports",
"music"
]
}
}
在上方的响应中,_source内的内容即为查询结果,最初添加到ES中的id为1的json串数据。如果使用下方URL进行请求,则可以获取到最早的十条数据,这里是用_search替代了原本位置的id。
URL:http://192.168.1.199:9200/megacorp/employee/_search
如果我们需要查询一些特殊的数据时,例如last_name包含有Ma的用户,则可以使用下方的URL进行查询。
URL:http://192.168.1.199:9200/megacorp/employee/_search?q=last_name:Ma
如果我们需要的只是部分数据,则可以用以下方式进行请求
URL:http://192.168.1.199:9200/megacorp/employee/_search?_source=age,about
如果只需要_source中的数据不需要其他元数据,可以用下方的方式进行请求
URL:http://192.168.1.199:9200/megacorp/employee/_search?_source
四、数据删除
删除数据时,使用DELETE请求进行访问即可。
请求方式:DELETE
URL:http://192.168.1.199:9200/megacorp/employee/1
如果文档被找到,Elasticsearch将返回200 OK
状态码和以下响应体。
{
"found" : true,
"_index" : "website",
"_type" : "blog",
"_id" : "123",
"_version" : 3
}
如果文档未找到,我们将得到一个404 Not Found
状态码,响应体是这样的:
{
"found" : false,
"_index" : "website",
"_type" : "blog",
"_id" : "123",
"_version" : 4
}