ES完整使用从安装到springboot项目操作

这篇具有很好参考价值的文章主要介绍了ES完整使用从安装到springboot项目操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ES

1. ES的原理和基本概念

ES一般使用保存日志数据,对数据做日志做一些管理,ElasticSearch(resful风格)数据只有json类型的,

ElastricSearch和Solr都是基于Lucene的全文搜索引擎服务器
Lucene:
apache的子项目开源的全文搜索引擎工具包
倒排索引:
通过term或者说某个词记录其所在的文档的地址,来查找文档中的内容
Lucence的内部结构
索引:一个索引对应一个文件夹,文件夹里的分件构成一个Luence索引
段:一个索引可以包含多个段 段相互独立也可以合并,添加文档(doc)也会添加段
文档:文档是Lucence最小的单位,不同的文档存在不同的段中,每个段可以存多个文档
域(字段):一篇文档中有多个字段,可以存在不同的域中
词:是索引最小的单位,经过词法分析或者语言处理后的字符串

​ 索引(index) -----> 数据库
​ 类型(type)-----> 表
​ 文档(doc)-----> 行
​ 字段(fields)-----> 列
​ term (项) -----> 里面的某个字符

分词:ik分词器
对于一些没有意义的词不建立索引,不使用,不与doc文档地址链接
keyword 不进行分词不做拆分,直接根据字符串的内容建立反向索引
text 进行分词 根据分词建立反向索引
Elasticsearch分布式
分布式节点是对等,选出一个Master然后Master负责进行写入和更新操作,而且Elasticsearch会对数据进行切分,同每个分片也会保存多个副本保证高可可用
只有建立索引和类型需要经过master
数据的写入有一简单的路由规则,可以route到集群的任意节点,所以数据写入压力是分散在整个集群中的
可以做搜索和日志分析加上kibana

2. ES和Kibana的下载与安装

  1. ES下载地址

  2. Kibana下载地址

  3. ES和Kibanna的对照表

  4. es安装步骤 (es安装真的坑)

    # 1. 修改es 内存配置,不然启动不起来
    vim /nikaboy/elasticsearch-8.2.2/config/jvm.options
     -Xms512m
     -Xmx512m
      
    # 2. 创建一个普通用户,es无法在root用户进行操作
    useradd es
    passwd es
    chown -R es /nikaboy/elasticsearch-8.2.2 # 配置es用户对文件目录的权限
    
    # 3. 编辑 /etc/security/limits.conf
    	es soft nofile 65536
    es hard nofile 65536
    	es soft nproc 4096
    	es hard nproc 4096
    # 4. 编辑 /etc/security/limits.d/20-nproc.conf,将* 改为用户名(es)
    es          soft    nproc     4096
    root       soft    nproc     unlimited
    
    # 5. vi 编辑 /etc/sysctl.conf
    vm.max_map_count = 655360
    
    # 6.配置application.yml
    
    # 7. su es 切换到es用户
     nohup ./bin/elasticsearch > msg.log 2>&1 &   # 后台启动es
    # 8. 访问
    http://192.168.10.10:9200/
    
    

    es的application.yml文件

     cluster.name: my-application #集群名称
     node.name: node-1 #节点名称
     #数据和日志的存储目录
     path.data: /nikaboy/elasticsearch-8.2.2/db/data
     path.logs: /nikaboy/elasticsearch-8.2.2/db/logs
     #设置绑定的ip,设置为0.0.0.0以后就可以让任何计算机节点访问到了
     network.host: 0.0.0.0
     http.port: 9200 #端口
     #设置在集群中的所有节点名称,这个节点名称就是之前所修改的,当然你也可以采用默认的也行,目前是单机,放入一个节点即可
     cluster.initial_master_nodes: ["node-1"]
     
     #----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
     #
     # The following settings, TLS certificates, and keys have been automatically
     # generated to configure Elasticsearch security features on 08-11-2022 13:02:52
     #
     # --------------------------------------------------------------------------------
     
     # Enable security features
     xpack.security.enabled: false # 关闭ssl认证
     
     xpack.security.enrollment.enabled: true
     
     # Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
     xpack.security.http.ssl:
     enabled: false # 关闭ssl认证
     keystore.path: certs/http.p12
     
     # Enable encryption and mutual authentication between cluster nodes
     xpack.security.transport.ssl:
     enabled: true
     verification_mode: certificate
     keystore.path: certs/transport.p12
     truststore.path: certs/transport.p12
     #----------------------- END SECURITY AUTO CONFIGURATION -------------------------
    
    
    1. 安装Kibanna(可视化监控es)

      • 配置kibanna的yml文件 (cd /nikaboy/kibana-8.2.2/config)

        server.port: 5601
        
        server.host: "0.0.0.0"
        
        server.name: "kibana"
        
        elasticsearch.hosts: ["http://127.0.0.1:9200/"]
        
        i18n.locale: "zh-CN"
        
      • 切换普通用户启动 访问

         nohup ./bin/kibana >msg.log 2>&1 &
         #访问地址 http://192.168.10.10:5601/ 
        

