Elasticsearch 下载安装及使用总结

news2024/11/14 13:28:47

官网文档地址:Elasticsearch Guide [8.13]

官网下载地址:Download Elasticsearch

1. 下载安装

1、下载对应系统的版本

这里下载的 Elasticsearch 版本为 8.13.2,Elasticsearch 依赖 Java,因此要先在服务器上安装 JDK,不过高版本的 Elasticsearch 已经内置了 JDK

2、上传到服务器上,解压

tar -xzf elasticsearch-8.13.2-linux-x86_64.tar.gz

3、创建新用户

Elasticsearch 不能在 root 用户下启动,因此需要创建一个新用户或者使用其他非 root 用户来启动,将 Elasticsearch 执行目录的所属更改为该用户

groupadd es && useradd es -g es
chown -R es:es elasticsearch-8.13.2

4、修改内存大小

默认分配的内存大小为 4G,服务器内存不足可以手动调整分配内存大小,修改 /config/jvm.options 文件

5、修改 /config/elasticsearch.yml 配置文件

  • cluster.name:集群名称,集群下所有节点保持一致
  • node.name:节点名称
  • path.data:数据目录,一般可默认,在执行目录下
  • path.logs:日志目录,一般可默认,在执行目录下
  • network.host:服务器地址,有几个特殊的预设值,具体可见 Networking | Elasticsearch Guide [8.13],默认为 192.168.0.1
  • http.port:端口,默认 9200
  • discovery.seed_hosts:服务发现种子主机,用于配置集群中其他节点
  • cluster.initial_master_nodes:初始主节点

6、修改最大内存限制,修改 /etc/sysctl.conf 文件,这里的值为 Elasticsearch 要求的最小值

vm.max_map_count = 262144

加载配置

sysctl -p

7、使用非 root 用户启动 Elasticsearch,-d 表示后台启动

./bin/elasticsearch -d

一般默认会开启安全配置,会自动生成证书文件并在配置文件里自动添加相关配置

8、测试,访问 https://ip:9200,输入用户名密码,在启动时会输出到控制台或者去日志文件查看

Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
  r3m5YCt8V=OyGourmPYv

或者直接执行 bin/elasticsearch-reset-password -u elastic 生成一个新密码,获取到如下信息即表示成功

上面默认开启了 ssl,也就是 https 访问,在使用 Java 连接时默认会去验证证书相关,可以将 xpack.security.http.ssl.enable 设置为 false,使用 http 访问

2. 使用

需要带上用户名密码

1、直接查看服务状态

GET https://ip:9200

2、测试分词

POST https://ip:9200/_analyze
  • tokenizer:选择使用的分词器
  • char_filter:过滤
  • text:需要分词的文本

内置分词器

分词器描述分词对象结果
standard标准分析器是默认的分析器,如果没有指定,则使用该分析器。它提供了基于文法的标记化(基于 Unicode 文本分割算法,如 Unicode 标准附件 # 29 所规定) ,并且对大多数语言都有效。The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog’s, bone ]
simple简单分析器将文本分解为任何非字母字符的标记,如数字、空格、连字符和撇号、放弃非字母字符,并将大写字母更改为小写字母。The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]
whitespace空格分析器在遇到空白字符时将文本分解为术语The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.[ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog’s, bone. ]
stop停止分析器与简单分析器相同,但增加了删除停止字的支持。默认使用的是_english_ 停止词。The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.[ quick, brown, foxes, jumped, over, lazy, dog, s, bone ]
keyword不分词,把整个字段当做一个整体返回The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.[The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.]
pattern模式分析器使用正则表达式将文本拆分为术语。正则表达式应该匹配令牌分隔符,而不是令牌本身。正则表达式默认为w+ (或所有非单词字符)。The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]

扩展,中文分词器

分词器描述分词对象结果
ik_smartik 分词器中的简单分词器,支持自定义字典,远程字典学如逆水行舟,不进则退[学如逆水行舟,不进则退]
ik_max_wordik_分词器的全量分词器,支持自定义字典,远程字典学如逆水行舟,不进则退[学如逆水行舟,学如逆水,逆水行舟,逆水,行舟,不进则退,不进,则,退]

下载地址:Releases · infinilabs/analysis-ik (github.com)

上传到服务器上 /plugins/ik 目录下,解压

unzip elasticsearch-analysis-ik-8.12.2.zip

注意要配置 ik 分词器的 Elasticsearch 版本,修改 /plugins/ik/plugin-descriptor.properties 文件,然后重启服务

1.2.1 索引

相当于数据库表

1、创建索引,indexs 为对应的索引名称

POST https://ip:9200/indexs

重复创建的话会报错

创建索引时可以指定 mapping,给字段设置类型和分词器等

