• ElasticSearch学习(一)


    ElasticSearch

    一、认识ES

    1. 数据库查询存在的问题

    • 性能低:使用模糊查询,左边有通配符,不会走索引,会全表扫描,性能低。
    • 功能弱:如果以”华为手机“作为条件,查询有华为和手机这两个词的文本查询不出来数据。

    因此就有了ElasticSearch这样一个分布式可扩展的实时搜索和分析引擎。

    2. 数据格式

    ES是面向文档型数据库,一条数据在这里就是一个文档。

    ES与关系型数据库MySQL的对比:

    在这里插入图片描述

    注:ES在后续版本中Type的概念已经逐渐被弱化了。

    二、倒排索引的理解

    • 正排(正向)索引

    id content


    1001 my name is zhangsan

    1002 my name is lisi

    适合通过索引查询整个数据行,不适合对数据的位置进行模糊查询。

    • 倒排索引

    keyword id


    name 1001, 1002

    zhangsan 1001

    lisi 1002

    倒排索引即将数据进行分词,形成词条和id的对应关系,即反向索引。因此它适合通过关键字索引来查询数据项所在的位置。

    三、索引操作

    1. 索引的作用

    ES中的索引就相当于关系型数据库(例如MySQL)中的数据库。

    2. 创建索引

    对比关系型数据库,创建索引就等同于创建数据库。

    在Postman中,向ES服务器发送PUT请求:http://127.0.0.1:9200/shopping

    响应如下,创建shopping索引成功:

    在这里插入图片描述

    3. 查看索引

    向ES服务器发送GET请求:http://127.0.0.1:9200/shopping,即可获得对应索引的相关信息。

    图片描述

    4. 查看所有索引信息

    向ES服务器发送GET请求:http://127.0.0.1:9200/_cat/indices?v,即可获得对应索引的相关信息,结果如下:

    在这里插入图片描述

    5. 删除索引

    向ES服务器发送DELETE请求:http://127.0.0.1:9200/shopping,即可删除对应索引,响应如下:

    在这里插入图片描述

    四、 文档操作

    1. 创建操作

    索引已经创建,接下来需要创建文档,并添加数据。这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为JSON格式。

    • 生成随机id,仅支持POST

    向ES服务器发送POST请求:http://127.0.0.1:9200/shopping/_doc,请求体中填入数据的JSON格式信息。

    在这里插入图片描述

    多次请求则会多次重复创建,返回的随机id都不相同。

    • 自定义id,支持POST和PUT

    我们可以自定义生成数据的id,只需要在请求后面加上 /自定义id ,例如:http://127.0.0.1:9200/shopping/_doc/shopping_phone_1002,响应如下:

    在这里插入图片描述

    多次请求同一id即为修改操作(全量修改),不会重复创建。

    • 使用_create创建,支持POST和PUT

    向ES服务器发送请求:http://127.0.0.1:9200/shopping/_create/shopping_phone_1005,多次请求会报错,即使用_create只能创建一次。

    2. 查询操作

    • 主键查询

    根据id主键查询数据,例如向ES服务器发送GET请求:http://127.0.0.1:9200/shopping/_doc/shopping_phone_1001,可以得到相应的数据。

    在这里插入图片描述

    如果输入的id没有找到对应的数据,返回如下:

    在这里插入图片描述

    • 全查询

    查询指定索引下的所有文档,发送GET请求:http://127.0.0.1:9200/shopping/_search,返回结果如下:

    在这里插入图片描述

    3. 修改操作

    • 全量修改

    与创建文档请求方式一致,即向ES服务器发送PUT/POST请求:http://127.0.0.1:9200/shopping/_doc/shopping_phone_1001,请求体中输入修改的数据即可完成此文档的全量更新。

    在这里插入图片描述

    • 局部修改

    全量修改不太常用,常用的是局部修改的操作,即对文档的局部信息进行更新。

    向ES服务器发送POST请求:http://127.0.0.1:9200/shopping/_update/shopping_phone_1001,请求体中的 doc 字段值带上要修改的局部数据即可。

    在这里插入图片描述

    4. 删除操作

    向ES服务器发送DELETE请求:http://127.0.0.1:9200/shopping/_doc/shopping_phone_1002,即可删除id主键对应的文档数据。

    在这里插入图片描述

  • 相关阅读:
    谈谈Kafka、ActiveMQ、RabbitMQ、RocketMQ 区别以及高可用实现
    37. 干货系列从零用Rust编写负载均衡及代理,负载均衡中try_files实现
    电脑为什么会蓝屏的原因
    2022 年你必须知道的 10 个 Python 库
    【Leetcode】202. 两数之和
    推荐几款比较使用的idea插件
    一文理解登录鉴权(Cookie、Session、Jwt、CAS、SSO)
    大语言模型LLM Pro+中Pro+(Prompting)的意义
    计算机毕业设计Javaweb硕士研究生招生考试专业报考查询及学习系统设计与实现(源码+系统+mysql数据库+lw文档)
    Vue中组件间的传值(子传父,父传子)
  • 原文地址:https://blog.csdn.net/J_Du_pro/article/details/127578812