3.ES使用

  1. kibaba的使用

es springboot 配置,es,笔记,精品,elasticsearch,spring boot

es springboot 配置,es,笔记,精品,elasticsearch,spring boot

  1. 索引增删改查

    # 创建一个索引
    PUT /nikaboy
    {
         
      "settings": {
         
        "number_of_shards": 5,  ## 分片数量 默认为1
        "number_of_replicas": 1   ## 备份数量 默认为1
      }
    }
    
    # 查看索引
    GET /nikaboy
    
    # 删除索引
    DELETE /nikaboy
    
  2. ES中Field可以指定的类型

字符串String:
text:一般用于全文检索。将当前的field进行分词
keyword: 当前的Field不可被分词
数值类型Numeric:
long,
integer,
short,
byte,
double,
float,
half_float,
scaled_float
时间类型Data:
date,可以指定具体的格式
布尔类型Boolean:
boolean
二进制类型Binary:
binary
范围类型Range:
integer_range, float_range, long_range, double_range, date_range
经纬度类型:
geo_point:用来存储经纬度
ip类型:
ip:可以存储ipv4或者ipv6

  1. 增删改数据

    • 创建包含数据结构的索引

      PUT /student 
      {
             
       "settings": {
             
          "number_of_shards": 5,  
          "number_of_replicas": 1  
        },
        "mappings": {
             
              "properties":{
             
                "name":{
             
                  "type":"text"
                },
                "age":{
             
                  "type":"integer"
                },
                "sex":{
             
                  "type":"byte"
                },
                "native":{
             
                  "type":"keyword"
                },
                "birthDate":{
             
                  "type":"date"
                },
                "sno":{
             
                  "type":"keyword"
                }
              }
          }
      }
      

可能会遇到问题:Failed to parse mapping: Root mapping definition has unsupported parameters…在7.+版本,已经不支持索引创建type,默认类型是_doc

  • 给类型字段增删改

    ## 给student 增加 class_name 字段
    PUT /student/_mapping
    {
         
      "properties":{
         
        "class_name":{
         
          "type":"text"
        }
      }
    }
    
    ##  增加某个学生的某个字段
    POST /student/_update/12345678
    {
         
      "script": {
         
        "source": "ctx._source.price=34"
      } 
    }
    
    
    ## 删除某个学生的某个字段
    POST /student/_update/12345678
    {
         
       "script": {
         
        "source":"ctx._source.remove(\"price\")"
      }
    }
    
  1. 增加数据

    ## 增加数据
    
    POST  /student/_doc
    {
         
      "name": "小王",
      "sex": 1,
      "birthDate" : "2020-11-11",
      "class_name" : "计算机科学一班",
      "native": "广州天河区",
      "sno": "12345678",
      "age": "2"
    }
    ## 查看数据 
    
    POST /student/_search
    {
         
      "query": {
         
        "match_all": {
         }
      }
    }
    
    ## 根据id删除某条数据
    
    DELETE /student/_doc/cW-LZ4QBLCdlaqLEGlVK
    
    ## 根据id修改某个字段的数据
    POST /student/_update/cG-KZ4QBLCdlaqLE6lUF
    {
         
      "doc": {
         
        "name":"小雅"
      }
    }
    
    
    ## script 脚本方式 更新数据 将id为12345678的学生班级名修改为二班 
    POST /student/_update/12345678
    {
         
      "script":{
         
        "source": "ctx._source.class_name = params.class_name", 
        "params": {
         
          "class_name":"计算机科学二班"
        }
      }
    }
    
    ## 
    ## 创建一个 script 脚本
    POST _scripts/my_scripts_01
    {
         
      "script":{
         
        "source": "ctx._source.class_name = params.class_name", 
        "lang": "painless"
      }
    }
    
    ## 查看script脚本
    GET _scripts/my_scripts_01
    
    ## 删除script脚本
    DELETE   _scripts/my_scripts_01
    
    ##使用脚本
    POST /student/_update/12345678
    {
         
      "script":{
         
        "id":"my_scripts_01",
        "params": {
         
          "class_name":"计算机科学三班"
        }
      }
    }
    
    ## 找到出name为小雅学生 修改为 小爱
    POST /student/_update_by_query
    {
         
       "query": {
         
        "match_phrase": {
         
          "name":"小雅" 
        }
      },
      "script": {
         
        "source": "ctx._source.name=params.name;ctx._source.class_name=params.class_name",
        "lang": "painless",
        "params": {
         
          "name":"小爱",
          "class_name":"二班"
        }
        
      }
    }
    
    

    ES内部对partial update的实际执行,跟传统的全量替换方式,是几乎一样的

