Elasticsearch基础概念
Elasticsearch 是一款开源的,ESTful风格的 分布式搜索、存储、分析引擎;

常见的使用场景
- 网站搜索,代码搜索等
- 日志管理与分析,应用系统性能分析,安全指标监控等
- 数据库同步,将数据库某个表的数据同步到elasticsearch上然后提供搜索服务
ES基本概念
文档
我们向elasticsearch存储的一条数据,就是一个文档,类似于mysql 数据表中的一条数据.
每个文档都有一个id,可以自己指定,也可以让elasticsearch生成.
元数据
"_index" : "user",
"_id" : "l0D6UmwBn8Enzbv1XLz0",
"_score" : 1.6943597,
"_source" : {"user" : "mj","sex" : "男","age" : "18"
}
_index:文档所属的索引名称._id:文档的唯一标识._version:文档的版本信息._score:文档的相关性打分._source:文档的原始JSON内容.
索引
一个索引包含多个文档,类似于mysql中的table,可以对文档元数据进行定义.
索引体现的是一种逻辑空间的概念,每个索引都应该有自己的Mapping定义,用于定义包含文档的字段名和字段类型,索引的数据分布在分片上
集群
一个elasticsearch集群由多个节点构成,它的分布式架构支持存储水平扩容,并且依靠副本可用性也很高。

