ES的开始

article/2025/6/6 1:46:45

ES作用 

在海量数据中,执行搜索功能,使用mysql,效率过低,

如果关键字输入不准确,一样可以搜索到想要的数据

讲搜索关键字,以红色字体展示

ES介绍

ES是基于java语言并且基于Lucene编写的搜索引擎框架,提供了分布式全文搜索的功能

Lucene本身是一个搜索引擎能力

全文检索:能拼装成一个词的,则拼装,不能拼装那么就单个

8666手机壳

8

666

手机壳

根据关键词去分词库搜索,找到匹配的内容(倒排索引)

数据假如是死数据Solr更好,假如数据实时改变,则使用Solr查询速度

Solr搭建集群,需要依赖Zookeeper来帮助管理,ES本身支持集群搭建,不需要第三方介入

ES对云计算和大数据支持的特别好。

ES倒排索引

将存放的数据,以一定的方式进行分词,并且将分词的内容存放到一个单独的分词库中

当用户去查询数据时候,会将用户的查询关键字进行分词,

ES数据结构

ES,最小单位叫field,一般叫属性,就是类似于MySQL的字段;多个field组成一个document,一般叫文档,类似于MySQL的行;多个document组成一个Type,一般叫类型,类似于MySQL上的表(版本不一样,Type略有不同,详情可参考后面的Type介绍);多个表汇总一个Index下,一般叫索引,类似于MySQL的数据库,

索引

备份的分片必须放到不同的服务器中

类型type

文档

一个索引下可以创建多个类型。

一个类型下,可以有多个文档,这个文档类似于Mysql表中的多行数据

属性:field(如同于列)

操作ES的Result语法

Get请求:

http://ip:port/index:查询索引信息

http://ip:post/index/type/doc_id        查询指定的文档信息

Post请求:

http://ip:port/index/type/_search     查询

http://ip:port/index/type/doc_id/_update 修改文档,在请求体中json字符串代表修改的具体信息

Put请求:

http://ip:port/index :创建一个索引,需要在请求体中指定索引的信息,类型,结构

http://ip:port/index/type/_mappings:代表创建索引时候,指定索引的文档存储的属性的信息

Delete请求

http://ip:port/index/type/doc_id 删除指定的文档

创建索引

//创建一个索引
PUT /person
{"settings":{//分片数"number_of_shards":5,//备份数"number_of_replicas":1}  
}

查看索引信息

//查看索引信息
get  /person

3.3.3删除索引

//删除索引
delete /person

3.4ES中Field可以指定的类型

String 被分成两种类型:text and Keyword ,

text被使用的较多,

  1. 一般被用于全文检索,全文检索,支持模糊、精确查询,不支持聚合,排序操作;
  2. test类型的最大支持的字符长度无限制,适合大字段存储;

keyword:

  1. 不进行分词,直接索引,支持模糊、支持精确匹配,支持聚合、排序操作。
  2. keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。
  3. 使用场景: 存储邮箱号码、url、name、title,手机号码、主机名、状态码、邮政编码、标签、年龄、性别等数据。 用于筛选数据(例如: select * from x where status='open')、排序、聚合(统计)。 直接将完整的文本保存到倒排索引中

数值类型:long,integer,short,byte,double,float,half_float(比float精度还要小一半),scaled_float(用long来表达)date类型(可以指定具体格式,比如年月日,时分秒,毫秒值啥的)

布尔类型:boolean类型,表达true和false

二进制类型:binary类型,暂时支持Base64 encode string .

long_range:赋值时,无序指定具体的内容,只需要存储一个范围即可,指定lt,gt,gte,lte啥的

Integer_range:同上

double_range:

ip_range:

geo_point:用来存储经纬度的

ip类型

ip:可以存储ipv4/ipv6都支持

创建索引,并且指定数据结构

没有type之后,直接可以插入,他会帮助你创建索引

_doc是文档(属性已经是半个废弃状态。)

PUT /employee/_doc/1
{"first_name":"John","last_name":"Smith","age":25,"about":"I love go rock climbing","interests":["sports","music"]
}PUT /employee/_doc/2
{"first_name":"Jane","last_name":"Smith","age":32,"about":"I like play basketball","interests":["music"]
}PUT /employee/_doc/3
{"first_name":"Lcl","last_name":"Fir","age":19,"about":"I like to  build cabinets","interests":["forestry"]
}

查询数据

全部查询(应该是根据索引来查询,后面加上_search)

GET /employee/_search

可以根据id查找,会从 employee_doc 索引中获取 ID 为 2 的文档。

修改数据,

POST /employee/_update/3
{  "doc":{"first_name":"LCL"}
}

修改成功

如何操作ES

package com.bite.friend.domain.question.es;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;import java.time.LocalDateTime;@Getter
@Setter
//对应的每条数据,相当于一行的数据   ,index时索引名字
@Document(indexName = "idx_question")
public class QuestionES {@Id@Field(type = FieldType.Long)private Long questionId;@Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")private String title;//代表难度,@Field(type = FieldType.Byte)private Integer difficulty;@Field(type = FieldType.Long)private Long timeLimit;@Field(type = FieldType.Long)private Long spaceLimit;@Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")private String content;@Field(type = FieldType.Text)private String questionCase;@Field(type = FieldType.Text)private String mainFuc;@Field(type = FieldType.Text)private String defaultCode;//时间类型@Field(type = FieldType.Date, format = DateFormat.date_hour_minute_second)private LocalDateTime createTime;public QuestionES() {}
}

