【原创】elasticsearch(二)基本增删改查 -- 转载请注明出处

一、基本说明

在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
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章