2、查询索引,indexs 为对应的索引名称

GET https://ip:9200/indexs

这里没有 mapping,在文档写入 Elasticsearch 时,会根据文档字段自动识别类型,这种机制称之为动态映射

3、删除索引,indexs 为对应的索引名称

DELETE https://ip:9200/indexs

1.2.2 文档

1、添加文档,indexs 为对应的索引名称

POST https://ip:9200/indexs/_doc         # 使用系统生成id
POST https://ip:9200/indexs/_create/1    # 使用指定id
POST https://ip:9200/indexs/_doc/1       # 使用指定id,不存在创建,存在更新

再查看索引可以发现已经有了 mapping

2、查询文档,indexs 为对应的索引名称

GET https://ip:9200/indexs/_doc/1  # 查询单个文档
GET http://ip:9200/indexs/_search  # 查询全部文档

条件查询

GET http://ip:9200/indexs/_search?q=content:test   # q=查询属性名:查询属性值

3、删除文档,indexs 为对应的索引名称

DELETE http://ip:9200/indexs/_doc/1

4、修改文档,indexs 为对应的索引名称

全量更新,相当于删除了原来的文档然后重新添加

PUT http://ip:9200/indexs/_doc/1

部分更新,不对原始文档进行更新,而是对原始文档对象中的 doc 属性中的指定属性更新

POST http://ip:9200/indexs/_update/1

3. 整合 Java

有以下几种通过 Java 操作 Elasticsearch 的方式

  • ElasticsearchRepository:类似 MyBatis-Plus 的操作
  • ElasticsearchTemplate/ElasticSearchRestTemplate:类似 Redistemplate 的操作
  • RestHighLevelClient:Elasticsearch 官方提供的 Java 客户端,使用 DSL 的格式来操作,新版本已被弃用
  • Elasticsearch Java API Client:替代 RestHighLevelClient

3.1 ElasticsearchRepository

3.1.1 引入依赖

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

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
</dependencies>

3.1.2 配置文件

配置 Elasticsearch 的服务器地址以及用户名密码

spring:
  elasticsearch:
    uris: http://127.0.0.1:9200
    username: elastic
    password: elastic

3.1.3 文档实体类

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Data
@Document(indexName = "articles")
public class Article {

    @Id
    private String id;

    private String title;

    private String content;
}
  • @Document(indexName = "articles"):指定文档的索引名称
  • @Id:指定该字段作为文档 ID

3.1.4 数据访问层

继承 ElasticsearchRepository,它提供了一套标准的方法命名规范,符合规范的方法名在输入的时候就会有提示,比如 findByXxx(T xxx),会自动为符合命名规范的方法生成对应的 DSL 语句

import fable.entity.Article;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface ArticleRepository extends ElasticsearchRepository<Article, String> {

    Article findByContent(String content);
}

3.1.5 Service

import fable.repository.ArticleRepository;
import fable.entity.Article;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ArticleService {

    private final ArticleRepository articleRepository;

    @Autowired
    public ArticleService(ArticleRepository articleRepository) {
        this.articleRepository = articleRepository;
    }

    public Article findByContent() {
        return articleRepository.findByContent("test");
    }

    public void save() {
        Article article = new Article();
        article.setId("test");
        article.setTitle("test");
        article.setContent("test save");
        articleRepository.save(article);
    }
}

3.1.6 Controller

import fable.entity.Article;
import fable.service.ArticleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ArticleController {

    private final ArticleService articleService;

    @Autowired
    public ArticleController(ArticleService articleService) {
        this.articleService = articleService;
    }

    @GetMapping("/findByContent")
    public Article findByContent() {
        return articleService.findByContent();
    }

    @GetMapping("/save")
    public void save() {
        articleService.save();
    }
}

3.1.7 启动类

添加 @EnableElasticsearchRepositories 注解,配置包扫描

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;

@SpringBootApplication
@EnableElasticsearchRepositories(basePackages = "fable.repository")
public class FableApplication {
    public static void main(String[] args) {
        SpringApplication.run(FableApplication.class, args);
    }
}

3.1.8 测试

访问 /save 接口,可以看到文档信息已经添加了进来

访问 /findByContent 接口,可以看到对应的文档信息

3.2 ElasticsearchTemplate/ElasticSearchRestTemplate

将 ElasticsearchTemplate/ElasticSearchRestTemplate 注入进来然后使用对应的方法即可,可自行了解

@Service
public class ArticleService {

    private final ArticleRepository articleRepository;
    private final ElasticsearchTemplate elasticsearchTemplate;

    @Autowired
    public ArticleService(ArticleRepository articleRepository, ElasticsearchTemplate elasticsearchTemplate) {
        this.articleRepository = articleRepository;
        this.elasticsearchTemplate = elasticsearchTemplate;
    }
}

