Elasticsearch 下载安装及使用总结

官网文档地址: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:9200username: elasticpassword: 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 {@Idprivate 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;@Autowiredpublic 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;@Autowiredpublic 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;@Autowiredpublic 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.xdnf.cn/news/144002.html

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

相关文章

ARM 工业边缘计算机与 C# 编程的完美融合

在工业领域&#xff0c;随着智能化和数字化的不断推进&#xff0c;ARM 工业边缘计算机凭借其出色的性能和低功耗等优势&#xff0c;逐渐成为众多应用场景的重要支撑。而 C# 编程语言的强大功能和广泛适用性&#xff0c;使其在与 ARM 工业边缘计算机的结合中展现出了巨大的潜力。…

Spring考点总结

01.Spring框架的基本理解 关键字:核心思想IOC\AOP\作用(解耦、简化)&#xff0c;简单描述框架组成 Spring框架是一款轻量级的开发框架&#xff0c;核心思想是IOC&#xff08;控制反转&#xff09;和AOP&#xff08;面向切面编程&#xff09;&#xff0c; 为Java应用程序开发…

武器检测系统源码分享

武器检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

Python基础(八)——MySql数据库

一.数据库 【库——>表——>数据】 借助数据库对数据进行组织存储&#xff0c;借助SQL语言对数据库、数据进行操作管理 Mysql数据库 下载&#xff1a;https://www.mysql.com/ 查看是否安装配置成功&#xff1a; 安装DBeaver用于Mysql数据库图形化 安装&#xff1a;…

分布式光伏充换电站相关建议

了推动光伏发电和电动汽车的发展&#xff0c;在土地资源日益紧缺的城市区域&#xff0c;需合理共享现有土地资源&#xff0c;实现资源大化利用。城市变电站由于其合理的分布密度以及便利的接入条件&#xff0c;对于建设分布式光伏发电、充换电站具有很好的优势。可利用变电站旧…

统信服务器操作系统【1050e版】安装手册

统信服务器操作系统1050e版本的安装 文章目录 功能概述一、准备环境二、安装方式介绍安装步骤步骤一:制作启动盘步骤二:系统的安装步骤三:安装引导界面步骤四:图形化界面安装步骤五:选择安装引导程序语言步骤六:进入安装界面步骤七:设置键盘步骤八:设置系统语言步骤九:…

关于wordPress中的用户登录注册等问题

前言 大家在做类似的功能的时候&#xff0c;有没有相关的疑问。那就是我都已经选择好了相应的主题和模版&#xff0c;但是为什么都没有用户注册和用户登录的页面存在呢&#xff1f; WordPress默认情况下不提供用户注册和登录功能的原因是它最初是作为一个博客平台开发的&…

net await 、 Task、 Async 不用async异步方法

详细资料 lamda 变成异步方法 &#xff0c;只要在前面 加 async 修饰 即可 》》await 修饰的 &#xff0c;await 所在的方法&#xff0c;必须修饰 async ThreadPool.QueueUserWorkItem( async (obj)>{while(true){await File.WriteAllTextAsync("路径","…

【数据仓库】数据仓库层次化设计

一、基本概念 **1. RDS&#xff08;RAW DATA STORES&#xff0c;原始数据存储&#xff09;** RDS作为原始数据存储层&#xff0c;用于存储来自各种源头的未经处理的数据。这些数据可能来自企业内部的业务系统、外部数据源或各种传感器等。RDS确保原始数据的完整性和可访问性&…

Linux进程间通信——探索共享内存—— 剖析原理, 学习接口应用

前言&#xff1a;本节内容主要讲解进程间通信的&#xff0c; systemV版本下的共享内存。 共享内存&#xff0c;顾名思义&#xff0c; 其实就是一块内存&#xff0c; 它不同于管道是一个文件。 所以它的传输速度是很快的。 因为管道是文件&#xff0c;有缓冲区&#xff0c; 而共…

《深入理解 Java 线程池:高效管理线程的利器》

线程池 1. 什么是线程池&#xff1f; ​ 线程池内部维护了若干个线程&#xff0c;没有任务的时候&#xff0c;这些线程都处于等待空闲状态。如果有新的线程任务&#xff0c;就分配一个空闲线程执行。如果所有线程都处于忙碌状态&#xff0c;线程池会创建一个新线程进行处理或…

不得不说 Sam‘s Club 的数字化做得挺好

因正好有东西要退货就顺便看了下订单如何退货。 但发现 Sam’s Club 的所有交易都能够从后台查到&#xff0c;同时还提供了个 CSV 文件的下载。 打开下载文件就能看到全部的数字化的交易记录。 就拿加油这个事情来说&#xff0c;能够非常清楚这一年在 Sam’s Club 加油多少加…

【无人机设计与控制】基于粒子群算法的三维无人机航迹规划

摘要 本文研究了基于粒子群算法&#xff08;PSO&#xff09;的三维无人机航迹规划问题。通过粒子群优化算法&#xff0c;无人机能够在复杂三维环境中进行路径规划&#xff0c;以避开障碍并实现最优路径飞行。该方法有效结合了无人机的飞行动力学特性与环境约束&#xff0c;能够…

【GlobalMapper精品教程】087:基于DEM的山脊线提取

文章目录 一、山脊线介绍二、加载实验数据三、山脊线提取一、山脊线介绍 山脊线是指沿山脊走向布设的路线,通常也是山脊最高点的连线,它在地形表示和测绘科学技术中具有重要地位。 山脊线是大体上沿分水岭布设的路线,也被称为山脊的最高棱线。在等高线地图上,山脊线表现为…

计算机网络(七) —— https协议与网络安全证书

目录 一&#xff0c;关于https 二&#xff0c;关于加密 2.1 明文&#xff0c;密钥 2.2 对称和非对称加密 2.3 数据摘要&#xff0c;数据指纹&#xff0c;数字签名 三&#xff0c;https过程过程探究 四&#xff0c;证书 4.1 CA认证 4.2 证书大致内容和申请流程 4.3 签…

fastadmin 定义通用搜索默认值,实现datetimerange默认搜索今日的列表数据,列表查询慢解决方案

文章目录 前言实例完结 前言 fastadmin默认会展示全部列表数据&#xff0c;随着数据越来越多&#xff0c;一次性查询出全部的数据会导致列表查询越来越慢 sql优化可以查看我这篇文章&#xff1a;分享最全的sql优化解决方案 除了基本的sql优化查询速度外&#xff0c;我们还可…

网络爬虫到底难在哪里?

如果你是自己做爬虫脚本开发&#xff0c;那确实难&#xff0c;因为你需要掌握Python、HTML、JS、xpath、database等技术&#xff0c;而且还要处理反爬、动态网页、逆向等情况&#xff0c;不然压根不知道怎么去写代码&#xff0c;这些技术和经验储备起码得要个三五年。 比如这几…

Cursor免费 GPT-4 IDE 工具的保姆级使用教程

Cursor免费 GPT-4 IDE 工具的保姆级使用教程 简介 Cursor 是一款基于人工智能技术的代码生成工具。 它利用先进的自然语言处理和深度学习算法&#xff0c;可根据用户的输入或需求&#xff0c;自动生成高质量代码。 不管是初学者&#xff0c;还是资深开发者&#xff0c;Curs…

低代码技术:简化应用开发的未来

近年来&#xff0c;低代码技术作为一种新兴的应用开发方法&#xff0c;受到了广泛关注。低代码平台通过图形化的界面和预设的模块&#xff0c;使得用户能够以较少的代码编写工作创建应用程序。这一技术的发展&#xff0c;标志着软件开发过程中的一个重要变革。 低代码技术的基…

Koa (下一代web框架) 【Node.js进阶】

koa (中文网) 是基于 Node.js 平台的下一代 web 开发框架&#xff0c;致力于成为应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石&#xff1b; 利用 async 函数 丢弃回调函数&#xff0c;并增强错误处理&#xff0c;koa 没有任何预置的中间件&#xff0c;可快速…