Elasticsearch的部署和使用

news2024/9/22 1:29:41

首先对java来说,我们可用的有原生elasticsearch和经过spring二次封装的spring data elasticsearch.
后者自带了一些方法,类似于mybatisplus,可以直接使用,十分方便.
如果是spring项目都建议使用第二种,除非你要深度使用.

首先是服务器的部署.部署之前要知道版本,我在部署时遇到一个问题,我的demo使用的springboot2.5.5版本.对应的spring data elasticsearch会自动跟随springboot的版本进行下载依赖,
它对应的elasticsearch版本为7.1,7.1在服务器运行时至少需要jdk11.
所以为了保持一致,我降低了demo的springboot版本为2.2.6.
对应的spring data elasticsearch所用的elasticsearch版本为6.8,在服务器部署的时候支持jdk8.

先去下载,官网地址为https://www.elastic.co/downloads/past-releases/elasticsearch-6-8-23,
如果需要别的版本在这里选择https://www.elastic.co/downloads/past-releases#elasticsearch.
下载完上传至服务器.我放在/data/elasticsearch.然后解压
在这里插入图片描述
解压后cd到对应文件夹下./bin/elasticsearch报错,提示不能用root启动
遂单独建了一个账号叫elasticsearch
sudo adduser elasticsearch

更改该文件夹的所有权
sudo chown -R elasticsearch:elasticsearch /data/elasticsearch/elasticsearch-6.8.23

切换用户
sudo -i -u elasticsearch

进到对应文件夹
cd /data/elasticsearch/elasticsearch-6.8.23

启动项目报新的错误,max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

该报错表示你需要增加 vm.max_map_count 参数,这个参数设置可以提高 Elasticsearch 的性能。

切换到root账号,临时性的增加该参数
sudo sysctl -w vm.max_map_count=262144

如果想永久生效,可以将其添加到 /etc/sysctl.conf 文件中:
echo “vm.max_map_count=262144” | sudo tee -a /etc/sysctl.conf

后台启动项目并保存日志
nohup ./bin/elasticsearch > elasticsearch.log 2>&1 &

至此项目启动成功,但是通过ip:端口无法访问,本地项目也无法连接至es

原因是默认只允许本地访问,如果要修改需要改配置文件
在/data/elasticsearch/elasticsearch-6.8.23/config的elasticsearch.yml中,
有一个参数network.host: 是被注释的状态,被注释就采用默认值.
放开注释,修改为network.host: 0.0.0.0允许全部IP访问
或者修改为固定IP 允许固定IP访问,然后重新启动项目即可.

最后放开阿里云/腾讯云服务器的9200端口,放开宝塔9200端口,就可以直接IP:端口访问,看到如此页面就是成功了

在这里插入图片描述

接下来就是项目配置使用来连接服务器的es

首先是依赖,注意直接使用ES和使用spring data elasticsearch的依赖是不同的,我这里是后者

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

然后就是一个大坑,chatgpt告诉我的配置层级是这样的
在这里插入图片描述
但是idea就已经提醒该uris不可达,导致项目怎么启动都是默认连接localhost的
后来研究出来配置层级是这样
在这里插入图片描述

如果是直接用原生ES 需要去配置一个配置类,但是使用spring data的只需要配置yml就可以 无需配置类.

然后就是代码相关:

@Data
@Document(indexName = "user")
public class User {
    @Id
    private Long id;
    //type = FieldType.Text代表需要全文检索的字段,会被分词
    @Field(type = FieldType.Text)
    private String name;
    //type = FieldType.Keyword意思是精确匹配 不需要分词
    @Field(type = FieldType.Keyword)
    private String phone;
    @Field(type = FieldType.Text)
    private String remark;
}

