es基本用法-基础api

  • 索引index增删改查
  • 文档doc增删改查
      • 方式1:PUT
      • 方式2:POST
      • 方式1:_doc
      • 方式2:_update
  • 批量操作bulk
    • 同一索引
    • 不同索引
  • 官网数据导入

索引index增删改查

在es7以后,已经不存在type,所以直接创建索引即可。以es_index_test举例。演示用kibana,左侧为api,右侧为结果。

PUT  /es_index_test
{"mappings": {"properties": {"name": {"type": "text"},"age": {"type": "long"}}}
}

DELETE /es_index_test

mappings一旦创建,其字段类型就不能再被修改。对于需要修改字段的场景,一般都是新建新的mapping,把原有数据拷贝过来。
字段虽然不能再被修改,但可以新增新的字段。

GET  /es_index_test


基于第一篇讲过的es数据类型,这里贴上一份字段类型更为丰富的index,仅供参考。
这里面涉及到的类型有keyword、text、long、float、date、子对象。其中address字段有两种数据类型,orders包含子对象。

PUT  /es_index_complex
{"mappings": {"properties": {"name": {"type": "keyword"},"age": {"type": "long"},"content": {"type": "text"},"address": {"type": "text","fields": {"keyw": {"type": "keyword"}}},"createTime": {"type": "date","format": "yyyy-MM-dd HH:mm:ss"},"orders": {"properties": {"id": {"type": "keyword"},"money": {"type": "float"}}}}}
}

文档doc增删改查

文档doc的新增有put和post两种方式,它们各自又有_create和_doc两种方式,相当于有两大类,四小类的新增方式。不同方式使用方法,体现在要不要带上id以及数据状态。如下分别举例:

方式1:PUT

(1) _create、不带id。创建失败。

PUT  /es_index_test/_create
{"name": "zhangsan","age": 20
}


(2) _create、带id。创建成功,返回结果是create。

PUT  /es_index_test/_create/1
{"name": "zhangsan","age": 20
}


(3) _create、带相同id。创建失败。

(4) _doc、不带id。创建失败。

PUT  /es_index_test/_doc/
{"name": "lisi","age": 30
}


(5) _doc、带id。创建成功,返回结果是create。

PUT  /es_index_test/_doc/2
{"name": "lisi","age": 30
}


(6) _doc、带相同id。创建成功,返回结果是update。

总结
1.在put模式下,无论使用_create还是_doc,都必须带上id。否则创建失败。
2.使用_create方法时,如果id相同,创建失败。
3.使用_doc方法时,如果id相同,创建不会失败,此时是对数据做了update。
4.虽然上述创建过程很绕人和繁琐,但本质还是一样,即:不会存在两份数据拥有相同id。这就是mysql唯一索引概念。

方式2:POST

(1) _create、不带id。创建失败。

POST /es_index_test/_create
{"name": "zhangsan","age": 40
}

(2) _create、带id。创建成功,返回结果是create。

POST /es_index_test/_create/3
{"name": "zhangsan","age": 40
}

(3) _create、带相同id。创建失败。

(4) _doc、不带id。创建成功,返回结果是create,id自动生成。

POST /es_index_test/_doc/
{"name": "zhangsan","age": 40
}

(5) _doc、带id。创建成功,返回结果是create。

POST /es_index_test/_doc/4
{"name": "zhangsan","age": 40
}

(6) _doc、带相同id。创建成功,返回结果是update。

总结
1._create方式下,和put处理方式一模一样。id必须带上,且相同id添加会报错。
2._doc方式下,id可以带也可以不带。区别是,带id,以后提交都是更新。不带id,每次提交都是新增。
3.post和put创建文档的本质是一样的,即id的唯一性。可以存在两份同样数据,但不会存在id相同的两份数据。

补充:以上4种方式那种合适,看你喜欢。

DELETE /es_index_test/_doc/4

也有两种方法,_doc和_update。直接带上要修改的数据即可。

方式1:_doc

POST /es_index_test/_doc/3
{"name": "wangwu","age": 11
}

方式2:_update

POST /es_index_test/_update/3
{"doc": {"name":"lisi001"}
}

(1)查询单个文档

GET /es_index_test/_doc/2


(2)查看所有文档

GET /es_index_test/_search

批量操作bulk

在mysql中,批量操作通常指的是批量插入。而es的批量操作适用性更宽,可以对同一个索引进行批量插入、修改等,也可以对不同索引同时进行不同的批量操作。批量操作涉及的方法有:create、index、update、delete。相关说明如下:

方法 说明
create 如果文档不存在就创建,但如果文档存在就返回错误
index 如果文档不存在就创建,如果文档存在就更新
update 更新一个文档,如果文档不存在就返回错误
delete 删除一个文档,如果要删除的文档id不存在,就返回错误

另外,在批量操作过程中,某一个操作失败,是不会影响其他文档的操作的。而bulk对JSON串的有着严格的要求。每个JSON串不能换行,只能放在同一行。

同一索引

  1. 批量新增
POST /es_index_test/_bulk
{"index":{"_id":"10"}}
{"name":"lisi001","age":30}
{"index":{"_id":"11"}}
{"name":"lisi002","age":31}

  1. 批量修改、删除
POST /es_index_test/_bulk
{"update":{"_id":"10"}}
{"doc": {"name": "admin-02", "age":30}}
{"delete":{"_id":"11"}}

不同索引

POST /_bulk
{"index": {"_index": "es_index_test", "_id": "10"}}
{"name":"lisi002","age":30}
{"index": {"_index": "es_index_test_02", "_id": "123"}}
{"name":"lisi002","age":30}