里面内置了save方法,因此他直接调用这个方法就可以了

为什么不拿数据库,而是拿ES

首先你数据库的话匹配不是很方便,你的模糊查询,要么写很多条,要么写的非常复杂很长,可读性不高

索引使用es,因为ES支持一个分词的操作

ES天生是集群模式

假设三个节点,随便打到任何节点上

假如使用倒排索引,索引的字段一半很长,如果用B+树,他的深度可能很深

性能无法保证,索引可能失效

精准度差,无法与其他属性产生相关性。

全文检索:B+树不适合,因为大多都是文本字段

id和文本字段连接,因为文本字段很大,很容易一条数据超过他的节点容量,所以有可能我一条节点用很多个节点存储

怎么理解共享后缀

aaabcdwdwbbbbbb

aaawdwhdiubbbbbb

中间不一样,但是我们的后面一样

FSA结构

FST结构(这个写的真好)关于Lucene的词典FST深入剖析 | 申艳超-博客

总结以下,加入节点过程:

  • 1)新插入input放入frontier,这里还没有加入FST
  • 2)依据当前input, 对上次插入数据进行freezeTail操作, 放入FST内
  • 3)构建input的转移(Arc)关系
  • 4)解决Output冲突,重新分配output,保证路径统一(NO_OUTPUT,不执行)

http://www.hkcw.cn/article/BaSivYHOeI.shtml

相关文章

【论文解读】ReAct:从思考脱离行动, 到行动反馈思考

认识从实践开始,经过实践得到了理论的认识,还须再回到实践去。 ——《实践论》,毛泽东 1st author: About – Shunyu Yao – 姚顺雨 paper [2210.03629] ReAct: Synergizing Reasoning and Acting in Language ModelsReAct: Synergizing Reasoning and…

AXURE-动态面板

1.概述 动态面板原件,容器类的原件一个动态面板可以有多种状态 同一时刻只展示一个状态 默认展示第一个状态 主要用于多个状态的切换可拖动 1.1 创建 将原件库中的“动态面板”原件,直接拖动到工作区中,创建空白动态面板将页面中原件选中…

AI地面垃圾检测算法智能分析网关V4打造城市/公园/校园等场景环保卫生监管解决方案

一、方案背景​ 在城市管理与场所运营中,地面垃圾的及时清理是环境品质的重要指标。传统人工巡检效率低、成本高,存在明显滞后性,难以满足现代环境管理需求。随着人工智能与计算机视觉技术发展,智能化管理成为趋势。AI智能分析网…

帝国CMS QQ登录插件最新版 获取QQ头像和QQ昵称

帝国CMS QQ登录插件最新版 获取QQ头像和QQ昵称 QQ一键登录,免邮箱 随机密码 获取QQ头像 获取QQ昵称 直接下载上传到帝国CMS:/e/memberconnect UTF-8版本 GBK的自己转换 QQ登录后的默认密码 是随机的邮箱账号前面的随机6个字母和数字 【下图字母数…

Kafka 的优势是什么?

Kafka 作为分布式流处理平台的核心组件,其设计哲学围绕高吞吐、低延迟、高可扩展性展开,在实时数据管道和大数据生态中具有不可替代的地位。 一、超高吞吐量与低延迟 1. 磁盘顺序 I/O 优化 突破磁盘瓶颈:Kafka 将消息持久化到磁盘&#xff…

低谷才是出成绩

有些朋友说我现在是高光,其实不然 之所以有这样的误解,是我个人的简历上是不断增加名誉。这点属实,看看我的词条:https://www.modb.pro/wiki/4245的确如此。但是其实也有误会。事情可以反过来看。因为,如果做技术的在…

Bash shell四则运算

文章目录 四则运算1. ‌expr 命令‌2. ‌$(( )) 表达式(推荐)‌3. ‌$[ ] 表达式(已弃用)‌4. ‌let 命令‌小数运算i 和 i 区别 四则运算 算术运算: - * / %(取模,求余数) Bash sh…

Windows + CPU也能跑时序预测:TSLib框架快速上手与踩坑避雷

在时序预测领域,选择一个成熟的框架往往能让我们事半功倍。最近接手了一个紧急的时序预测项目,经过一番调研后,我选择了TSLib(Time-Series-Library)这个优秀的开源框架来快速搭建整个预测流程。 由于开发环境限制在Windows平台且没有GPU支持,整个部署过程还是遇到了一些…

