小白学ES 06 - 通过Kibana学习ES的基础语法

目录

  • 1 document结构
  • 2 document的常见CRUD操作
    • 2.1 添加商品: 添加文档并建立索引
    • 2.2 查询商品: 检索文档
    • 2.3 修改商品: 替换文档
    • 2.4 修改商品: 更新文档
    • 2.5 删除商品: 删除文档

1 document结构

ES是一款面向文档的数据搜索、分析引擎.

document结构说明:

(1) 基于面向对象的开发思想, 应用系统中的数据结构都是很复杂的: 对象中嵌套对象, 如CRM系统中的客户对象中, 还会嵌入客户相关的企业对象.

(2) 对象数据存储到数据库中, 需要分解, 将嵌套对象分解为扁平的多张表数据, 每次操作时需要还原回对象格式, 过程繁琐.

(3) ES存储的是JSON格式的文档, 基于此, ES可以提供复杂的索引, 全文检索, 分析聚合等功能.

(4) document格式示例:

{
    "id": "5220",
    "name": "张三",
    "sex": "男",
    "age": 25,
    "phone": 13312345678,
    "email": "[email protected]",
    "company": {
        "name": "Alibaba",
        "location": "杭州"
    },
    "join_date": "2018/11/01"
}

2 document的常见CRUD操作

背景说明: 以电商系统的搜索子系统为例, 说明常用操作.

2.1 添加商品: 添加文档并建立索引

  • 添加API:

    PUT /index/type/id
    {
      "JSON格式的文档数据"
    }

说明: ES会自动创建PUT API中指定的index和type, 不需要提前创建;

而且ES默认对document的每个field都建立倒排索引, 保证它们都可以被检索.

  • 添加示例:

    PUT /shop/it_book/1
    {
        "name": "Java编程思想",
        "author": "[美] Bruce Eckel",
        "desc":  "Java学习必读经典,殿堂级著作!",
        "price":  109,
        "date": "2007-06",
        "publisher": "机械工业出版社",
        "tags": [ "Java", "编程语言" ]
    }
  • 响应信息:
    {
      "_index": "shop",
      "_type": "it_book",
      "_id": "1",
      "_version": 1,
      "result": "created",  # 操作结果: created(创建)了索引
      "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
      },
      "created": true  # 是否为创建操作
    }
  • 再添加如下数据:
    PUT /shop/it_book/2
    {
        "name": "深入理解Java虚拟机:JVM高级特性与最佳实践",
        "author": "周志明",
        "desc":  "Java图书领域公认的经典著作",
        "price":  79,
        "date": "2013-06",
        "publisher": "机械工业出版社",
        "tags": [ "Java", "虚拟机", "最佳实践" ]
    }
    
    PUT /shop/it_book/3
    {
        "name": "Java并发编程的艺术",
        "author": "方腾飞,魏鹏,程晓明",
        "desc":  "阿里系工程师的并发编程实践",
        "price":  59,
        "date": "2015-07",
        "publisher": "机械工业出版社",
        "tags": [ "Java", "并发编程" ]
    }

2.2 查询商品: 检索文档

  • 检索API:

    GET /index/type/id
  • 检索示例:
    GET /shop/it_book/2
  • 响应信息:
    {
      "_index": "shop",
      "_type": "it_book",
      "_id": "2",
      "_version": 1,
      "found": true,
      "_source": {
        "name": "深入理解Java虚拟机:JVM高级特性与最佳实践",
        "author": "周志明",
        "desc": "Java图书领域公认的经典著作",
        "price": 79,
        "date": "2013-06",
        "publisher": "机械工业出版社",
        "tags": [
          "Java",
          "虚拟机",
          "最佳实践"
        ]
      }
    }

2.3 修改商品: 替换文档

  • 替换API - 与添加API相同, 只不过文档id要存在, 此时系统将判定为修改操作:

    —— 无论文档数据是否存在修改, 对同一id的文档执行1次以上的PUT操作, 都是修改操作.

    PUT /index/type/id
    {
      "JSON格式的文档数据"
    }

注意: 替换方式的不便之处: 必须填写要修改文档的所有field, 如果缺少, 修改后的文档中将丢失相关field.

  • 替换示例 - 为name添加了"(第4版)"

    PUT /shop/it_book/1
    {
        "name": "Java编程思想(第4版)",
        "author": "[美] Bruce Eckel",
        "desc":  "Java学习必读经典,殿堂级著作!",
        "price":  109,
        "date": "2007-06",
        "publisher": "机械工业出版社",
        "tags": [ "Java", "编程语言" ]
    }
  • 响应信息:
    {
      "_index": "shop",
      "_type": "it_book",
      "_id": "1",
      "_version": 2,
      "result": "updated",  // 操作结果: updated(修改)了索引
      "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
      },
      "created": false  // 是否为创建操作
    }

2.4 修改商品: 更新文档

  • 更新API:

    —— 指定更新文档的某些field, 其他的不予理会.

    POST /index/type/id/_update
    {
        "doc": {
            "field u want to update": "new value of ur update's field"
        }
    }

