程序员小强总结的 ElasticSearch专题超全总结篇在这里:传送门 结合官网资料,做了更详细的实际使用总结。
从单机版安装到集群高可用生产环境搭建、基本概念(索引,分片,节点,倒排索引…)、DSL语法实践、分词器(内置+中文)、SpringBoot整合实战、仿京东商品搜索实战实现。

1.新增文档

语法:公式

POST /索引库名/_doc(/手动添加的id)
{
    "key":"value"
}

这里是有 post或者put都可以
区别在于

  • put文档必须要指定文档_id;post可指定,可不指定,不指定则会随机生成一个_id

关于映射Mapping

  • 若没有提前设定索引中字段类型而直接添加文档,es会对字段数据给自动数据类型,新字段会永久补充到mapping。
  • 若添加的数据字段数量大于提前设定索引中字段数量,可成功,按情况1处理。
  • 若添加的数据字段数量小于提前设定索引中字段数量,可成功。

1.1指定文档ID

指定文档ID插入:手动指定ID
示例1: POST指定ID

POST /my_index1/_doc/1001
{
  "name":"李四",
  "age":23,
  "phone":"13233333332"
}

示例2: PUT指定ID(注:put必须指定ID)

PUT /my_index1/_doc/1002
{
  "name":"王五",
  "age":23,
  "phone":"13233333333"
}

1.2自动产生文档ID

自动产生文档ID插入:不是MySQL那样的AutoIncrement,而是类似MongoDB那样的自动生成ID

POST /my_index1/_doc/
{
  "name":"张三",
  "age":22,
  "phone":"13233333331"
}

2.查询文档

查询某索引下的文档

2.1查询所有文档

GET  /my_index1/_search

2.2根据ID查询指定文档

GET  /index_name/_doc/1

es8 中文文档_数据

3.修改文档

3.1更新全部

注:全修改,请求方式PUT和POST都可以,全部字段均会被修改更新,可以新增字段,当ID未匹配上时,执行新增。

POST /my_index1/_doc/1002
{
  "name":"王五",
  "age":23,
  "phone":"13233333333",
  "desc":"我是新增的描述"
}

3.2部分更新

注:部分修改,请求方式 POST,只修改部分字段数据,当ID未匹配上时,执行新增。

  • 需要doc包裹
  • 不支持-不存在则创建
  • 不支持PUT请求方式
POST /my_index1/_update/10021/
{
  "doc": {
    "name": "王五",
    "age": 23,
    "phone": "13233333333",
    "desc": "我是新增的描述3"
  }
}

3.3并发更新

Es使用版本version来管理文档,在更新的时候可以加上版本来控制并发。

官方文档

es8 中文文档_数据_02

参数说明

  • _seq_no,严格递增的顺序号,每个文档一个,Shard级别严格递增,保证后写入的Doc的_seq_no大于先写入的Doc的_seq_no。
  • primary_term_seq_no一样是一个整数,每当Primary Shard发生重新分配时,比如重启,Primary选举等,_primary_term会递增1
#先查询一下
GET /my_index1/_doc/1001

#带着查询中返回的 seq_no 和primary_term 参数更新
POST /my_index1/_doc/1001?if_seq_no=11&if_primary_term=1
{
  "doc":{
   "amount":333
  }
}

es8 中文文档_dsl_03

4.删除文档

根据id删除指定文档

DELETE /my_index1/_doc/10021

5.批量操作

批量操作是指,一批命令同时执行(减少IO),这些命令不一定是同种类型。

5.1批量查找

5.1.1多ID查询
GET /my_index3/_search
{
  "query": {
    "ids": {
      "values":[ 1001, 1002, 1003 ]
    }
  }
}
5.1.2mget单索引
# 批量查询my_index3索引数据
POST /my_index3/_mget
{
  "ids": [
    "1001",
    "1002",
    "1003"
  ]
}

es8 中文文档_elasticsearch_04

5.1.3mget跨索引
# 同时查询my_index1与my_index3两个所以下的数据
GET /_mget
{
  "docs": [
    {
      "_index": "my_index1",
      "_id": "1001"
    },
    {
      "_index": "my_index3",
      "_id": "1002"
    }
  ]
}

5.2批量新增

POST _bulk
{ "create" : { "_index" : "my_index3", "_id" : "1001" } }
{"name":"张三","age":20,"phone":"13233333331","desc":"我是张三的描述"}
{ "create" : { "_index" : "my_index3", "_id" : "1002" } }
{"name":"李四","age":21,"phone":"13233333332","desc":"我是李四的描述"}

注:

  • 命令是只有文档不存在-才会插入。
  • index 会判断若存在就更新,不存在就新增;

5.3批量更新

POST _bulk
{"update":{"_index":"my_index3","_id":"1001"}}
{"doc":{"age":20,"desc":"我是张三修改的描述"}}
{"update":{"_index":"my_index3","_id":"1002"}}
{"doc":{"age":20,"desc":"我是李四修改的描述"}}

注:

  • 命令下一行需要紧跟着data数据

5.4批量增删改同时操作

使用_bulk命令可以进行文档的批量增删改

POST _bulk
{ "create" : { "_index" : "my_index3", "_id" : "1003" } }
{"name":"王五","age":21,"phone":"13233333333","desc":"我是王五的描述"}
{ "update" : { "_index" : "my_index3", "_id" : "1001" } }
{ "doc" : {"age" : 19,"desc":"我是张三第二次修改的描述"} }
{ "delete" : { "_index" : "my_index3", "_id" : "1002" } }

以上命令

  • 新增ID为1003的文档
  • 更新ID为1001的文档
  • 删除ID为1002的文档

5.5批量删除

POST _bulk
{ "delete" : { "_index" : "my_index3", "_id" : "1001" } }
{ "delete" : { "_index" : "my_index3", "_id" : "1003" } }