3.3 RestHighLevelClient

3.3.1 引入依赖

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

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
        </dependency>
</dependencies>

3.3.2 Controller

import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

@RestController
public class ArticleController {

    @GetMapping("/get")
    public GetResponse get() throws IOException {
        BasicCredentialsProvider provider = new BasicCredentialsProvider();
        provider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "elastic"));

        RestClientBuilder builder = RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
                .setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder.setDefaultCredentialsProvider(provider));
        RestHighLevelClient client = new RestHighLevelClient(builder);

        GetRequest getRequest = new GetRequest("articles", "test");
        return client.get(getRequest, RequestOptions.DEFAULT);
    }
}

3.3.3 测试

访问 /get 接口,可以看到对应的文档信息

3.4 Elasticsearch Java API Client

3.4.1 引入依赖

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

        <dependency>
            <groupId>co.elastic.clients</groupId>
            <artifactId>elasticsearch-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
</dependencies>

3.4.2 文档实体类

import lombok.Data;

@Data
public class Article {

    private String id;

    private String title;

    private String content;
}

3.4.3 Controller

需要注意这里的文档实体类必须包含索引的所有字段,否则会报错无法解析

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch.core.GetResponse;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import fable.entity.Article;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RestClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

@RestController
public class ArticleController {

    @GetMapping("/get")
    public Article get() throws IOException {
        BasicCredentialsProvider provider = new BasicCredentialsProvider();
        provider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "UnF8lyv82vJarD=iAbcZ"));

        RestClient restClient = RestClient.builder(new HttpHost("124.222.118.90", 9200, "http"))
                .setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder.setDefaultCredentialsProvider(provider))
                .build();
        ElasticsearchTransport transport = new RestClientTransport(
                restClient, new JacksonJsonpMapper()
        );
        ElasticsearchClient elasticsearchClient = new ElasticsearchClient(transport);

        GetResponse<Article> response = elasticsearchClient.get(builder -> builder.index("articles").id("test"), Article.class);
        System.out.println(response);
        return response.source();
    }
}

3.4.4 测试

访问 /get 接口,可以看到文档信息如下

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

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

相关文章

SOLIDWORKS® 2025 新增功能 - SIMULATION

SOLIDWORKS Simulation 1常规弹簧连接 • 通过定义仅轴向、各向同性或正交各向异性弹簧&#xff0c; 在曲面之间轻松创建自定义弹簧连接。 • 通过添加自定义合规性提高仿真性能和精度。 优点 利用新的弹簧连接功能&#xff0c; 实现更简单、更逼真的仿真 设置。 2增强了…

Unity 百度AI实现无绿幕拍照抠像功能(详解版)

目录 一、前言 1.抠像效果 2.去哪找百度ai抠图 3.基础流程跳过 二、获取AccessToken 1.什么是Token 2.为什么要获取Token 3.如何获取token 4.解析json 5.完整代码 三、抠像 1.准备地址 2.建立链接&#xff0c;和基本配置 3.图片格式转换 4.开始上传 5.获取回复…

SpringBoot 整合docker,执行容器服务