注意: 与替换方式相比, 更新方式的好处: 可以更新指定文档的指定field, 未指定的field也不会丢失.

  • 更新示例 - 将name改为英文:

    POST /shop/it_book/1/_update
    {
      "doc": {
        "name": "Thinking in Java(4th Edition) "
      }
    }
  • 响应信息:
    {
      "_index": "shop",
      "_type": "it_book",
      "_id": "1",
      "_version": 4,
      "result": "updated",  // 操作结果: updated(修改)了索引
      "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
      }
    }
  • 此时查看该文档 GET /shop/it_book/1 即可发现更新成功.

2.5 删除商品: 删除文档

  • 删除API:

    —— 指定更新文档的某些field, 其他的不予理会.

    DELETE /index/type/id
  • 删除示例:
    DELETE /shop/it_book/1
  • 响应信息:
    {
      "found": true,
      "_index": "shop",
      "_type": "it_book",
      "_id": "1",
      "_version": 5,
      "result": "deleted",  // 操作结果: deleted(删除)了索引
      "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
      }
    }
  • 再次查看删除的文档:
    GET /shop/it_book/1
  • 响应信息:
    {
      "_index": "shop",
      "_type": "it_book",
      "_id": "1",
      "found": false   // 没有查找到相关文档
    }

为了后期演示的方便, 再次将该文档添加至索引中:

PUT /shop/it_book/1
{
    "name": "Java编程思想",
    "author": "[美] Bruce Eckel",
    "desc":  "Java学习必读经典,殿堂级著作!",
    "price":  109,
    "date": "2007-06",
    "publisher": "机械工业出版社",
    "tags": [ "Java", "编程语言" ]
}

版权声明

作者: ma_shoufeng(马瘦风)

出处: 博客园 马瘦风的博客

您的支持是对博主的极大鼓励, 感谢您的阅读.

本文版权归博主所有, 欢迎转载, 但未经博主同意必须保留此段声明, 且在文章页面明显位置给出原文链接, 否则博主保留追究相关人员法律责任的权利.

原文地址:https://www.cnblogs.com/shoufeng/p/9941809.html

时间: 2024-09-29 01:46:40

小白学ES 06 - 通过Kibana学习ES的基础语法的相关文章

小白学 Python 爬虫(12):urllib 基础使用(二)

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装 小白学 Python 爬虫(7):HTTP 基础 小白学 Python 爬虫(8):网页基

小白学 Python 爬虫(15):urllib 基础使用(五)

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装 小白学 Python 爬虫(7):HTTP 基础 小白学 Python 爬虫(8):网页基

小白学 Python 爬虫(17):Requests 基础使用

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装 小白学 Python 爬虫(7):HTTP 基础 小白学 Python 爬虫(8):网页基

小白学 Python 爬虫(30):代理基础

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装 小白学 Python 爬虫(7):HTTP 基础 小白学 Python 爬虫(8):网页基

01-Python学习笔记-基础语法

Python标识符 -d           在解析时显示调试信息 -O           生成优化代码 ( .pyo 文件 ) -S           启动时不引入查找Python路径的位置 -v            输出Python版本号 -X           从 1.6版本之后基于内建的异常(仅仅用于字符串)已过时. -c cmd     执行 Python 脚本,并将运行结果作为 cmd 字符串. file           在给定的python文件执行python脚本. P

ios学习路线_OC基础语法

OC是面向对象的语言,同java,python等等一样. OC中的变量类命名同其他对象语言基本类似,写法遵循驼峰法则 一般命名用到的是下划线,字母,开头字符非数字,网上很多有说也可以$符号,其实命名中基本不会用到这个 OC里面的关键字也不多,如图: OC中分基本数据类型和指针类型(即指对象类型) 那么一些基本类型的范围值和写法,这里不一一说,网上太多了,随便百度下 下面废话也不多说,直接给个网上的ppt说明吧 其实写过面向对象语言的朋友,基本上这块so easy 这里可以下载oc的基础部分 io

PHP:学习笔记(2)——基础语法

PHP:学习笔记(2)--基础语法 向屏幕输出 说明 1.void echo ( string $arg1 [, string $... ] ) 2.int print ( string $arg ) 注意: 1.echo.print 实际上不是一个函数(它是一个语言结构),因此你可以不必使用圆括号来括起它的参数列表. 2.输出变量的时候需要使用双引号! 3.int printf ( string $format [, mixed $args [, mixed $... ]] ) 4.strin

Java基础知识二次学习-- 第二章 基础语法与递归补充

第二章 基础语法与递归补充   时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下划线,$,数字组成,应该由字母,下划线$开头,同时应该避开java保留字符 变量是内存中的一小块区域,使用变量名来访问这块区域 执行过程中的内存管理(疑问:这里的内存和Jvm的一样吗?) code segment 存放代码 data segment 静态变量 字符串常量 stack 栈 局部变量 h

小白学前端06

回顾一下这几天吧: 非常后悔的行为: 一口气看完一遍head first html就一头开始想着做网页,实则很多技巧就像刚刚开始学编程就生搬硬套的写算法,不是这样不可行,而是这样的学习曲线很陡峭,很容易让自己产生很大的挫败感: 例如:一开始自己就模仿别人的导航栏(很简单吧),可是单单想出让图片,文本在块级元素中进行居中就费了好大的劲,实则呢,这是一个简简单单的百度经验或者就是要看的下一本书css mastery里面的小例子, 两点: 1.先自己思考,一遍不行,第二遍,但是第二遍不行,就应该sta