ES 部署,问题及整合spring boot 简单使用

这篇具有很好参考价值的文章主要介绍了ES 部署,问题及整合spring boot 简单使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

安装部署

先前部署项目部署es的流程

下载elasticsearch

https://www.elastic.co/cn/downloads/elasticsearch

解压安装elasticsearch

修改配置文件,配置为单个节点

config/elasticsearch.yml

discovery,seed_hosts:[“127.0.0.1:9200”]

cluster.initial_master_nodes:[“node-1”]

因为部分elasticsearch支持的jdk版本不一样,所以可以自己再给elasticsearch配置一个jdk版本

启动elasticsearch

因为elasticsearch不能以root用户启动,所以 要新建一个用户用来启动elasticsearch

adduser 新用户名

passwd 初始化新用户的密码

使用root用户找到sudoers文件,赋予可读写权限

whereis sudoers

修改权限

chomd -v u+w sudoers的路径

进入sudoers文件,在root下添加

新用户用户名 ALL=(ALL) ALL

切换到新用户

su 新用户名

之后进入elasticsearch目录下,进入bin目录,后台运行elasticsearch

./elasticsearch -d

部署问题(使用版本为7.16)

启动配置

  • es的安装目录下的config/elasticsearch.yml

集群名设置

cluster.name: 集群名

节点名设置

node.name: 当前节点名

任何ip都能访问

network.host: 0.0.0.0

启动端口

http.port: 9200

jdk版本不对

一般使用的jdk为8版本,但是es版本不支持jdk8,所以要给es专门配置一套jdk

es要求的版本最低为11版本

所以,下载11版本的jdk,并在环境变量中配置ES_JAVA_HOME即可

启动权限问题

按照上述的方式配好用户后,可能还是会提示没有权限启动

启动的时候不能使用sudo方式,不然依旧是“不能以root用户启动es”的报错

最直接的方式就是新建一个用户后,把es的安装目录的权限分给新用户

例如(root用户下)

adduser es

chown -R es es安装目录

jvm警告

Java HotSpot™ 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.

这个错误需要修改es安装目录下的config/jvm.optionsn

-XX:+UseConcMarkSweepGC

修改为
-XX:+UseG1GC

无法使用问题

部署完之后不仅要访问ip:端口查看启动状态

也需要ip:端口/_cat/nodes?pretty检查是否正常

如果显示

{
    "error": {
        "root_cause": [
            {
                "type": "master_not_discovered_exception",
                "reason": null
            }
        ],
        "type": "master_not_discovered_exception",
        "reason": null
    },
    "status": 503
}

则还是没有准备,去安装目录下的conf/elasticsearch.yml中检查配置

查看两个内容,这两个节点的内容一定要一致

cluster.initial_master_nodes: ["node1"]
node.name: node1

文件权限与存储大小问题

报错内容