我使用以下文章的镜像作为演示镜像,读者有自己的镜像可以使用自己的 TencentARC/GFPGAN人脸恢复Ubuntu-22.04搭建(附带Docker镜像)_tencentarc gfpgan-CSDN博客 1. 封装springboot 启动docker容器的方法 public String runDockerCommand(String[] command) {StringBuilder res…

代码随想录Day 49|leetcode题目:42.接雨水、84.柱状图中最大矩形

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 题目题目一&#xff1a;42. 接雨水解题思路&#xff1a;暴力解法双指针优化思路&#xff1a;单调栈解法单调栈处理逻辑 题目二&#xff1a; 84.柱状图中最大的矩形解题思路&#xff1a;暴力解法双…

闯关leetcode——35. Search Insert Position

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/search-insert-position/description/ 内容 Given a sorted array of distinct integers and a target value, return the index if the target is found. If not, return the index where it wou…

【数据结构】排序算法---冒泡排序

文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaCGo 结语 1. 定义 冒泡排序&#xff08;英语&#xff1a;Bubble sort&#xff09;是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的…

svn回退到以前历史版本修改并上传

svn回退到以前版本&#xff0c;并在以前版本上修改代码后&#xff0c;上传到svn库当中&#xff0c;如下步骤&#xff1a; 3、 以回退到版本号4为例&#xff1a;选中版本号4&#xff0c;右键->Revert to this version,在出现的对话框中 点击yes&#xff01; 4、 5、

【ARM】Trustzone和安全架构

Trustzone的基本概念&背景和历史 什么是Trustzone&#xff1f; 什么是TEE&#xff1f; Trustzone是一个技术&#xff0c;是一个技术的设计&#xff0c;一个安全架构&#xff0c;既不是软件也不是硬件。 TEE (Trusted Execution Environment) 可信执行环境。就是依托Trust…

Java项目——苍穹外卖(二)

Redis 简介 Redis是一个基于内存的key-value结构数据库 基于内存存储&#xff0c;读写性能高适合存储热点数据&#xff08;热点商品、资讯、新闻&#xff09;企业应用广泛 基础操作 启动 在redis安装目录中打开cmd&#xff0c;输入如上图指令即可启动&#xff0c;按下crtl…

linux入门到实操-6 Linux服务管理、系统运行级别、配置服务开机启动和关闭防火墙、关机重启

教程来源&#xff1a;B站视频BV1WY4y1H7d3 3天搞定Linux&#xff0c;1天搞定Shell&#xff0c;清华学神带你通关_哔哩哔哩_bilibili 整理汇总的课程内容笔记和课程资料&#xff08;包含课程同版本linux系统文件等内容&#xff09;&#xff0c;供大家学习交流下载&#xff1a;…

html详细知识

1-标题标签、水平线、字体标签 <!--1.标题标签1&#xff09;格式&#xff1a;<hn></hn> n的范围是1-6&#xff0c;依次递减2&#xff09;标题标签特点&#xff1a;a:单独占一行b:自动加粗2.水平线1&#xff09;格式&#xff1a;<hr/>2)属性&#xff1a;…

soc及其相关概念

用户无法直接操作内存&#xff0c;只能让内存映射到用户空间然后操作 1. 内存映射&#xff08;Memory-Mapped Files&#xff09;内存映射文件是一种方法&#xff0c;它允许一个或多个进程将一个文件或者一个匿名区域映射到它们各自的虚拟地址空间中。当文件被映射到内存后&…

rsync 远程同步及实时同步部署

一、rsync 远程同步 1.1 rsync简介 Rsync&#xff08;Remote Sync&#xff0c;远程同步&#xff09;是一个开源的快速备份工具&#xff0c;适用于异地备份、镜像服务器等应用。它的主要功能特性包括&#xff1a; 数据镜像同步&#xff1a;在不同主机之间同步整个目录树。增量…

基于STM32的无人小车自主避障系统设计

文章目录 前言资料获取设计介绍功能介绍设计程序具体实现截图参考文献设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设…

设计模式 享元模式(Flyweight Pattern)

享元模式 简绍 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它的目的是通过共享技术来有效地支持大量细粒度的对象。享元模式可以极大地减少内存的使用&#xff0c;从而提高程序的性能。它特别适用于需要创建大量相似对象的场景&#…

鸿蒙 ArkUI组件三

ArkUI组件&#xff08;续&#xff09; QRCode组件 用于显示单个二维码的组件。 说明 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。二维码组件的像素点数量与内容有关&#xff0c;当组件尺寸过小时&#xff0c;可能…

二叉树的层序遍历(含十道leetcode相关题目)

文章目录 二叉树层序遍历模板102. 二叉树的层序遍历 二叉树层序遍历模板 我们之前讲过了关于二叉树的深度优先遍历的文章&#xff1a;前中后序遍历的递归法和迭代法。 接下来我们再来介绍二叉树的另一种遍历方式&#xff1a;层序遍历。 层序遍历一个二叉树。就是从左到右一层…

vue2使用npm引入依赖(例如axios),报错Module parse failed: Unexpected token解决方案

报错情况 Module parse failed: Unexpected token (5:2) You may need an appropriate loader to handle this file type. 原因 因为我们npm install时默认都是下载最新版本&#xff0c;然后个别依赖的版本太新&#xff0c;vue2他受不起这个福分。 解决方法 先去package.js…

SD-WAN如何保障企业数据安全?

SD-WAN&#xff08;软件定义广域网&#xff09;作为一种现代化网络解决方案&#xff0c;不仅能够优化和管理广域网的连接&#xff0c;还集成了一系列安全功能&#xff0c;帮助企业保护其数据安全。以下将详细介绍SD-WAN如何有效保障企业数据安全的机制。 在采用SD-WAN技术之前&…

[论文笔记]MRRNET

这是一篇河大的论文 感觉跟SANET很像 摘要 摘要&#xff1a;随着物联网&#xff08;IoT&#xff09;的大规模部署&#xff0c;道路场景中实时感知和环境理解的需求变得越来越迫切。 同时&#xff0c;语义分割作为像素级场景解析得到了广泛的研究。 然而&#xff0c;资源有限…