@Document就是ES的注解,indexName带上表名.
@Id是import org.springframework.data.annotation.Id;
@Field(type=里面是一个枚举,有很多ES支持的格式,该格式会影响到存到ES之后的索引格式.
如果你提前创建索引则以你的为准,不提前创建索引则会根据对象里的@Field字段以及第一条数据去自动创建对应的索引
service层的代码

public interface UserService {
    public User findByName(String email);
    public User saveClient(User client);
    public User getClientById(String id);
    public void deleteClient(String id);
    public Iterable<User> getAllClients();
}

impl的代码

@Service
public class UserServiceImpl implements UserService{
    @Autowired
    private UserRepository userRepository;
    /**
     * 回参为单个对象,类似于mp的getOne,查出多个结果会报错
     * 回参为list 则可以查出多个结果
     */
    @Override
    public User findByName(String name) {
        return userRepository.findByName(name);
    }
    public User saveClient(User client) {
        return userRepository.save(client);
    }
    public User getClientById(String id) {
        return userRepository.findById(id).orElse(null);
    }
    public void deleteClient(String id) {
        userRepository.deleteById(id);
    }
    public Iterable<User> getAllClients() {
        return userRepository.findAll();
    }
}

Repository层,在我理解类似于mysql的mapper层

@Component
public interface UserRepository extends ElasticsearchRepository<User, String> {
    //这里会根据查询方法名称解析法自动去创建对应的方法
    //findBy...: 根据指定字段查找。例如 findByEmail 会查找 email 字段。
    //findFirstBy...: 查找符合条件的第一个记录。如果有多个结果会报错
    //countBy...: 统计符合条件的记录数量。
    //existsBy...: 判断是否存在符合条件的记录。
    //Spring Data Elasticsearch 还支持多种查询条件关键词,例如:
    //And: 组合条件查询。
    //Or: 或条件查询。
    //Between: 范围查询。
    //LessThan: 小于查询。
    //GreaterThan: 大于查询。
    //findByAgeGreaterThan: 查找 age 大于指定值的文档。
    //findByEmailLike: 查找 email 包含指定字符串的文档。

    /**
     * 例:这个方法会自动根据name去查询,必须有name字段否则会报错!
     */
    User findByName(String name);
    List<User> findByNameLike(String name);
    List<User> findByNameLikeAndPhoneLike(String name,String phone);
    List<User> findByNameLikeOrPhoneLike(String name,String phone);
}

这个Repository有点东西,他会根据方法名称自动去根据字段进行查询,不需要再写额外的类似于sql的东西,如果需要更复杂的查询可以手动构建query去查.
至此over~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2096369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GoLang:Go语言开发环境的配置

Go语言 Go语言开发环境的配置 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/a…

一款管理苹果设备的软件iMazing3中文破解安装激活教程

iMazing3官方版是一款管理苹果设备的软件&#xff0c;是一款帮助用户管理 IOS 手机的PC端应用程序&#xff0c;能力远超 iTunes 提供的终极 iOS 设备管理器。在iMazing官方版上与苹果设备连接后&#xff0c;可以轻松传输文件&#xff0c;浏览保存信息等&#xff0c;功能比Itune…

NDK编译c/c++文件成so库

目录 背景 Android NDK下载及配置 工程准备 创建Android.mk文件 创建Application.mk文件 编译项目 总结 背景 做算法开发&#xff0c;有时需要将算法编程成so库给其他人调用&#xff0c;很多时候都是在Android平台上使用&#xff0c;这样就会使用到Android NDK进行编译&…

高职院校大数据分析与可视化微服务架构实训室解决方案

一、前言 随着信息技术的飞速发展&#xff0c;大数据已成为推动社会进步与产业升级的关键力量。为了培养适应未来市场需求的高素质技术技能型人才&#xff0c;高职院校纷纷加大对大数据分析与可视化技术的教学投入。唯众&#xff0c;作为国内领先的职业教育解决方案提供商&…

论文速读|大型语言模型作为通用模式机器

项目地址&#xff1a;Large Language Models as General Pattern Machines 本研究探讨了大型语言模型&#xff08;LLMs&#xff09;作为通用模式机器的潜力&#xff0c;特别是在机器人技术领域。研究发现&#xff0c;LLMs 能够在没有额外训练的情况下&#xff0c;通过上下文学…

这才是HR想看到的应届生简历

速创猫今天给大家分享的是应届毕业生简历优化案例&#xff0c;希望对大家求职有帮助。速创猫总结了以下七条简历制作干货&#xff0c;希望对大家有帮助&#xff1a; 简洁明了&#xff1a;简历不是自传&#xff0c;不需要长篇大论。保持每份简历在一页纸内&#xff0c;突出关键…

Linux(CentOS)同步服务器时间之~chrony

Chrony 是一款开源的网络时间协议&#xff08;NTP&#xff09;客户端和服务端软件&#xff0c;旨在提供高精度的时间同步功能。相较于传统的 NTP 实现如 ntpd&#xff0c;Chrony 提供了一些改进和优势&#xff0c;包括更快的同步速度、低延迟、低CPU占用和低内存消耗。以下是 C…

c++ 154 引用

#include<iostream> using namespace std; //引用作为函数参数不需要初始化 void myswap(int *a,int *b) {int c 0;c *a;*a *b;*b c; } void main03() {int a 10;//引用语法 Type & name var;int& b a;b 100;//相当于把a改成100&#xff1b;printf("…

素材无水印素材网站在哪下载?高清的无水印素材资源库分享

找高清无水印素材&#xff1f;蛙学网、Pixabay 等资源库全揭秘&#xff01; 创意十足的你&#xff0c;是不是常为网上素材的烦人水印而头疼&#xff1f;总在寻找高清、干净、无水印的素材资源&#xff0c;却无从下手&#xff1f;别急&#xff0c;今天就为大家推荐几个超实用的…

c++应用网络编程之八SOCKET探究

一、socket 在目前主流的网络通信中&#xff0c;SOCKET编程其实就是网络编程的代名词。在前面反复提到socket&#xff0c;那么socket到底是什么呢&#xff1f;英文的愿意是“插座、槽”的意思。这里虽然不讲解传统的网络协议但不得不简单说明一下。 首先从宏观上看&#xff0c…

《数字信号处理》学习01-离散时间信号与序列的卷积和运算

目录 一&#xff0c;信号 二&#xff0c;序列的运算 1&#xff0c;卷积和 2&#xff0c;matlab实现 相关的电子书籍请到这篇文章所在的专栏&#xff0c;并通过夸克网盘链接下载。 很多简单的知识点我就不再赘述了&#xff0c;接下来就着重记录我学习过程中遇到的较难理…

class 3: vue.js 3 计算属性

计算属性是一种Options API&#xff0c;Options API是一种通过对象定义属性、方法等框架API的方式我们知道&#xff0c;在模板中可以直接通过插值语法显示一些data属性中的数据。但是在某些情况下&#xff0c;可能需要对数据进行一些转化操作之后再显示&#xff0c;或者需要将多…

PostgreSQL技术内幕5:PostgreSQL存储引擎从磁盘到内存的读取

文章目录 0.简介1.背景知识1.1 计算机存储结构1.2 数据库常见的磁盘和内存访问形式 2. 整体获取层次3.元组介绍4. Buffer管理4.1 Buffer组成4.2 修改后落盘4.3 获取buffer页的流程 5.存储管理器&#xff08;SMGR)6.磁盘管理器&#xff08;MD)7.虚拟文件管理器&#xff08;VFD)8…

【攻防世界新手入门】simple_js

小宁发现了一个网页&#xff0c;但却一直输不对密码。&#xff08;Flag格式为 Cyberpeace{xxxxxxxxx} &#xff09; 该题来自攻防世界新手练习区的 GFSJ0480。 访问靶场&#xff0c;输入任意密码&#xff0c;弹出错误窗口并加载空页面&#xff0c;使用检查器查看对应源代码&…

zdppy+vue3+onlyoffice文档管理系统实战 20240901 上课笔记 基于验证码登录功能基本完成

遗留的问题 1、点击切换验证码2、1分钟后自动切换验证码 点击切换验证码 实现步骤&#xff1a; 1、点击事件2、调用验证码接口3、更新验证码的值 点击事件 给图片添加点击事件&#xff1a; <img :src" data:image/png;base64, captchaImg"style"widt…

ffplay源码分析(五)包缓存队列和帧缓存队列

在音视频处理流程中&#xff0c;ffplay的有两种队列&#xff0c;包缓存队列&#xff08;Packet Buffer Queue&#xff09;和帧缓存队列&#xff08;Frame Buffer Queue&#xff09;。这两个队列的存在&#xff0c;是为了适应音视频数据处理过程中的多线程架构——包括收包线程、…

win11+vscode+Flutter 开发环境配置

https://blog.csdn.net/Oven_maizi/article/details/126804404 1 vscode插件 安装 安装红框中的两个 2 flutter sdk 安装 dart sdk 包含在flutter sdk 里面&#xff0c;路径&#xff1a;flutter_windows_3.24.1-stable\flutter\bin\cache\dart-sdk 方式1&#xff1a; 通过…

[001-07-001].Redis7缓存双写一致性之更新策略探讨

1、面试题&#xff1a; 1.只要使用缓存&#xff0c;就可能会涉及到redis缓存与数据库双存储双写&#xff0c;只要是双写&#xff0c;就存在数据一致性问题&#xff0c;那么是如何解决数据一致性问题的2.双写一致性&#xff0c;你先动缓存redis还是数据库MySQL&#xff0c;哪一个…

Python爬虫案例四:爬取某个博主的所有文章保存成PDF格式

引入&#xff08;将图片保存成PDF格式&#xff09;&#xff1a; 测试链接&#xff1a; https://zq.bookan.com.cn/?tdetail&id21088&ct1&is31042341&rid4658&#xff08;图书馆图片保存PDF&#xff09;&#xff0c;前提是装库&#xff0c;pip install img2pdf…

IDEA如何将某个文件夹内的多个module合并到一个大的module内

效果&#xff1a; 初始 方法 Ctrl shift Alt S 打开 project structure 导入module 将这个大文件夹作为新的module导入 效果图 完事儿