Elasticsearch系列-文档基本操作

Elasticsearch系列-文档基本操作

  • 简单的文档操作
    • Index(创建文档)
    • Get(获取文档)
    • Delete(删除文档)
    • Update(更新文档)
  • 复杂的文档操作
    • mget(批量获取)
    • Bulk(批量操作)
  • 结语

简单的文档操作

Index(创建文档)

//通过_doc创建一个文档 通过_id传递id参数,不传id会默认生产,如果文档已存在,会先进行删除在创建,版本会增加。
PUT /<target>/_doc/<_id> 
POST /<target>/_doc/

//通过_create创建一个文档,_id参数必传。如果文档已存在会报错
PUT /<target>/_create/<_id>
POST /<target>/_create/<_id>

示例:
//创建id为1 的文档
POST layne-index-002/_doc/1
{
     
  "name":"layne",
  "age":"27"
}

//创建id为3的文档
PUT layne-index-002/_create/3
{
     
  "name":"layne",
  "age":"27"
}

我们可以通过_doc和_create两种API方式来创建文档,主要区别在于_doc可以不需要强制指定_id参数,_create必须指定_id参数;_doc在创建文档的时候,如果文档已存在,会先进行删除再创建。而_create则会直接报错,提示创建失败。

Get(获取文档)

//通过id获取文档信息
GET <index>/_doc/<_id>
//通过id检测文档是否存在
HEAD <index>/_doc/<_id>
//通过id获取原数据信息
GET <index>/_source/<_id>
//通过id检测原数据信息是否存在
HEAD <index>/_source/<_id>

Delete(删除文档)

//根据id删除文档信息
DELETE /<index>/_doc/<_id>
//根据条件进行删除
POST /<index>/_delete_by_query

示例:
//删除id为2的文档
DELETE layne-index-002/_doc/2

//删除名称为layne的文档信息
POST layne-index-002/_delete_by_query
{
     
  "query":{
     
    "term":{
     
      "name":"layne"
    }
  }
}

Update(更新文档)

//通过id修改文档信息 id文档信息必须存在,否则会失败
POST /<index>/_update/<_id>
//根据条件修改文档信息
POST /<index>/_update_by_query

示例
//根据id为4修改文档信息,如果文档中字段存在就更新,不存在则新增,如果数据信息和存储的信息一致,返回结果result字段会是“noop”。
POST layne-index-002/_update/4
{
     
  "doc": {
     
    "name":"Nacy",
    "age":"18",
    "gender":"F"
  }
}

//根据条件修改
POST layne-index-002/_update_by_query
{
     
  "script": {
     
    "source": "ctx._source['name'] = 'Layne'",
    "lang": "painless"
  }
  , "query": {
     
    "term": {
     
      "name": "nacy"
    }
  }
}

复杂的文档操作

mget(批量获取)

//批量获取 通过docs指定index 和id
GET /_mget
//指定index批量获取
GET /<index>/_mget

示例:
//分别获取layne-index-001,layne-index-002索引id为1的文档信息
GET /_mget
{
     
  "docs":[
    {
     
      "_index":"layne-index-001",
      "_id":"1"
    },
    {
     
      "_index":"layne-index-002",
      "_id":"1"
    }
    ]
}
//分别获取layne-index-001,layne-index-002索引id为1的文档信息
GET /layne-index-002/_mget
{
     
  "docs":[
    {
     
      "_index":"layne-index-001",
      "_id":"1"
    },
    {
     
      "_index":"layne-index-002",
      "_id":"1"
    }
    ]
}
//获取layne-index-002索引id为1和2的文档信息
GET /layne-index-002/_mget
{
     
  "docs":[
    {
     
      "_id":"1"
    },
    {
     
      "_id":"2"
    }
    ]
}
//获取layne-index-002索引id为1和2的文档信息
GET /layne-index-002/_mget
{
     
  "ids":["1","2"]
}

Bulk(批量操作)

ES提供了一种批量操作方式,在一次请求中去执行多个操作操作,如index,create,delete,update。通过在请求体中定义一个JSON,通过换行来进行分隔。

action_and_meta_data\n
optional_source\n
action_and_meta_data\n
optional_source\n
....
action_and_meta_data\n
optional_source\n
POST /_bulk

POST /<target>/_bulk

示例:
//批量操作
POST _bulk
{
     "index":{
     "_index":"layne-index-003","_id":"1"}}
{
     "name":"Layne","age":27,"gender":"M"} //执行index create 直接通过json数据体传参
{
     "delete":{
     "_index":"layne-index-003","_id":"2"}}
{
     "create":{
     "_index":"layne-index-003","_id":3}}
{
     "name":"Nancy","age":28,"gender":"F"}
{
     "update":{
     "_index":"layne-index-003","_id":1}}
{
     "doc":{
     "favorite":"ball"}} //执行update操作时 通过doc传参数

结语

其实ES官网文档中,提供了很多API的样例,更多内容可以参考ES文档操作API。

你可能感兴趣的:(elasticsearch)