Elasticsearch文档的CRUD

基本Rest命令说明

method url地址 description
PUT 127.0.0.1:9200/索引名称/文档id 创建一个文档(指定文档id)
POST 127.0.0.1:9200/索引名称 创建要给文档(随机文档id)
POST 127.0.0.1:9200/索引名称/文档id/_update 修改一个文档
DELETE 127.0.0.1:9200/索引名称/文档id/ 删除一个文档
GET 127.0.0.1:9200/索引名称/文档id/ 通过文档id查询文档
POST 127.0.0.1:9200/索引名称/_search 查询所有数据

1、Create 一个文档

使用 HTPP PUT 请求

  • 支持自动生成文档 Id 和指定文档 Id 两种方式
  • 通过调用 “post /users/_doc”,系统会自动生成 document Id
  • 使用 HTTP PUT users/_create/1 创建时,URI 中显示指定 _create,此时如果该 Id 的文档已经存在,操作失败。

自己指定文档ID:PUT 索引名/_create/文档ID

系统自动生成文档ID:POST 索引名/_doc ,系统会自动生成文档ID

示例:

//create document 指定ID
PUT users/_doc/1
{
	"user":"Jack",
	"post_data":"2020-02-09T18:01",
	"message":"trying out Kibana"
}
//create document 自动生成ID
POST users/_doc 
{
	"user":"Mike",
	"post_data":"2020-02-09T18:07",
	"message":"trying out Kibana"
}

创建一个索引,并且指定字段类型以及分片数量

PUT twitter
{
  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 1
  }, 
  "mappings": {
    "properties": {
      "name":{
        "type": "text"
      },
      "desc":{
        "type": "keyword"
      }
    }
  }
}

创建了名为 twitter 的索引库,分别指定name和description字段的类型。设置了2个shards,并且有一个replica。
可以使用 GET twitter/_settings?pretty 命令查看索引信息。

text和keyword的区别

text 会被分词器解析。

keyword 不会被分词器解析。

2、Get 一个文档

使用 HTTP GET 请求

  • 找到文档 ,返回 HTTP 200
    • 文档元信息
      • _index / _doc /
      • 版本信息,同一个 Id 的文档,即使被删除, Version 号也会不断增加(每次改动都会加1)
      • _source 中默认包含了文档的所有原始信息
  • 找不到文档,返回 HTTP 404

根据文档id精确查询

  • GET person/_doc/1 : GET 索引名/_doc/文档ID

查询全部文档信息

  • GET person/_doc/_search : GET 索引名称/_doc/_search

根据文档字段值精确查询及模糊查询,可以根据默认的映射规则,产生基本的查询

  • GET person/_doc/_search?q=name:张三 :GET 索引名/_doc/_search?q=字段名:查询条件

3、Index 文档

使用 HTTP PUT 请求

​ Index 和 Create 不一样的地方:

​ 如果文档不存在,就索引新的文档。否则现有文档会被删除,新的文档会被索引。_version + 1。

PUT 索引名/_doc/文档ID

4、Update 文档

使用 HTTP POST 请求

  • Update 方法不会删除原来的文档,而是实现真正的数据更新
  • Post 方法 / Payload 需要包含在 “ doc ” 中
POST 索引名/_update/文档ID
{
	"doc":{   //在请求体中指定doc,再把相应文档提供在HTTP body中
		"albums":["Album1","Album2"]
	}
}

5、Delete 文档

​ 使用 HTTP DELETED 请求

DELETE 索引名/_doc/文档ID

Bulk API

  • 支持在一次 API 调用中,对不同的索引进行操作
  • 支持四种类型操作
    • Index
    • Create
    • Update
    • Delete
  • 可以在 URI 中指定 Index,也可以在请求的 Payload 中进行
  • 操作中 单条 操作失败,并不会影响其他操作
  • 返回结果中包括了每一条执行的结果

POST _bulk

示例:

POST _bluk
{ "index" : {"_index" : "test", "_id" : "1"} }
{ "field1" : "value1" }
{ "delete" : {"_index" : "test", "_id" :"2"} }
{ "create" : {"_index" : "test2", "_id" :"3"} }
{ "field1" : "value3"}
{ "update" : {"_id" : "1", "_index" :"test"} }
{ "doc" : { "field2" : "value2" } }

批量读取 — mget

​ 批量操作,可以减少网络连接中所产生的开销,提高性能。

​ 只需要提供一系列的文档ID,就可以查询出这些文档的信息。

GET /_mget

示例:

GET _mget
{
  "docs":[
      {
        "_index":"test",
        "_id":"1"
      },
      {
        "_index":"test",
        "_id":"2"
      }
    ]
}

批量查询 — msearch

POST users/_msearch

Elasticsearch 常见错误返回

问题 原因
无法连接 网络故障或集群挂了
连接无法关闭 网络故障或节点出错
429 集群过于繁忙
4xx 请求体格式错误
500 集群内部错误

原文地址:https://www.cnblogs.com/leizzige/p/12288251.html