节点
一个节点就是一个elasticsearch实例,即一个java进程。节点根据功能可以划分多种角色,比如主节点、数据节点、协调节点、ingest节点等。默认一个节点这些角色都承担。
分片(shard)
-
主分片:用于解决数据的水平扩展问题,通过主分片就数据分布在集群内的不同节点上,主分片在创建索引的时候就指定了,后面就不允许修改,除非重新定义
Index. -
副本:用于解决高可用的问题,分片是主分片的拷贝.副本分片数可以动态的调整,增加副本数量可以在一定的程度上提高服务的可用性.
"settings" : {"index" : {// 设置主分片数"number_of_shards" : "1","auto_expand_replicas" : "0-1","provided_name" : "kibana_sample_data_logs","creation_date" : "1564753951554",// 设置副本分片数"number_of_replicas" : "1","uuid" : "VVMLRyw6TZeSfUvvLNYXEw","version" : {"created" : "7010099"}}
}
倒排索引
Elasticsearch 使用一种称为 倒排索引 的结构,它适用于快速的全文搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。
借助官网的例子:假设我们有两个文档,每个文档的 content 域包含如下内容:
1. The quick brown fox jumped over the lazy dog
2. Quick brown foxes leap over lazy dogs in summer
为了创建倒排索引,我们首先将每个文档的 content 域拆分成单独的 词(我们称它为 词条 或 tokens ),创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档。结果如下所示:
Term Doc_1 Doc_2
-------------------------
Quick | | X
The | X |
brown | X | X
dog | X |
dogs | | X
fox | X |
foxes | | X
in | | X
jumped | X |
lazy | X | X
leap | | X
over | X | X
quick | X |
summer | | X
the | X |
------------------------
分词器
分词是将文本转化为一系列单词的过程。转化为单词后就可以形成倒排索引 分词是由分词器实现的
Standard Analyzer:默认的分词器,按照词切分,并作大写转小写处理Simple Analyzer:按照非字母切分(符号被过滤),并作大写转小写处理Stop Anayzer:停用词(the、is)切分,并作大写转小写处理Whitespace Anayzer:空格切分,不做大写转小写处理IK:中文分词器,需要插件安装ICU:国际化的分词器,需要插件安装jieba:时下流行的一个中文分词器
Dynamic Mapping
Mapping可以简单的理解为数据库中的Schema定义,用于定义索引中的字段的名称,定义字段的类型,字段的倒排索引,指定字段使用何种分词器等.Dynamic Mapping意思就是在我们创建文档的时候,如果索引不存在,就会自动的创建索引,同时自动的创建Mapping,ElasticSearch会自动的帮我们推算出字段的类型,当然,也会存在推算不准确的时候,就需要我们手动的设置.常用的字段类型如下:
- 简单类型:Text、Date、Integer、Boolean等
- 复杂类型:对象类型和嵌套类型.
我们可以使用GET /shgx/_Mapping查询索引的Mapping的设置,需要注意的是以下几点:
- 当我们对索引中的文档新增字段时候,希望可以更新索引的
Mapping就可以可以设置Dynamic:true. - 对于已经有数据的字段,就不再允许修改其
Mapping,因为Lucene生成的倒排索引后就不允许修改.
Dynamic Mapping可以设置三个值,分别是:
true:文档可被索引,新增字段也可被索引,Mapping也会被更新.false:文档可被索引,新增字段不能被索引,Mapping不会被更新.strict:新增字段写入,直接报错.
* index:可以设置改字段是否需要被索引到.设置为false就不会生成倒排索引,节省啦磁盘开销
* null_value:可以控制NULL是否可以被索引
* cope_to:将字段值放在一个新的字段中,可以使用新的字段search,但这个字段不会出现在_source中.
* anaylzer:指定字段的分词器
* search_anaylzer:指定索引使用的分词器
* index_options:控制倒排索引的生成结构,有四种情况
* docs:倒排索引只记录文档ID
* freqs:记录文档ID和Term
* positions:记录文档ID、Term和Term Position
* offsets:记录文档ID、Term、Term Position和offsets
* PS:Text类型的字段默认的是Position,其它类型默认的是docs,记录的越多,占用的存储空间就越大.
相关文章:
Elasticsearch基础概念
Elasticsearch 是一款开源的,ESTful风格的 分布式搜索、存储、分析引擎; 常见的使用场景 网站搜索,代码搜索等日志管理与分析,应用系统性能分析,安全指标监控等数据库同步,将数据库某个表的数据同步到elasticsearch上然后提供搜索服务 ES基本概念 文档 我们向elasticsearch存…...
Redis 7.x 系列【24】哨兵模式配置项
有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 前言2. 配置项2.1 protected-mode2.2 port2.3 daemonize2.4 pidfile2.5 loglevel2.…...
SpringBoot+Vue实现简单的文件上传(策略模式)
SpringBootVue实现简单的文件上传 1 环境 SpringBoot 3.2.1,Vue 2,ElementUI 2 问题 前两篇文章,我们上传了txt、Excel文件,其实文件类型有很多种,如果我们的upload组件没有上传文件类型的限制,那么同一个…...
软考中级科目包含哪些?应该考哪个?
软考中级包含5个专业方向,分别是:计算机软件、计算机网络、计算机应用技术、信息系统、信息服务。这5个方向又对应15个软考中级科目。 信息系统包括:系统集成项目管理工程师、信息系统监理师、信息安全工程师、数据库系统工程师、信息系统管…...
ArcGIS Enterprise 命令行组件创建配置
1. 创建ArcGIS Server站点 使用 createsite工具 命令行直接执行 createsite.sh [-u <arg>] [-p <arg>] [-d <arg>] [-c <arg>]执行文件 createsite.sh [-f <FILE>]安装目录下会有类似的创建站点文件: 修改其中的内容,…...
Web组成架构
网站源码:分脚本类型,分应用方向操作系统:windows,linux中间件(搭建平台):apche、IIS、tomcat、nginx等数据库:mssql、oracle、sybase、db2、access等 WEB相关安全漏洞 WEB源码类对…...
「Pytorch」roLabelImg 图像异常旋转 bug
在进行Yolo-obb 模型训练的时候需要标注旋转框,roLabelImg 是比较推荐的一款旋转框标注工具,既可以标注正常的矩形框,还可以标注旋转框 roLabelImg Github 地址:https://github.com/HumanSignal/labelImg 但是在使用过程中遇到了…...
java.sql.SQLException: Unknown system variable ‘query_cache_size‘【Pyspark】
1、问题描述 学习SparkSql中,将spark中dataframe数据结构保存为jdbc的格式并提交到本地的mysql中,相关代码见文章末尾。 运行代码时报出相关配置文件错误,如下。 根据该报错,发现网络上多数解决方都是基于java开发的解决方案&a…...
汽车连接器革新!中国星坤产品在汽车安全与效率中的卓越表现!
随着汽车行业的快速发展,车载电子系统的复杂性不断增加,对连接器的性能要求也越来越高。中国星坤推出的汽车连接器,以其卓越的设计和性能,为汽车行业带来了一场技术革新。这些连接器不仅能够适应极端的工作环境,还确保…...
DHCP服务、FTP服务
一、DHCP 1.1 DHCP是什么 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种网络协议,用于自动分配 IP 地址和其他网络配置信息给网络中的设备 1.2 DHCP的好处 自动化: 减少了手动配置 IP 地址和网络参数的工…...
AWS云计算实战:电商平台发卡机器人开发指南
在当今数字化时代,电商平台的自动化运营变得尤为重要。本文将深入探讨如何利用AWS云计算平台开发一款高效的发卡机器人,旨在提高电商平台的自动化水平和用户体验。 关键词 AWS云计算, 电商平台, 发卡机器人 1. 引言 随着电商行业的蓬勃发展ÿ…...
虚拟机及其Debian(kali)安装
本机电脑为Windows10系统专业版,在此基础上安装VMware和系统(Kali) 步骤如下 一、安装 VMware Workstation Pro v16.2.4 安装步骤可参照网上博客,该步骤较简单,此处不做讲解。文件中共计两个,其中一个是激活…...
Linux部署禅道(无脑复制版)
目录 环境部署1、下载,解压2、启动3、设置开机自启 登录禅道登录数据库1、设置账号2、网页登录数据库 环境 Linux系统 Centos7 《Linux一键安装包安装禅道》视频链接: https://www.zentao.net/zentao-install/zentao-linux-install-80523.html 部署 …...
C# .net6使用Hangfire
首先我们先来了解什么是Hangfire? Hangfire 是一个用于 .NET 的任务调度库,允许你在后台运行任务,而不需要依赖外部的任务队列服务或复杂的基础设施。它简化了后台任务的创建、调度和管理过程,使得在 .NET 应用程序中处理长期运行…...
NaiveUI与ElementUI 比较分析
前言 在前端开发的广阔领域中,Vue.js作为最流行的前端框架之一,为开发者提供了丰富的组件库,其中NaiveUI和ElementUI是两个备受瞩目的选择。本文将深入分析这两个组件库的特点、优劣势以及适用场景,帮助开发者在项目中做出更合适…...
使用ChatGPT来撰写和润色学术论文的教程(含最新升级开桶ChatGpt4教程)
现在有了ChatGPT4o更加方便了, 但次数太少了 想要增加次数可以考虑升级开桶ChatGpt4 一、引言 在学术研究中,撰写高质量的论文是一项重要的技能。本教程将介绍如何利用ChatGPT来辅助完成从论文构思到润色的全过程。 二、使用ChatGPT写论文 1. 写标题 Title/T…...
matine组件库踩坑日记 --- react
Mantine实践 一 禁忌核心css样式二 添加轮播图扩展组件 一 禁忌核心css样式 import React from react import ReactDOM from react-dom/client import { BrowserRouter } from react-router-dom; import App from ./App.jsx import ./index.css import mantine/core/styles.cs…...
爬虫学习前记----Python
引言 1.语言:python 2.学习资源:【Python爬虫】 3.爬虫日记: python内容 1.字符串输出 (1)引号问题 print("python") 输出:pythonprint(python) 输出:pythonprint(python"学习") 输出&…...
详解Go语言中的Goroutine组(Group)在项目中的使用
背景(Why) Go语言通过其内置的goroutine和通道(channel)机制,提供了强大的并发支持。goroutine的开销非常低,一个goroutine仅占用几KB的内存,可以轻松创建成千上万个goroutine来处理并发任务。然而,随着并…...
Linux桌面环境手动编译安装librime、librime-lua以及ibus-rime,提升中文输入法体验
Linux上的输入法有很多,大体都使用了Fcitx或者iBus作为输入法的引擎。相当于有了一个很不错的“地基”,你可以在这个“地基”上盖上自己的“小别墅”。而rime输入法,就是一个“毛坯别墅”,你可以在rime的基础上,再装修…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
