创建

image.png

  1. PUT /website/_doc/1/_create
  2. {
  3. "title": "My first blog entry",
  4. "text": "Just trying this out..."
  5. }

ID你可以不设置,不设置他会帮你设置一个的

  1. POST /library/books/
  2. {
  3. "title": "Elasticsearch : the definitive guide",
  4. "name": {
  5. "first": "Vineeth",
  6. "last": "Mohan"
  7. },
  8. "publish_date": "2015-02-06",
  9. "price":"35.99"
  10. }

返回结果中有个_id的,那就是es帮你设置的

  1. POST /lagou-company-index/_doc/1
  2. {
  3. "name": "百度",
  4. "job": "小度用户运营经理",
  5. "payment": "30000",
  6. "logo": "http://www.lgstatic.com/thubnail_120x120/i/image/M00/21/3E/CgpFT1kVdzeAJNbUAABJB7x9sm8374.png"
  7. }

强制创建

如果id 存在就会报错

PUT /index/_doc/{id}?op_type=create {}

PUT /index/_doc/{id}/_create {}

创建的时候指定路由

自行指定routing的值, 相同的国家商品都到一个shard上

POST /abc/_doc/1?routing=bigdata
{
  "name": "es",
   "title": "let is rock"
}

查询

GET /library/books/1

GET /library/books/2

可以通过source获取指定的字段

GET /library/books/1?_source=title,price
GET /lagou-company-index/_doc/1

查看所有文档

POST /索引名称/_search
{
    "query": {
        "match_all": {}
    }
}

_source定制返回结果

不需要搜索引擎返回source中的所有字段,可以使用source进行定制,如下, 个字段之间使用逗号分隔

GET /lagou-company-index/_doc/1?_source=name,job

更新

全量更新

把刚才新增的请求方式改为PUT,就是修改了,不过修改必须指定id

  • id对应文档存在,则修改
  • id对应文档不存在,则新增
    POST /索引名称/_doc 
    { 
      "field":"value" 
    }
    
    我们更新同一个id下的文档,可以通过覆盖更新
    PUT /library/books/1
    {
      "title": "Elasticsearch : the definitive guide",
      "name": {
          "first": "Vineeth",
          "last": "Mohan"
      },
      "publish_date": "2015-02-06",
      "price":"25.99"
    }
    
    查询下
    GET /library/books/1
    

局部更新

或者通过_update这个api方式单独更新你想更新的字段

POST /library/books/1/_update
{
  "doc": {
    "price": 10
  }
}

POST /library/books/1/_update
{
  "doc": {
    "title": "fly"
  }
}

image.png

注意

Elasticsearch执行更新操作的时候,Elasticsearch首先将旧的文档标记为删除状态,然后添加新 的文档,旧的文档不会立即消失,但是你也无法访问,Elasticsearch会在你继续添加更多数据的时候在 后台清理已经标记为删除状态的文档。
全部更新,是直接把之前的老数据,标记为删除状态,然后,再添加一条更新的(使用PUT或者 POST) 局域更新,只是修改某个字段(使用POST)
局域更新,只是修改某个字段(使用POST)

POST /索引名/_update/{id} 
{
    "doc":{
        "field":"value"
    }
}

image.png

删除

DELETE /索引名/_doc/{id}

然后我们GET下,看下结果
发现found是false

{
  "_index" : "lagou-company-index",
  "_type" : "_doc",
  "_id" : "3",
  "found" : false
}

也可以删除type

DELETE /library/books

也可以删除索引

DELETE /library

删除所有文档

POST 索引名/_delete_by_query 
{
    "query": {
        "match_all": {}
    }
}

按照条件删除

POST /main_escape_fish/_delete_by_query
{
  "query": { 
    "match": {
      "idTenant": "105"
    }
  }
}

文档元数据解读

元数据项 含义
_index document所属index
_type document所属type,Elasticsearch7.x默认type为_doc
_id 代表document的唯一标识,与index和type一起,可以唯一标识和定位一个document
_version document的版本号,Elasticsearch利用_version(版本号)的方式来确保应用中相互冲突的变更不会导致数据丢失。需要修改数据时,需要指定想要修改文档的version号,如果该版本不是当前版本号,请求将会失败
_seq_no 严格递增的顺序号,每个文档一个,Shard级别严格递增,保证后写入的Doc
seq_no大于先写入的Doc的seq_no
_primary_term 任何类型的写操作,包括index、create、update和Delete,都会生成一个_seq_no。
found true/false,是否查找到文档
_source 存储原始文档