更多查询可以参考
Elasticsearch笔记(8) term terms exists 查询案例
Elasticsearch笔记(10) ES term terms prefix 搜索 聚合查询 详细总结
Elasticsearch笔记(11) elasticsearch 桶聚合 Query DSL

1. index

1.1 查询所有index

GET /_cat/indices?v

1.2 新增index

#新增一个名为pigg的index
PUT /pigg

1.3 删除index

#删除pigg这个index,产线千万别这么做,删了就完了
DELETE /pigg

2. document

2.1 新增document

2.1.1 新增时指定ID

#指定了文档ID=1
PUT /pigg/_doc/1
{"name": "王冬冬","ename": "winter","age": 32,"about": "I am a good coder","interest": ["eat", "coding"],"interest_count": 2
}#指定了文档ID=2
PUT /pigg/_doc/2
{"name": "朱大旬","ename": "vissy","age": 29,"about": "I am a tester","interest": ["eat", "testing"],"interest_count": 2,"job": null
}#指定了文档ID=3
PUT /pigg/_doc/3
{"name": "王佳冬","ename": "micoo","age": 3,"about": "I am a baby","interest": ["eat", "play", "sleep"],"interest_count": 3,"job": []
}

2.1.2 由ES自动生成ID

用post新增文档,ES自动为文档生成20位的ID

POST /pigg/_doc
{"name": "小波波","age": 2,"about": "I am a cat","interest": ["eat"],"interest_count": 1,"job": [null, "get mouse"]
}

返回结果如下:

{"_index" : "pigg","_type" : "_doc","_id" : "PYiliXABQi7JywF4bswF",//这个就是es自动生成的ID"_version" : 1,"result" : "created","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 2,"_primary_term" : 1
}

2.1.3 指定操作类型参数:op_type

新增文档时,可以同时指定op_type,当es里已经存在相同ID的文档时,就会新增失败。

#==指定操作类型op_type=create
PUT /pigg/_doc/3?op_type=create
{"name": "王佳彤","first_name": "jia tong","last_name": "wang","age": 3,"about": "I am a baby","interest": ["eat", "play", "sleep"],"interest_count": 3,"job": []
}

上面等同于:

#指定是create文档
PUT /pigg/_doc/3/_create
{"name": "王佳彤","first_name": "jia tong","last_name": "wang","age": 3,"about": "I am a baby","interest": ["eat", "play", "sleep"],"interest_count": 3,"job": []
}

返回异常信息提示:

 "reason": "[_doc][3]: version conflict, document already exists (current version [1])"

2.1.4 指定文档版本号version

每个文档都有一个版本号version,新增后version=1,以后每次修改,version自动加1,也可以指定version,比如让它从1一下子变成10这样。

#先新增一个ID=100的文档
PUT /pigg/_doc/100
{"name": "三爷"
}#返回结果如下,注意这个版本号_version=1
{"_index" : "pigg","_type" : "_doc","_id" : "100","_version" : 1,//注意这个版本号"result" : "created","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 1,"_primary_term" : 1
}

但我们要修改文档前,我们已经知道当前version=1,如果文档被别人修改过,那version肯定大于1。
当我们要修改时,带上version参数(值是我们认定的更新前,当前文档的version值),如果我们指定的与ES里文档相等,则能成功,否则报异常。

#指定跟新前文档现有version=1
PUT /pigg/_doc/100?version=1
{"name": "三爷2"
}#因为中间没有别人操作过id=100的文档,所以修改成功,version变成2
{"_index" : "pigg","_type" : "_doc","_id" : "100","_version" : 2,"result" : "updated","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 2,"_primary_term" : 1
}

2.1.5 指定了version_type=external

#指定了version_type=external,必须version>当前的version
PUT /pigg/_doc/100?version=10&version_type=external
{"name": "三爷3"
}#返回结果如下,version变成指定的10
{"_index" : "pigg","_type" : "_doc","_id" : "100","_version" : 10,"result" : "updated","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 4,"_primary_term" : 1
}

2.2 查询document

更多查询可以参考ES Query DSL 词项查询

2.2.1 查询index的所有document

GET /pigg/_search

2.2.1 根据id查询document

GET /pigg/_doc/1?pretty

返回结果:

{"_index" : "pigg","_type" : "_doc","_id" : "1","_version" : 2,"_seq_no" : 1,"_primary_term" : 1,"found" : true,"_source" : {"name" : "王冬冬","ename" : "winter","age" : 32,"about" : "I am a good coder","interest" : ["eat","coding"],"interest_count" : 2}
}

2.2.2 用sort排序查询

#对age进行倒序查询
GET /pigg/_search
{"query": {"match_all": {}},"sort": [{"age": {"order": "desc"}}]
}

2.2.3 用from和size分页查询

