• ElasticSearch浅谈


    了解ELK

    ELK是ElasticSearch、Logstash 、 Kibana三大开源框架首字母大写简称。

    了解ElasticSearch

    ElasticSearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。

    下载安装

    下载elasticsearch-7.6.1
    下载elasticsearch-head-master
    启动elasticsearch.bat

    启动可能会报错 , 报错需要在elasticsearch-7.6.1\config\elasticsearch.yml这个文件中配置xpack.ml.enabled: false
    通过head连接elasticSarch会报错跨域
    跨域解决 , 在elasticsearch-7.6.1\config\elasticsearch.yml配置文件中配置

    http.cors.enabled: true
    http.cors.allow-origin: "*"
    
    • 1
    • 2

    在这里插入图片描述

    了解Kibana

    Kibana是一个针对ElasticSearch的开源分析及可视化平台,用来搜索、查看交互存储在ElasticSearch索引中的数据。使用Kibnan,可以通过各种图表进行高级数据分析展示。

    安装Kibana

    下载后解压就可以
    解压后运行bin目录下面的 .bat文件
    在这里插入图片描述
    浏览器访问即可

    打开是英文界面 , 这时我们就需要汉化 , 那么怎么汉化呢

    在kibana-7.6.1-windows-x86_64\config目录下的kibana.yml配置文件最后加上下面的那行代码

    i18n.locale: "zh-CN"
    
    • 1

    ES的核心概念

    1. ElasticSearch是面向文档的
    2. ElasticSearch的几个概念
    3. 索引: 相当于关系型数据库的数据库
    4. types: 相当于关系型数据库的表 , 被遗弃了
    5. 文档:相当于关系型数据库的行
    6. 字段: 相当于关系型数据库的列
      ElasticSearch在后台把每个索引划分成多个分片 , 每个分片可以在集群中的不同服务器间迁移
      一个也是集群 , 默认集群名称就是ElasticSearch

    Ik分词器

    1. 下载:https://github.com/medcl/elasticsearch-analysis-ik/releases?after=v6.3.2
    2. 解压到elasticsearch-7.6.1\plugins这个目录下
    3. 重启ElasticSearch
    4. 可以通过 命令 elasticsearch-plugin list来查看插件是否安装成功
    5. 使用Kibana调试

    IK分词器提供了两个分词算法:ik_smart 和 ik_max_word

    其中的ik_smart为最少切分 , ik_max_word为最细粒度划分

    使用Kinban测试
    在这里插入图片描述
    默认分词器中的分词效果不够 , 像姚云峰这样的词实际上是一个词 , 但是分词器却没能识别 , 把姚云峰三个字也全部都分开了 , 这样情况下我们该怎么办?

    Ik分词器增加自己的配置
    在这里插入图片描述

    关于索引的操作

    创建索引
    PUT /索引名/类型名/文档id
    {请球体}
    在这里插入图片描述
    Put的索引的类型

    • 字符串类型
      • text 、 keyword
    • 数值类型
      • long 、 integer 、 short 、 byte 、 double 、 float 、 half 、 float 、 scaled 、 float
    • 日期类型
      • date
    • 布尔值类型
      • boolean
    • 二进制类型
      • binary

    指定字段类型,创建索引的具体规则
    在这里插入图片描述

    PUT /test2
    {
      "mappings": {
        "properties": {
          "name": {
            "type": "text"
          },
          "age": {
            "type": "long"
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    获取索引规则
    在这里插入图片描述
    get 索引名

    如果自己的文档没有指定 , 那么ES就会给我们默认配置字段类型

    通过GET _cat/indices?v命令查看ES当前的一些信息

    更新索引
    POST调用或PUT调用

    PUT调用 , 创建和原来索引一样的索引进行覆盖

    
    PUT /test3/_doc/1
    {
      "name": "张三",
      "age": 13
    }
    
    
    PUT /test3/_doc/1/
    {
      "name": "李四",
      "age": 15
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    POST修改索引

    PUT /test3/_doc/1
    {
      "name": "张三",
      "age": 13
    }
    
    
    POST /test3/_doc/1/_update
    {
      "doc": {
        "name": "55",
        "age": 26
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    删除索引的名称

    DELETE 索引名称
    
    • 1

    在这里插入图片描述

    文档的基本操作

    基本操作

    给文档添加元素

    PUT /yyf/user/1
    {
      "name": "张三",
      "age": 69
    }
    
    
    PUT /yyf/user/2
    {
      "name": "李四",
      "age": 80
    }
    
    
    PUT /yyf/user/3
    {
      "name": "王五",
      "age": 32
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    获取文档的值

    GET /yyf/user/1
    
    • 1

    更新文档的值

    POST /yyf/user/1/_update
    {
      "doc": {
        "name": "车厘子",
        "age": 64
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    简单的条件查询 , q=关键字:值

    GET /yyf/user/_search?q=name:王五
    
    • 1

    复杂的操作查询(排序、分页、高亮、模糊查询、精准查询)

    GET /yyf/user/_search
    {
      "query": {
        "match": {
          "name": "王五"
        }
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    结果过滤:

    GET /yyf/user/_search
    {
      "query": {
        "match": {
          "name": "王五"
        }
      },
      "_source": ["name"]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    排序: desc 降序 , asc : 升序

    GET /yyf/user/_search
    {
      "query": {
        "match": {
          "name": "王五"
        }
      },
      "_source": ["name"],
      "sort": [
        {
          "age": {
            "order": "desc"
          }
        }
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    分页查询

    from : 从第几条数据开始 , 默认从零开始
    size:返回多少数据(单页面数据)

    
    GET /yyf/user/_search
    {
      "query": {
        "match": {
          "name": "王五"
        }
      },
      "_source": ["name"],
      "sort": [
        {
          "age": {
            "order": "desc"
          }
        }
      ],
      "from": 0,
      "size": 1
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    多条件查询

    must相当于mysql中的and , 要求必须都匹配
    查询name是王五且age是32的值

    GET /yyf/user/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "name": "王五"
              }
            },
            {
              "match": {
                "age": 32
              }
            }
            
          ]
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    should相当于mysql中的or
    age是32 或者name是王五的元素

    
    GET /yyf/user/_search
    {
      "query": {
        "bool": {
          "should": [
            {
              "match": {
                "name": "王五"
              }
            },
            {
              "match": {
                "age": 32
              }
            }
            
          ]
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    must not过滤掉字段中满足条件的数据

    不是王五且不等于三十二的
    GET /yyf/user/_search
    {
      "query": {
        "bool": {
          "must_not": [
            {
              "match": {
                "name": "王五"
              }
            },
            {
              "match": {
                "age": 32
              }
            }
            
          ]
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    过滤查询
    查询name是王五 ,且age满足从32到35岁的数据 , 包含32和35
    gt : >
    gte: >=
    lt: <
    lte:<=

    GET /yyf/user/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "name": "王五"
              }
            }
          ],
          "filter": {
            "range": {
              "age": {
                "gte": 32,
                "lte": 35
              }
            }
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    匹配多个条件

    在这里插入图片描述

    must类似于and where id = 1 and name = xxx

    should 类似于or where id = 1 or name = xxx

    must_not 相当于不等于

    精确查询

    term查询是直接通过倒排索引指定的词条进行精确查找的

    • term是精确查找
    • match , 会使用分词解析(先分析文档 , 然后通过分析的文档进行查询)

    两个类型:test keyword
    keyword字段类型不会被分词器解析

  • 相关阅读:
    WEB与低代码:B/S架构在开发中的应用与优势
    css中页面元素隐藏
    ARP欺骗
    树莓派连接串口
    nodejs express vue 酒店预订系统源码
    网页数据抓取-网页实时数据抓取软件
    12.88万的小魔驼2.0量产交付,末端物流自动配送从概念走向现实
    C++期末考试注意点
    Java native关键字 实现
    vertx的学习总结7之用kotlin 与vertx搞一个简单的http
  • 原文地址:https://blog.csdn.net/weixin_44735933/article/details/119715527