1.内部先获取document
2.将传过来的field更新到document的json中
3.将老的document标记为deleted
4.将修改后的新的document创建出来

  1. 查询数据

    1. 查看筛选字段

      POST /student/_search
      {
             
        "query": {
             
          "match_all": {
             }
        },
        "_source": ["age","name","sno"] # 只显示_doc的这三个字段 ,类似 mysql的 Select age,name,sno from student
      }
      
    2. 分页类似mysql的 limit 和 排序 order by

      ## 分页 0 - 3
      POST /student/_search
      {
             
        "query": {
             
          "match_all": {
             }
        },
        "from": 0,
        "size": 3  
      }
      ## 根据 age 去排序
      POST /student/_search
      {
             
        "query": {
             
          "match_all": {
             }
        },
        "sort": [
          {
             
            "age": {
             
              "order": "desc"
            }
          }
        ], 
        "from": 0,
        "size": 3
        
      }
      
    3. terms 和term的使用,根据term 找到整个文档,如果字段可以分词,则模糊查出数据,如果不能能分词则需要数据字段中所有的数据

      {
             
        "query": {
             
         "terms": {
             
           "name": [
             "小",
             "雅"
           ]
         }
        },
        "from": 0,
        "size": 3
      }
      
      
      ## native 数据类型为keyword 无法分词,不是模糊查询
      POST /student/_search
      {
             
        "query": {
             
         "terms": {
             
           "native": [
             "广州"
                 ]
         }
        },
        "from": 0,
        "size": 3
      }
      
      
      POST /student/_search
      {
             
        "query": {
             
         "term": {
             
           "name":"王"
         }
        },
        "from": 0,
        "size": 3
      }
      
      
    4. match的使用,是对term的封装,如果可以分词则把数据切割成多个term查询,返回结果集文章来源地址https://www.toymoban.com/news/detail-660363.html

    POST /student/_search
    {
         
      "query": {
         
        "match": {
         
          "native":"广州天河区" 
        }
      },
      "from": 0,
      "size": 3
      
    }
    
    POST /student/_search
    {
         
      "query": {
         
        "match": {
         
          "native":"广州" 
        }
      },
      "from": 0,
      "size": 3
      
    }
    
    POST /student/_search
    {
         
      "query": {
         
        "match": {
         
          "name":"小王" 
        }
      },
      "from": 0,
      "size": 3
      
    }
    
    ## 基于一个Filed匹配的内容,采用and或者or的方式进行连接
    POST /student/_search
    {
         
      "query": {
         
        "match": {
         
          "class_name":{
         
            "query": "一班 计算机",
            "operator": "and"
          } 
        }
      },
      "from": 0,
      "size": 3
      
    }
    
    1. multi_match的使用,一个text数据应用在多字段上查询的结果集合
    //相当于mysql  (class_name like '%计算机%' ) or (name like '%计算机%')
    POST /student/_search
    {
         
      "query": {
         
        "multi_match": {
         
          "query": "计算机",
          "fields": ["class_name"

到了这里,关于ES完整使用从安装到springboot项目操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch 7.X SpringBoot 使用 ElasticsearchRestTemplate 操作 ES

    前面学习了es rest接口对es进行操作的方式,并且还学习了es的分片及扩容,有讲解了几种常见的分词器,喜欢的小伙伴可以看下本专栏的其他文章,本篇主要将 在 SpringBoot 中使用 ElasticsearchRestTemplate 对ES进行操作。 对于SpringBoot对ES的操作早在以前我就写过一篇文章,但那时基

    2023年04月09日
    浏览(30)
  • 项目中使用es(二):使用RestHighLevelClient操作elasticsearch

    写在前面 之前写了有关elasticsearch的搭建和使用springboot操作elasticsearch,这次主要简单说下使用RestHighLevelClient工具包操作es。 搭建环境和选择合适的版本 环境还是以springboot2.7.12为基础搭建的,不过这不重要,因为这次想说的是RestHighLevelClient操作elasticsearch,RestHighLevelClient版本

    2024年02月14日
    浏览(30)
  • ElasticSearch保姆级教程[1]——SpringBoot 项目中使用 ES

    该教程主要分为 三篇文章。此为第一篇——主要介绍 ElasticSearch、Kibana 的安装 以及如何 通过 Http 和Java API的方式使用 ElasticSearch。学完本文,你就可以 在SpringBoot 项目中使用 ES了。第二篇超链接、第三篇超链接 一、实现ElasticSearch 单机运行 1.1 安装运行ElasticSearch 首先,我们

    2023年04月10日
    浏览(31)
  • Kibana的简单安装详细步骤、以及如何简单的使用Kibana操作ES

    目录 什么是Kibana KIbana的安装与启动 下载 安装 修改配置 启动 测试 搭配kibana使用ES index管理 mapping管理 更新mapping 删除mapping

    2024年02月08日
    浏览(37)
  • springboot操作es

    一定要修改对应es版本 修改es版本,我的pom文件: 记得把没用文件删掉.mvn,和一些mvn的配置文件,要不然可能会导致项目编译不通过 注: 在ElasticSearch 7以后,Spring data建议采用High-level REST client。 在测试类进行测试,测试类中直接注入restHighLevelClient即可使用; 文档的增删改查; bulk语法

    2024年02月09日
    浏览(21)
  • ElasticSearch的使用,安装ik分词器,自定义词库,SpringBoot整合ES(增、删、改、查)

    保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识(相当于,保存一个数据,保存在那个数据库中的哪个表中,指定主键ID) 例:PUT customer/external/1;在customer索引下的external类型下保存1号数据name为John Doe的数据 POST和PUT都可以新增数据 注意: POST 新增。如果

    2023年04月25日
    浏览(39)
  • springboot与es集成操作-基础篇

    分页查询,高亮查询 自动补全 添加文档数据

    2024年02月15日
    浏览(30)
  • 信创适配- 麒麟V10 安装ES完整教程---单机版

    查看系统的架构, 下载合适的版本 由于此处我的架构师arm64, 所以根据架构选择我的版本是 elasticsearch-7.17.8-linux-aarch64.tar.gz esx下载地址: https://www.elastic.co/cn/downloads/elasticsearch 1、创建ES 文件夹 2、上传并解压 3、创建用户,授权访问 4、修改elasticsearch.yml配置文件, 注意:冒号后面

    2024年01月20日
    浏览(41)
  • springboot java 项目连接es

    小项目,没有引用es客户端,直接使用的http的方式进行连接的,方式比较简单,但是依赖较少,一个比较小的项目,部署方便 业务也很简单就是把数据库中的数据读到es中,然后在做几个接口读es中的数据 es版本 6.8.11 springboot 2.6.3 java 8 只有web和mysql的依赖,别的不需要 这里就

    2024年02月19日
    浏览(27)
  • 在SpringBoot中对es集群的查询操作

                将以上代码复制到kibana的控制台上运行          运行完后可以到打开head插件查看信息           数据准备完成后我们就可以开始查询了                  通过上述两个查询我们发现,查询数据的时候会有很多冗余的部分,所以我们可以将这一部分代码进

    2024年02月12日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包