#查询前2条数据, from是从0开始的
GET /pigg/_search
{"query": {"match_all": {}},"sort": [{"age": {"order": "desc"}}],"from": 0,"size": 2
}

2.2.4 根据ID判断是否存在

存在返回200,不存在返回404

HEAD /pigg/_doc/1

2.2.5 用_source参数过滤返回的字段

#不返回_source
GET /pigg/_doc/1?_source=false#只返回_source
GET /pigg/_doc/1/_source#只返回ID=1文档的name,age
GET /pigg/_doc/1?_source=name,age#只返回_source中某些字段
GET /pigg/_search
{"_source": ["name", "age"]
}#带上查询条件和_source过滤
GET /pigg/_search
{"query": {"bool": {"filter": {"term": {"age": 3}}}}, "_source": ["name", "age"]
}#只排除某些字段
GET /pigg/_doc/1?_source_exclude=about,interest#判断_source是否存在
HEAD pigg/_doc/1/_source

在ES7.X中,可以有如下写法

GET pigg/_source/1GET pigg/_source/1?_source=field_one

2.3 修改document

2.3.1 用put替换document

查询当前pigg表里id=1的文档

GET /pigg/_doc/1?pretty

返回如下:

{"_index": "pigg","_type": "_doc","_id": "1","_version": 4,"found": true,"_source": {"name": "三爷","age": 29,"hometown": "盐城","gender": "male"}
}

用put方式更新id=1的文档

PUT /pigg/_doc/1
{"name": "盐城三爷"
}

再次查询id=1的文档

{"_index": "pigg","_type": "_doc","_id": "1","_version": 5,"found": true,"_source": {"name": "盐城三爷"}
}

通过上面发现用put是替换了整个文档,而不是更新name这一个字段

2.3.2 用post更新document

先恢复id=1的文档为一开始的数据,然后执行如下语句
修改name,并新增interesting这个字段

POST /pigg/_doc/1/_update?pretty
{"doc":{"name": "盐城冬冬","interesting": "watching TV"}
}

再次查询id=1的文档

{"_index": "pigg","_type": "_doc","_id": "1","_version": 8,"found": true,"_source": {"name": "盐城冬冬","age": 29,"hometown": "盐城","gender": "male","interesting": "watching TV"}
}

这时发现用post更新的是文档的局部字段,原来有的字段更新,没有的字段则新增这个字段

2.3.3 用script更新document

查询当前id=1的人的age是29,现在要对age加1

POST /pigg/_doc/1/_update
{"script": "ctx._source.age += 1"
}

再次查询id=1的文档,发现age已经是30了

{"_index": "pigg","_type": "_doc","_id": "1","_version": 9,"found": true,"_source": {"name": "盐城冬冬","age": 30,"hometown": "盐城","gender": "male","interesting": "watching TV"}
}

2.3.4 用script更新document其他例子

#age-1
POST /pigg/_doc/1/_update
{"script": {"source": "ctx._source.age -= 1"}
}#age=30
POST /pigg/_doc/1/_update
{"script": {"source": "ctx._source.age = 30"}
}#name='witerking'
POST /pigg/_doc/1/_update
{"script": {"source": "ctx._source.name = 'witerking'"}
}#给数组添加一个值,就算存在也添加,语音用painless
POST /pigg/_doc/1/_update
{"script": {"source": "ctx._source.interest.add(params.interest)","lang": "painless","params": {"interest": "sleep"}}
}#给数组添加一个值,不存在才添加,语音用painless
POST /pigg/_doc/1/_update
{"script": {"source": "if(!ctx._source.interest.contains(params.interest)) {ctx._source.interest.add(params.interest)}","lang": "painless","params": {"interest": "sleeping"}}
}#给文档添加一个新字段new_name
POST /pigg/_doc/1/_update
{"script": {"source": "ctx._source.new_name = '傻瓜'","lang": "painless"}
}#字段直接复制
POST /pigg/_doc/1/_update
{"script": {"source": "ctx._source.new_name = ctx._source.name","lang": "painless"}
}#删除一个字段,不修改mapping
POST /pigg/_doc/1/_update
{"script": "ctx._source.remove('new_name')"
}

2.4 删除document

2.4.1 根据ID删除

DELETE /pigg/_doc/1

2.4.2 delete_by_query

#==delete_by_query==
POST /pig/_delete_by_query
{"query": {"term": {"_id": "5"}}
}#忽略版本冲突,继续执行删除操作
POST /pig/_delete_by_query?conflicts=proceed
{"query": {"term": {"_id": "5"}}
}

如果本文对您有帮助,就点个赞

