当前位置: 首页 > article >正文

从零启动 Elasticsearch

elastic 有弹力的

ElaticSearch (ES)是一个基于 Lucene 的分布式全文检索引擎。可以做到近乎实时地存储、检索数据,并且本身具有良好的扩展性,可以扩展到上百台服务器,处理PB级别(1 Petabyte = 1024TB)的数据。

ES 常用于日志分析、全文搜索、安全智能、业务分析和运维智能等场景。

文章目录

  • 使用
  • 原理
      • 倒排索引
      • 分词
      • Lucene
      • Elasticsearch
      • Elasticsearch 分布式原理
      • ELK Stack

使用

可用 docker 部署 elasticsearch 程序,默认有安全检测不好连接,生产环境可以见下面命令绕过连接启动:

在这里插入图片描述

访问测试:
在这里插入图片描述

也可以用 curl http://localhost:9200 来测试

相关docker命令:

-- 关闭 Elasticsearch 安全认证(仅测试环境) (没有应该会下载,注意版本)
docker run -d -p 9200:9200 -p 9300:9300 `-e "discovery.type=single-node" `-e "xpack.security.enabled=false" `--name elasticsearch docker.elastic.co/elasticsearch/elasticsearch:8.12.0-- 之后直接 start 启动即可:
docker start elasticsearch 
docker stop elasticsearch
docker rm elasticsearchdocker ps -a  # 查看所有容器(包括停止的)
docker logs elasticsearch

写java时:

SpringbootFramework 管理的 elasticsearch 只需配置即可使用:

  • ElasticsearchRepository已经提供了基础的 CRUD 操作
    这里交互方法也只需声明继承的接口:
  • 自定义方法则能通过命名规则来扩展更多查询功能——也不需要实现,Spring Data 框架能够依据方法名称自动生成对应的实现。
package org.example.searchservice.repository;import org.example.common.dto.Question;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;import java.util.List;@Repository
public interface QuestionEsRepository extends ElasticsearchRepository<Question, String> {// 标题或内容模糊搜索(自动解析成 bool should)List<Question> findByTitleContainingOrContentContaining(String title, String content);// 根据标签精确匹配(List<String> 是 keyword 类型)List<Question> findByTagsIn(List<String> tags);
}//你不需要手动实现插入方法,ElasticsearchRepository 已经帮你准备好了常用的 CRUD 方法,包括插入。
//        🧩 一、插入数据的方式
//ElasticsearchRepository 继承了 CrudRepository,所以它自动拥有以下方法:
//
//方法	作用
//save(T entity)	插入或更新单条数据
//saveAll(Iterable<T> entities)	批量插入或更新
//findById(ID id)	根据 ID 查询
//deleteById(ID id)	根据 ID 删除
//findAll()	查询所有
//count()	统计数量

检索:(需先把要检索的插入ES,如上的save方法)

在这里插入图片描述

原理

(图画故事参考 https://zhuanlan.zhihu.com/p/589967518)

倒排索引

像 map 是 kv 的,通过索引 key 获得对应的 value

现在我们为 value 建立索引,来找 value,即为倒排索引:

在这里插入图片描述

不过这样数据量确实会更多,我们索引原先的 key 即可:

在这里插入图片描述

现在新建立的反向索引也可一次索引多个 key!

在这里插入图片描述

分词

其实谷歌,百度这些搜素引擎原理就是建立倒排索引。

在这里插入图片描述

搜索引擎对文章分词后,才根据关键字建立倒排索引的。

在这里插入图片描述

Lucene

Lucene库可以方便的建立倒排索引,不过不懂原理的人很难调用,所以后来有人封装其为 Elasticsearch。

Lucene 是一个全文检索引擎工具包 。它是一款 纯Java的全文检索引擎工具包,提供了完整的查询引擎和索引引擎,主要用于实现全文搜索功能。

Lucene 主要是基于倒排索引的文本检索,通过创建并建立索引器(IndexWriter)来读取需要建立全文索引的文本内容 —— 即读入一堆文本文件并将其转换为易于搜索的数据结构

Elasticsearch

ElasticSearch 是基于 Lucene 做了封装和增强,通过简单的 RESTful API 来隐藏 Lucene 的复杂性。

它还考虑了海量数据,实现了分布式,是一个可以存储海量数据的分布式搜索引擎。

  • 索引:elasticsearch 存放数据的地方。
  • 类型:定义数据结构
  • 文档:数据

在这里插入图片描述
要存一系列个体,就先为这种个体创建索引,索引内定义类型(一个带各种属性的结构体)

在这里插入图片描述
keyword 类型不会分词而直接建立反向索引,text会。

Elasticsearch 分布式原理

  • hdfs (Hadoop Distributed File System) Hadoop分布式文件系统
    是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统

elasticsearch 也会对数据进行切分时每一个分片会保存多个副本 。(其原因和 HDFS 是一样的,都是为了保证分布式环境下的高可用 —— 主从架构,redis也是子结点分担读请求)

在这里插入图片描述
节点间会通过自己的一些规则选取集群的 Master
Master 会负责集群状态信息的改变,并同步给其他节点。

在这里插入图片描述
注意,只有建立索引和类型需要经过 Master,数据的写入有一个简单的 Routing 规则,可以 Route 到集群中的任意节点,所以数据写入压力是分散在整个集群的。

ELK Stack

ES与Logstash、Beats和Kibana等工具协同工作,共同提供数据收集、存储、分析、可视化和监控等功能,组成 ELK 。

  • Logstash:数据收集与处理 管道工具(采集日志数据、过滤清洗)
  • Beats:轻量级的数据采集器(日志或指标)
  • Kibana:可视化工具

在这里插入图片描述

工作流程:[ 日志 / 数据 ]↓Beats(轻量上报器)↓Logstash(采集 + 清洗)↓
Elasticsearch(存储 + 查询)↓Kibana(可视化)

分析日志的用处可大了,你想,假如一个分布式系统有 1000 台机器,系统出现故障时,我要看下日志,还得一台一台登录上去查看,是不是非常麻烦?

但是如果日志接入了 ELK 系统就不一样。比如系统运行过程中,突然出现了异常,在日志中就能及时反馈,日志进入 ELK 系统中,我们直接在 Kibana 就能看到日志情况。如果再接入一些实时计算模块,还能做实时报警功能。

相关文章:

从零启动 Elasticsearch

elastic 有弹力的 ElaticSearch &#xff08;ES&#xff09;是一个基于 Lucene 的分布式全文检索引擎。可以做到近乎实时地存储、检索数据&#xff0c;并且本身具有良好的扩展性&#xff0c;可以扩展到上百台服务器&#xff0c;处理PB级别&#xff08;1 Petabyte 1024TB&…...

比较两个用于手写体识别的卷积神经网络(CNN)模型

要比较两个用于手写体识别的卷积神经网络(CNN)模型,可以从以下 ‌6个核心维度‌ 进行系统性评估,并直接给出对比结论: ‌一、基础性能对比(核心指标)‌ ‌准确率‌ 直接比较两个模型在 ‌相同测试集‌ 上的分类准确率(如MNIST测试集的错误率是否低于0.5%)若准确率接近…...

Linux利用多线程和线程同步实现一个简单的聊天服务器

1. 概述 本文实现一个基于TCP/IP的简单多人聊天室程序。它包含一个服务器端和一个客户端&#xff1a;服务器能够接收多个客户端的连接&#xff0c;并将任何一个客户端发来的消息广播给所有其他连接的客户端&#xff1b;客户端则可以连接到服务器&#xff0c;发送消息并接收来自…...

【计网】作业5

待补充 212.56.132.0/24 212.56.1000 0100.0 212.56.133.0/24 212.56.1000 0101.0 212.56.134.0/24 212.56.1000 0110.0 212.56.135.0/24 212.56.1000 0111.0 最小的212.56.1000 0100.0 四个&#xff0c;2^2 212.56.132.0/22 1111 1111.1111 1111.1111 1100.0000 0000 255.255.…...

15、Python布尔逻辑全解析:运算符优先级、短路特性与实战避坑指南

适合人群&#xff1a;零基础自学者 | 编程小白快速入门 阅读时长&#xff1a;约6分钟 文章目录 一、问题&#xff1a;Python布尔值的底层原理?1、例子1&#xff1a;电路开关模型解析布尔本质2、例子2&#xff1a;特殊的布尔类型值为False3、答案&#xff1a;&#xff08;1&…...

Nginx基础知识

Nginx是什么&#xff1f; Nginx 是一款高性能的 Web 服务器、反向代理服务器和负载均衡器&#xff0c;以其高并发处理能力和低内存消耗著称。以下是 Nginx 的基础知识和常见配置示例&#xff1a; 1. 核心概念 • 配置文件位置&#xff1a;通常为 /etc/nginx/nginx.conf 或 /us…...

Vue-监听属性

监听属性 简单监听 点击切换名字&#xff0c;来回变更Tom/Jerry&#xff0c;输出 你好&#xff0c;Tom/Jerry 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>监听属性</title><!-- …...

python fastapi + react, 写一个图片 app

1. 起因&#xff0c; 目的: 上厕所的时候&#xff0c;想用手机查看电脑上的图片&#xff0c;但是又不想点击下载。此app 应运而生。 2. 先看效果 单击图片&#xff0c;能放大图片 3. 过程: 过程很枯燥。有时候&#xff0c; 有一堆新的想法。 但是做起来太麻烦&#xff0c;…...

nginx集成防火墙ngx_waf的docker版

由于公网的环境越来与严峻&#xff0c;所以想找一个nginx带防火墙的版本 调研过openresty&#xff0c;大部分集成redis了&#xff0c;感觉还是太重了&#xff0c;有一个不那么重的https://github.com/unixhot/waf 但是维护没有那么勤&#xff0c;最后维护是5年前&#xff0c;倒…...

vscode c++编译onnxruntime cuda 出现的问题

问题描述 将onnx的dll文件和lib文件copy到可执行文件所在文件夹下后&#xff0c;现象&#xff1a; 双击可执行文件能正常运行 在vscode中点击cmake插件的运行按钮出现报错为 c [ONNXRuntimeError] : 1 : FAIL : LoadLibrary failed with error 126 “” when trying to load尝试…...

sts下载安装

windows下STS&#xff08;Spring Tools Suite&#xff0c;自带spring插件的eclipse&#xff09;的下载与安装_sts下载-CSDN博客Spring Boot安装与配置教程_spring boot安装配置-CSDN博客...

中服云生产线自动化智能化调度生产系统:打造智能制造新标杆

前言 在当今制造业竞争日益激烈的背景下&#xff0c;实现生产线的自动化与智能化已成为企业提升竞争力的关键。作为国内技术领先的工业物联网平台、数字孪生、自动控制技术厂商&#xff0c;中服云凭借其深厚的技术积累和创新能力&#xff0c;打造了一套完整的生产线自动化智能…...

next.js实现项目搭建

一、创建 Next.js 项目的步骤 1、安装 npx create-next-applatest # 或 yarn create next-app # 或 pnpm create next-app 按照交互式提示配置你的项目&#xff1a; 输入项目名称 选择是否使用 TypeScript 选择是否启用 ESLint 选择是否启用 Tailwind CSS 选择是否使用 s…...

Redisson 四大核心机制实现原理详解

一、可重入锁&#xff08;Reentrant Lock&#xff09; 可重入锁是什么&#xff1f; 通俗定义 可重入锁类似于一把“智能锁”&#xff0c;它能识别当前的锁持有者是否是当前线程&#xff1a; 如果是&#xff0c;则允许线程重复获取锁&#xff08;重入&#xff09;&#xff0c;并…...

云鼎入鼎系统:一站式电商管理解决方案

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务) &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1;个人微信&a…...

Leetcode134加油站

题目链接 134 题意图解&#xff1a; 题目给了n个节点&#xff0c;这些节点呈现环状&#xff0c;每次到一个低点要消耗cost[i]的油量。 从中我们可以得出一个结论&#xff1a;看一个点能不能到下一个点&#xff0c;就要用当前的油量减去消耗的量&#xff0c;那么gas[i] - cost…...

关于Android Studio for Platform的使用记录

文章目录 简单介绍如何使用配置导入aosp工程配置文件asfp-config.json 简单介绍 Android Studio for Platform是google最新开发&#xff0c;用来阅读aosp源码的工具 详细的资料介绍&#xff1a; https://developer.android.google.cn/studio/platform 将工具下载下来直接点击…...

Linux的内存泄漏问题及排查方法

内存泄漏是指在计算机程序中&#xff0c;已不再被使用的内存未被正确释放&#xff0c;导致内存占用随时间累积&#xff0c;进而引发系统内存不足、性能下降甚至崩溃的问题。在Linux系统中&#xff0c;开发者和运维人员可通过以下方法排查和解决内存泄漏问题&#xff1a; 1. 使…...

uniapp 微信小程序 获取openId

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“uniapp 微信小程序 获取openId”。 一、主要属性 1.uni.login 二、实例代码 1、前端代码 uni.login({provider: weixin,success: (res) > {uni.showLoading({title: 登录中...,mask: true})let code res.…...

隧道结构安全在线监测系统解决方案

一、方案背景 隧道是地下隐蔽工程&#xff0c;会受到潜在、无法预知的地质因素影响。随着我国公路交通建设的发展&#xff0c;隧道占新建公路里程的比例越来越大。隧道属于线状工程&#xff0c;有的规模较大&#xff0c;可长达几公里或数十公里&#xff0c;往往穿越许多不同环境…...

Docker 运维管理

Docker 运维管理 一、Swarm集群管理1.1 Swarm的核心概念1.1.1 集群1.1.2 节点1.1.3 服务和任务1.1.4 负载均衡 1.2 Swarm安装准备工作创建集群添加工作节点到集群发布服务到集群扩展一个或多个服务从集群中删除服务ssh免密登录 二、Docker Compose与 Swarm 一起使用 Compose 三…...

【Redis】快速列表结构

目录 1、背景2、压缩列表【1】底层结构【2】特性【3】优缺点 1、背景 redis的quicklist&#xff08;快速列表&#xff09;是一个双向链表&#xff0c;其中每个节点都是一个ziplist&#xff08;压缩列表&#xff09;。这中结构结合了双向链表和压缩列表的优点&#xff0c;在内存…...

阿里巴巴 1688 数据接口开发指南:构建自动化商品详情采集系统

在电商行业数据驱动决策的趋势下&#xff0c;高效获取商品详情数据成为企业洞察市场、优化运营的关键。通过阿里巴巴 1688 数据接口构建自动化商品详情采集系统&#xff0c;能够快速、精准地采集海量商品信息。本文将从开发准备、接口分析、代码实现等方面&#xff0c;详细介绍…...

[SpringBoot]Spring MVC(2.0)

紧接上文&#xff0c;这篇我们继续讲剩下的HTTp请求 传递JSON数据 简单来说&#xff1a;JSON就是⼀种数据格式,有⾃⼰的格式和语法,使⽤⽂本表⽰⼀个对象或数组的信息,因此JSON本质是字符串. 主要负责在不同的语⾔中数据传递和交换 JSON的语法 1. 数据在 键值对(Key/Value) …...

Golang的网络安全策略实践

Golang的网络安全策略实践 一、理解网络安全的重要性 当今的网络环境中&#xff0c;安全问题日益突出&#xff0c;各种类型的攻击如雨后春笋般涌现&#xff0c;给个人和组织的信息资产造成了严重威胁。因此&#xff0c;制定和实施有效的网络安全策略至关重要。 二、Golang在网络…...

STM32外设AD-轮询法读取模板

STM32外设AD-轮询法读取模板 一&#xff0c;什么是轮询&#xff1f;1&#xff0c;轮询法的直观理解2&#xff0c;轮询法缺点 二&#xff0c;CubeMX配置三&#xff0c;模板移植1&#xff0c;adc_app.c文件2&#xff0c;变量声明1&#xff0c;adc_app.c中2&#xff0c;mydefine.h…...

C++编程this指针练习

这段代码是用 C 编写的&#xff0c;定义了一个 Car 类&#xff08;类是 C 中用于创建对象的蓝图&#xff09;&#xff0c;并通过 main() 函数创建和使用了该类的对象。下面是对整个程序的逐行解释&#xff0c;并在关键部分加上注释说明。 ✅ 代码整体功能&#xff1a; 定义一个…...

iOS音视频解封装分析

首先是进行解封装的简单的配置 /// 解封装配置 class KFDemuxerConfig {// 媒体资源var asset: AVAsset?// 解封装类型&#xff0c;指定是音频、视频或两者都需要var demuxerType: KFMediaType .avinit() {} }然后是实现解封装控制器 import Foundation import CoreMedia i…...

突破智能驾舱边界,Imagination如何构建高安全GPU+AI融合计算架构

日前&#xff0c;“第十二届汽车电子创新大会暨汽车芯片产业生态发展论坛&#xff08;AEIF 2025&#xff09;”在上海顺利举办。大会围绕汽车前沿性、关键性和颠覆性技术突破&#xff0c;邀请行业众多专家学者&#xff0c;分享与探讨了汽车电子产业的技术热点与发展趋势。在5月…...

DeepSeek 如何实现 128K 上下文窗口?

DeepSeek 如何实现 128K 上下文窗口&#xff1f;长文本处理技术揭秘 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 DeepSeek 如何实现 128K 上下文窗口&#xff1f;长文本处理技术揭秘摘要引言技术架构解析1. 动态…...