官网数据导入

为了学习和测试es,官网提供了一批数据。现在我们将其导入,供后面查询使用。
数据地址:https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip
打开后,数据格式如下,我们可以看到这些数据就是批量导入使用的格式。

之后,我们将数据拷贝到kibana中,执行即可。这里我指定创建索引为bank。

插入完成后,我们来看下索引bank的信息

从这里我们可以看到,没有提前创建索引情况下,在插入数据时,es会自动帮我们创建好索引。在第一章中说过,文本是有text和keyword两种数据类型。这里也可以看出,默认情况下,es会为文本字段同时创建text和keyword两种类型。后续该字段就支持分词和不分词查询了。
另外,setting字段包含了索引的分片信息。我们创建索引时候,也可以自己指定。
最后,我们在查询下这次导入数据的总量。

数据总量显示1000,和原始数据总量一致。

Elasticsearch专栏-3.es基本用法-基础api相关推荐

  1. Elasticsearch专栏-7.es底层写入原理

    es底层写入原理 概念说明 es数据落盘过程 mysql数据落盘过程 redis数据落盘过程 概念说明 在第一章节中,已经提到过几个名词:lucence.segment.translog.refres ...

  2. doc es 中type_Elasticsearch基础——概念和基本API操作

    Elasticsearch 版本为 7.1.0 ,本文的讲解都是基于该版本 文章中Elasticsearch将使用简称ES代替 一.基本概念 文档--Document ES是面向文档的搜索,文档是ES ...

  3. 15分钟掌握Elasticsearch 8大核心概念与基础用法

    Elastic已经形成了一个较为庞大的生态,这个生态的核心就是Elasticsearch.初学者的重点就是如何快速地了解并使用Elasticsearch,本文总结了Elasticsearch的8大核心 ...

  4. Elasticsearch专栏-1.为什么引入es

    为什么引入es 现有系统架构 存在的问题 解决的方法 引入es原因 核心功能 特点 使用场景 es基本介绍 基础概念 对比mysql 常用数据类型 现有系统架构 存在的问题 现有系统采用redis+m ...

  5. ELK专栏之ES内部机制-03

    ELK专栏之ES内部机制-03 ES内部机制 ES分布式基础 ES对复杂分布式机制的透明隐藏特性 ES的垂直扩容和水平扩容 增加和减少节点,数据重新分配 master节点 节点对等的分布式架构 分片s ...

  6. ElasticSearch - SpringBoot集成ES

    文章目录 ElasticSearch - SpringBoot集成ES 1.整体设计思路(仿NBA中国官网) 2.项目搭建 3.ES API的基本使用 3.1 新增球员信息 3.2 查看球员信息 3. ...

  7. elasticsearch 6.x (五) 单一文档 API 介绍和使用 update和delete API

    大家好,我是烤鸭: 今天分享的是官网6.x    单一文档(Single document APIs)APIs. 本文这是部分翻译,如果想看全部的,还是建议阅读官方api.链接: https://ww ...

  8. NodeJS 基础 API

    在介绍 NodeJS 的基础 API 前,先抛出 API 中文文档地址:http://nodejs.cn/api/ path path 顾名思义就是与路径相关的一切,在 path 模块中提供了一些工具 ...

  9. 看完就会flink基础API

    文章目录 一.执行环境(Execution Environment) 1.创建执行环境 2.执行模式(Execution Mode) 3.触发程序执行 二.源算子(Source) 1.数据源类准备 2 ...

最新文章

  1. oracle numtodsinterval and numtoyminterval 使用法则
  2. 蓝桥杯-区间k大数查询(java)
  3. 微信小程序常见错误及基本排除方法
  4. 将Glassfish 3连接到外部ActiveMQ 5代理
  5. C++中相对路径与绝对路径以及斜杠与反斜杠的区别 及 处理代码
  6. RocketMQ如何动态扩容和缩容
  7. 谈谈c++纯虚函数的意义!
  8. POJ-2034 Anti-prime Sequences dfs
  9. C语言-基础例题55道
  10. 从虚拟偶像到“网红”VUP,变现狂欢下的浮士德交易
  11. 如何使用加密狗加密自己程序
  12. Linux服务器清理磁盘
  13. Mindjet MindManager 2018 版本下载
  14. android共享局域网打印,Android 浅谈同一局域网下使用WiFi连接打印机
  15. 对于计算机专业的个人理解
  16. 蓝牙功率放大器系统性能
  17. DNS劫持,HTTP劫持、HTTPS劫持【流量劫持】
  18. 【安装软件】 win10安装iTunes报错:“此Windows Installer软件包有一个问题。完成此安装需要......”的解决方式
  19. 这种MOS管的拆装方法,你知道嘛
  20. Flutter中那些你需要知道的文本知识!

热门文章

  1. iPhone,iPad在国外如何看国内视频网站
  2. pythonxy安装包_Python计算机视觉:安装
  3. BEOL贝尔科技参展2021电博会软博会
  4. 【Android进阶】4、用 ViewModel 和 onSaveInstanceState 实现旋转屏幕时 UI 状态的保存和恢复
  5. delphi 自定义popupmenu_Delphi PopupMenu菜单为ListView的每个Items使用[原创]
  6. html添加qq链接,怎么在自己的网站上添加QQ地址链接(一点就打开QQ聊天窗口)
  7. Java企业面试题及答案资料大全
  8. c语言 字符串切片重组成完整,完美分割字符串,实现字符串的splict功能
  9. VS2010 安装 Boost 库 1.54
  10. Map接口---Day20