Elasticsearch教程(1) Query DSL入门相关推荐

  1. Elasticsearch高级查询Query DSL

    一.高级查询Query DSL简介 1.Query DSL(简介 Elasticsearch中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specified La ...

  2. ElasticSearch高级 (Query DSL查询 bulk批量操作 导入数据 各种查询 实战技巧-优化比重 全量与增量数据同步)

    ElasticSearch高级 01-Query DSL(Domain Specific Language) 1 查询上下文 2 相关度评分:_score 3 元数据:_source 4 Query ...

  3. python 查询 elasticsearch 常用方法(Query DSL)

    2019独角兽企业重金招聘Python工程师标准>>> 1. 建立连接 from elasticsearch import Elasticsearch es = Elasticsea ...

  4. 15.Elasticsearch 7.15 Query DSL 之 Wildcard查询、Regexp查询

    Wildcard查询 介绍 返回包含与通配符模式匹配的文档. 例子 以下搜索返回 user.id 字段包含以 ki 开头并以 y 结尾的文档.这些匹配项可以包括 kiy.kity 或 kimchy G ...

  5. 13.Elasticsearch 7.15 Query DSL 之 term查询、terms查询和terms set查询

    文章目录 term 查询 介绍 term 的顶级参数 field的二级参数 terms查询 介绍 terms的顶级参数 terms set 查询 介绍 terms set的顶级参数 field的二级参 ...

  6. Elasticsearch之Query DSL语法入门

    1. query DSL入门 1.1 DSL query string 后边的参数原来越多,搜索条件越来越复杂,不能满足需求. GET /book/_search?q=name:java&si ...

  7. Elasticsearch教程(4) High Level REST Client API 查询 聚合 分组

    ES High Level REST Client API 查询 聚合 1 准备数据 1.1 插入测试数据 2 Maven引入ES 3 创建Client 4 查询API 4.1 根据id查询单条数据 ...

  8. Elasticsearch教程(28) text和keyword区别 term和match区别 ik中文分词器使用

    text和keyword区别 term和match区别 ik中文分词器使用 一.前言 二.之前相关的博客 三.造点测试数据 1. 创建一个index 2. 插入测试数据 四.做一份试卷 第1题:tit ...

  9. Elasticsearch学习1 入门进阶 Linux系统下操作安装Elasticsearch Kibana 初步检索 SearchAPI Query DSL ki分词库 自定义词库

    文章目录 一.全文检索-Elasticsearch 1.Elasticsearch简介 2.全文搜索引擎 二.docker安装 1.elasticsearch启动 2.kibana启动 三.[入门]初 ...

  10. Elasticsearch 教程--入门

    1.1 初识 Elasticsearch 是一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎,可以说 Lucene 是当今最先进,最高效的全功能开源搜索引擎框架. 但是 L ...

最新文章

  1. 重温强化学习之基于模型方法:动态规划
  2. 普通行列转换(交叉表,横表变列表)
  3. 关于Win7 内存变小处理方法
  4. underscorejs-groupBy学习
  5. java中Object.equals()简单用法
  6. 医疗设备-呼吸机-数据解析
  7. 【架构师培训课程-技术基础课】
  8. 《深度学习笔记》——在训练过程中出现nan的调试笔记
  9. 黑马2018年JavaEE课程大纲
  10. 一款基于SpringBoot + Spring Security的后台管理系统,强烈推荐,直接用
  11. 李沐亚马逊资深首席科学家 - 动手学深度学习v2 -2安装
  12. QVideoWidget遇到的坑。
  13. 【每日随笔】2021 年终总结 ( 学习和博客 | 技术学习方向 | 专业学习方向 | 写博客的技巧总结 | 工作成果 | 2022 年展望及职业规划 | 对 CSDN 的建议和期望 )
  14. 【LabVIEW】基于LabVIEW的俄罗斯方块小游戏
  15. var,let const,const 变量提升
  16. oracle获取今天是周几,根据DateTime来获取当天是周几(已完结)
  17. LaTeX行距以及字体大小
  18. ettercap的应用:DNS欺骗
  19. css3实现气泡效果的聊天框
  20. android9壁纸存放路径,Android基础入门教程——10.9 WallpaperManager(壁纸管理器)

热门文章

  1. 自然语言理解(摘自中南大学课件)
  2. ARM64 ubuntu20.04根文件系统制作
  3. 虚拟化软件 VMWare Workstation Player 介绍
  4. multisim扩大工作区_Multisim介绍:30分钟内学会捕捉、仿真和布局设计
  5. Java的高薪潮是否已经过去?
  6. 程序设计基础第四版任务4.1:清华附中有4位同学中的一位做了好事不留名,表扬信来了之后,校长问4位同学是谁做的好事。
  7. 博图SCL_字符串处理(将上位系统发送字符串解析为ASCLL码)
  8. git报错:The TLS connection was non-properly terminated.
  9. 2020牛客多校 Clam and Fish
  10. 懒羊羊求援【优先队列】