ERROR: [2] bootstrap checks failed. You must address the points described in the following [2] lines before starting Elasticsearch.
bootstrap check failure [1] of [2]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
bootstrap check failure [2] of [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
ERROR: Elasticsearch did not exit normally - check the logs at /usr/local/elasticsearch/elasticsearch/logs/my-application.log

解决方案

切换到root用户修改一些内容

elasticsearch用户拥有的可创建文件描述的权限太低,至少需要65536,

vim /etc/security/limits.conf # 在最后面追加下面内容

es启动用户 hard nofile 65536

es启动用户 soft nofile 65536

max_map_count文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量

vim /etc/sysctl.conf # 在最后面追加下面内容

vm.max_map_count=655360

执行 sysctl -p

介绍

es是一个分布式,高扩展,高实时的搜索与数据分析引擎,通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变的简单,本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据

核心概念

es是面向文档的搜索引擎

es和数据库的比对

数据库 es
数据库 索引
types
documents
字段 fields

文档

es的数据存储格式相当于索引下的类型里面的json格式的数据

因为es是面向文档的搜索,所以一个文档就是es中可搜索的最小的单元

类比于mysql中,就是把mysql中的一行数据以json的格式保存在es中

类型

相当于数据库的表,一个索引下可以有很对类型,但是在es6.0开始,type就已经主键废弃了,但是依旧可以设置多个类型,但是在7.0开始,一个索引只能有一种类型了(_doc)

索引

不同特性的文档存放在不同的索引里

索引名称必去全部都是小写

单个集群中可以定义任意多个索引

索引具有mapping和setting的概念,mapping用来定义文档字段的类型,setting用来定义不同数据的分布

基本操作

创建一个空的索引

创建一个0副本2分片的repledata索引

PUT /ropledata
{
  "settings": { 
    "number_of_shards": "2", 
    "number_of_replicas": "0"
  } 
}

修改副本数量(分片数量无法修改)

PUT ropledata/_settings 
{ 
  "number_of_replicas" : "2" 
}

删除索引

DELETE /ropledata

插入数据

插入数据的时候可以指定ID,不指定的话es会帮我们生成

id是101而不是数据中的"id":1

//指定id 
POST /ropledata/_doc/101 
{
  "id":1,
  "name":"且听_风吟",
  "page":"https://ropledata.blog.csdn.net",
  "say":"欢迎点赞,收藏,关注,一起学习" 
}

修改数据

es的文档是不可以修改的,但是可以覆盖,es的数据修改本质上就是对文档的覆盖

es对数据的修改分为全局更新和局部更新

全局更新是替换操作,就算是数据一样也会执行替换操作

局部更新是只有遇到新得内容的时候才会去更新

所以局部更新会比全局更新效率高

全局更新

PUT /ropledata/_doc/101
{ 
  "id":1,
  "name":"且听_风吟",
  "page":"https://ropledata.blog.csdn.net",
  "say":"再次欢迎点赞,收藏,关注,一起学习" 
}

局部更新

POST /ropledata/_update/101 
{
  "doc":
  {
    "say":"奥力给"
  } 
}

查询数据

GET /ropledata/_doc/101

删除数据

DELETE /ropledata/_doc/101

查询语句

查询当前索引下全部的内容,并返回指定属性值的数据内容

(因为7.0之后是没有type的概念了,所以使用了_doc,如果还有type的概念的话,可以把_doc替换为相对应的type名即可查询)

GET /topledata/_doc/_search
{
    "query":{
        "match_all":{

        }
    },
    "_source":["属性值","属性值"]
}

查询指定字符查找内容,并按照倒序排列,从第0条数据开始,查找10条数据(也就是分页查询)

GET /topledata/_doc/_search
{
    "query":{
        "mathc":{
            "属性值":"关键字"
        }
    },
    "sort":[
        {
            "属性字段":{
                "order":"desc"
                }
        }
    ],
    "from":0,
    "size":10
}

match

对于match而言,是根据分词来查询的,如果match中存在两个分词,那个他会一个一个查询,之后取他们的一个并集

可以使用match_phrase来指定精准查询不需要分词查

多条件查询

bool过滤可以用来合并多个过滤条件查询结果的布尔逻辑

must多个查询条件的完全匹配,相当于and

must_not多个查询条件的相反匹配,相当于not

should至少有一个查询条件匹配,相当于or

这些参数分别可以继承一个过滤条件或者一个过滤条件的数组

GET /topledata/_doc/_search
{
    "query":{
        "bool":{
            "must":[
                {
                    "match":{
                        "属性值":"关键词"
                            }
                    }
                ]
            },
            "filter":{
                "range":{
                       "关键词":{
                            "判断符":内容
                            }    
                    }
                }
    }
}

聚合分析

es5之后fielddata默认是false,需要开启这个才能进行聚合

GET /topledata/_mapping/product
{
    "properties":{
        "tags":{
            "type":"text",
            "fielddata":true
            }
      }
}

获取某一列以不同分组的总和,并以某个条件做排序操作,并使用range过滤指定范围的数据

terms和term类似,单terms允许指定多个匹配条件,如果某个字段指定了多个值,那么需要文档一起做匹配

GET /topledata/_doc/_search
{
    "query":{
        "match":{
            "属性值":"关键词"
        }
    },
    "aggs":{
        "聚合名称":{
            "terms":{
                "field":"属性值",
                "range":[
                     {
                        "from":值,
                        "to":值
                   },
                     {
                         "from":值,
                        "to":值
                    }       
                ],
                "order":{
                    "下面的那个aggs的名称":"desc"
                    }
                }
            },
            "aggs":{
                "自定义名称":{
                    "avg":{
                        "field":"属性值"
                        }
                    }
                }
    }
}

整合springboot

引入elasticsearch启动包

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

配置yml文件

spring:
  elasticsearch:
    uris: http://ip:端口
    #当前部署的es并没有账号和密码
    #username:
    #password:

测试内容

实体类

新建一个实体类来标识一个索引

@Data
@Document(indexName = "testdemo")
public class EsDemoModel {

    @Id
    private String id;

    @Field(type = FieldType.Text)
    private String name;

    @Field(type = FieldType.Text)
    private String team;
}

方法

和redis类似,拥有一个ElasticsearchRestTemplate可以引用

保存

    @Test
    void EsSaveTest(){
        EsDemoModel esDemoModel = new EsDemoModel();
        esDemoModel.setName("panther");
        esDemoModel.setTeam("marvel");
        elasticsearchRestTemplate.save(esDemoModel);
    }

查询

    @Test
    void EsSearchTest(){
        Query query = new NativeSearchQueryBuilder().withQuery(QueryBuilders.queryStringQuery("man").defaultField("name")).build();
        SearchHits<EsDemoModel> search = elasticsearchRestTemplate.search(query, EsDemoModel.class);
        List<EsDemoModel> collect = search.getSearchHits().stream().map(SearchHit::getContent).collect(Collectors.toList());
        System.out.println(collect);
    }

修改

es的操作和redis类似,如果遇到有相同_id的内容,就会覆盖,所以查出来之后再保存可以保证对一条数据的修改文章来源地址https://www.toymoban.com/news/detail-406968.html

删除

 @Test
    void EsDelete(){
        Query query = new NativeSearchQueryBuilder().withQuery(QueryBuilders.queryStringQuery("super man").defaultField("name")).build();
        elasticsearchRestTemplate.delete(query,EsDemoModel.class);
    }

到了这里,关于ES 部署,问题及整合spring boot 简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 知识点13--spring boot整合elasticsearch以及ES高亮

    本章知识点沿用知识点12的项目,介绍如何使用spring boot整合ES,没有ES的去我主页 各类型大数据集群搭建文档--大数据原生集群本地测试环境搭建三 中可以看到ES如何搭建 不管你有没有ES,最好是没有,因为一定要知道一点,一定要去官网查一下你当前用的spring boot data es的版

    2024年02月12日
    浏览(50)
  • Spring Boot 2.0 M7 整合 ES 5 、Kibana 和 X-pack

    ES 及 x-pack 下载安装 Kibana 及 x-pack 下载安装 Spring Boot 整合 ES Spring Boot 操作 ES 阅读时间:5 分钟 摘录:打算起手不凡写出鸿篇巨作的,往往坚持不了完成第一章节 原文出处:spring4all.com spring-data-elasticsearch 之 ElasticSearch 架构初探,详细看下我另外一篇文章《深入浅出 spring-d

    2024年02月20日
    浏览(33)
  • Spring Boot 实战 | Spring Boot整合JPA常见问题解决方案

    专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏: Python 专栏: Redis 专栏: TensorFlow 专栏: Logback 专栏: 量子计算: 量子计算 | 解密著名量子算法Shor算法和Grover算法 AI机器学习实战: AI机器学习实战 | 使用 Python 和 scikit-learn 库进行情感分析 AI机器学习 | 基于lib

    2024年02月04日
    浏览(58)
  • windows部署es6.8.0集群并部署到spring boot

    1、先下载windows版本es 2、下载完成之后,建一个文件夹elasticsearch-cluster,把es解压到里边,并且在复制两份 3、去 conf 文件夹下,打开 elasticsearch.yml 文件添加以下配置 ,分别是三个es的 elasticsearch.yml 文件的配置 cluster.name: my-application node.name: node-1 network.host: 127.0.0.1 http.port: 9

    2023年04月21日
    浏览(35)
  • Spring Boot整合canal实现数据一致性解决方案解析-部署+实战

    🏷️ 个人主页 :牵着猫散步的鼠鼠  🏷️ 系列专栏 :Java全栈-专栏 🏷️ 个人学习笔记,若有缺误,欢迎评论区指正   1.前言 2.canal部署安装 3.Spring Boot整合canal 3.1数据库与缓存一致性问题概述 3.2 整合canel 4.总结 canal [kə\\\'næl]  ,译意为水道/管道/沟渠,主要用途是 基于

    2024年03月19日
    浏览(50)
  • Spring Boot整合Log4j2.xml的问题

    Spring Boot整合Log4j2.xml的时候返回以下错误: Caused by: org.apache.logging.log4j.LoggingException: log4j-slf4j-impl cannot be present with log4j-to-slf4j 进行了解决。 Spring Boot整合Log4j2.xml经过以下操作: 配置 log4j2.xml 添加到 src/main/resources 目录下 Gradle的配置:在 build.gradle 中添加: 启动应用,返回以

    2024年02月09日
    浏览(37)
  • Spring boot整合sse(使用详解)

    SSE是一种 基于HTTP长连接技术,允许服务器向客户端浏览器实时推送更新。 客户端通过创建一个EventSource对象并指向服务器上的一个URL来发起请求,这个请求保持打开状态,服务器可以在这个单一的TCP连接上不断发送新的数据块。这些数据块被称为“事件”,每个事件包含类

    2024年04月12日
    浏览(39)
  • 在 Spring Boot 中整合、使用 WebSocket

    WebSocket 是一种基于 TCP 协议的全双工通信协议,它允许客户端和服务器之间建立持久的、双向的通信连接。相比传统的 HTTP 请求 - 响应模式,WebSocket 提供了实时、低延迟的数据传输能力。通过 WebSocket,客户端和服务器可以在任意时间点互相发送消息,实现实时更新和即时通

    2024年04月13日
    浏览(47)
  • 【Spring Boot Admin】使用(整合Spring Security服务,添加鉴权)

    Spring Boot Admin 监控平台 背景:Spring Boot Admin 监控平台不添加鉴权就直接访问的话,是非常不安全的。所以在生产环境中使用时,需要添加鉴权,只有通过鉴权后才能监控客户端服务。本文整合Spring Security进行实现。 pom依赖 yml配置 启动类@EnableAdminServer 安全配置类:SecuritySe

    2024年02月16日
    浏览(34)
  • spring boot整合cache使用Ehcache 进行数据缓存

    之前的文章 spring boot整合 cache 以redis服务 处理数据缓存 便捷开发 带着大家通过spring boot整合了 cache 缓存 那么 我们就来说说 其他服务的缓存 而spring boot默认的缓存方案就是 cache 用simple模式 spring boot的强大在于它的整合能力 它将其他缓存技术整合 统一了接口 简单说 所有的

    2024年02月19日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包