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日
    浏览(32)
  • 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日
    浏览(24)
  • Spring Boot 实战 | Spring Boot整合JPA常见问题解决方案

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

    2024年02月04日
    浏览(47)
  • 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日
    浏览(25)
  • Spring Boot整合canal实现数据一致性解决方案解析-部署+实战

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

    2024年03月19日
    浏览(43)
  • 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日
    浏览(29)
  • Spring boot整合sse(使用详解)

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

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

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

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

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

    2024年02月16日
    浏览(25)
  • 使用 Spring Boot 整合 Kafka:实现高效的消息传递

    Kafka 是一种流处理平台,用于在分布式系统中处理高吞吐量的数据流。它是一种基于发布订阅模式的消息系统,能够处理来自多个应用程序的数据流。Kafka 具有高度的可扩展性、可靠性和性能,使得它成为处理大数据的流行选择。 Spring Boot 是一种开源框架,用于简化 Java 应用

    2024年02月14日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包