多模态大语言模型arxiv论文略读(105)

UnifiedMLLM: Enabling Unified Representation for Multi-modal Multi-tasks With Large Language Model ➡️ 论文标题:UnifiedMLLM: Enabling Unified Representation for Multi-modal Multi-tasks With Large Language Model ➡️ 论文作者:Zhaowei…

set map数据结构

#include <set> #include <iostream> using namespace std;int main() {// 设置控制台输出编码为UTF-8system("chcp 65001");set<int> s1; // 创建一个整数集合// 插入元素s1.insert(5);s1.insert(3);s1.insert(7);s1.insert(1);s1.insert(9);//默…

云开发实现新闻列表小程序

新闻列表小程序需要两个页面即新闻列表页及新闻发布页&#xff0c;这两个页面需要以tabBar的形式展示&#xff0c;单击tab图标可以进行页面相互切换。本项目中是分别在cloudfunctions中创建一个名为“submit”的云函数&#xff0c;功能为向小程序端发布信息&#xff0c;在pages…

《C++ Core Guidelines解析》深入理解C++

前言 在计算机编程领域&#xff0c;C一直以其高效、灵活和强大而闻名。然而&#xff0c;C作为一种复杂的编程语言&#xff0c;如果没有正确的理解和使用&#xff0c;很容易导致软件质量的下降和性能问题的出现。幸运的是&#xff0c;一本名为《CCore Guidelines解析》的书籍为…

报错:Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes beca

问题描述&#xff1a;运行单元测试时&#xff0c;报这个警告&#xff1a;Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes beca 操作步骤如下&#xff1a; 将原来的&#xff1a;-ea 修改为 -ea -Xshare:off 重新启动单元测试&a…

万字详解CSS动画核心——@keyframes,看完就会做动画!

新手福利 -- 还在为CSS动画发愁&#xff1f;一篇搞定keyframes所有知识点&#xff01; 一、什么是keyframes&#xff1f; ‌简单说‌&#xff1a;keyframes 是CSS3的 ‌动画关键帧规则‌&#xff0c;就像导演给动画片分镜头一样&#xff0c;你可以定义动画在不同时间点的样式…

【氮化镓】GaN HMETs器件物理失效分析进展

2021 年 5 月,南京大学的蔡晓龙等人在《Journal of Semiconductors》期刊发表了题为《Recent progress of physical failure analysis of GaN HEMTs》的文章,基于多种物理表征技术及大量研究成果,对 GaN HEMTs 的常见失效机制进行了系统分析。文中先介绍失效分析流程,包括使…

工业智能网关保障冷冻仓储设备无人值守安全运行

一、项目背景 冷链物流行业在近年来发展迅速&#xff0c;冷库作为其中的关键环节&#xff0c;其制冷设备的稳定运行至关重要。传统的冷库制冷设备监控方式存在诸多弊端&#xff0c;如需要人工现场巡检&#xff0c;不仅效率低下&#xff0c;且难以及时发现问题&#xff1b;数据…

电工基础【5】简单的电路设计接线实操

07 简单的电路设计 传送带控制示例图 传送带可以转的&#xff0c;电机带动它转。好&#xff0c;这红色的是停止按钮。绿色1启动按钮&#xff0c;这是自锁电路。 原本绿色1启动按钮(按下转、松开转) 客户想加个绿色2手动按钮(按下停、松开转)。 我们前面也学过那个点动了&#…

手机上网可以固定ip地址吗?详细解析

在移动互联网时代&#xff0c;手机已成为人们日常上网的主要设备之一。无论是工作、学习还是娱乐&#xff0c;稳定的网络连接都至关重要。许多用户对IP地址的概念有所了解&#xff0c;尤其是固定IP地址的需求。那么&#xff0c;手机上网能否固定IP地址&#xff1f;又该如何实现…

QGIS 矢量数据属性表中文乱码解决方案:4 步修复编码匹配问题

在QGIS中导入矢量数据后&#xff0c;属性表出现中文字符乱码&#xff0c;多由字符编码不匹配导致。以下是条理清晰的解决方案&#xff0c;可整理为博客内容&#xff1a; 目录 一、问题根源&#xff1a;编码不匹配二、解决方案&#xff1a;分场景修复编码1. 图层属性修改编码&am…

Qwen2.5-VL 视觉编码器的SwiGLU

Qwen2.5-VL 视觉编码器的SwiGLU flyfish 视觉编码器在多模态大模型中扮演着至关重要的角色。我们从头开始训练了一个原生动态分辨率的 ViT&#xff0c;包括 CLIP、视觉-语言模型对齐和端到端训练等阶段。为了解决多模态大模型在训练和测试阶段 ViT 负载不均衡的问题&#xff…