ElasticSearch基本概念
本文内容参考了田雪松老师编著的《Elastic Stack应用宝典》
对比关系型数据库
- 索引(Index)相当于库
- 映射类型(Mapping Type)相当于表
- 文档(Document)相当于行
- 文档字段(Field)相当于列
索引
Elasticsearch没有引入库的概念,而是将文档的容器直接称为索引(Index)。而这里的索引就是倒排索引,或者更准确的说是一组倒排索引。因为Elasticsearch中所有数据的检索都必须要通过倒排索引来检索,离开了倒排索引文档就相当于不存在。所以从检索的角度来看,文档以倒排索引的形式表现其存在性。
编入索引的信息包括文档ID、词项在字段中出现的频率、词项在字段中的次序、词项在字段中的起止偏移量等信息。
文档ID
文档ID是词项来源文档的编号,是文档的惟一标识,可用于存在性检索。文档ID由文档中的元字段_id保存。
词频
词项在字段中出现的频率一般称为词频(Term Frequency),它可以反映检索结果的相关性,词项在文本中出现的频率越高与检索的相关性也就越高。
词序
词项在字段中的次序(以下简称词序)记录的是某一词项在所有词项中的次序,主要用于短语查询(Phrase Query)。
词项偏移量
词项在字段中的起止偏移量(以下简称词项偏移量),给出了词项在字段中的实际位置,一般用于高亮检索结果。
例如,在“Elasticsearch is a search engine”中,search这个词项在整个文本中只出现了1次,所以它的词频为1;而search之前还有3个词项,所以词序为3(词序起始位置为0);最后,由于search在整个短语中的位置是第19~24之间,所以偏移量为[19,25)
映射类型
映射类型(Mapping Type)是定义文档与索引映射关系的一种方式。
在Elasticsearch版本6之前,一个索引中是可以定义多个映射类型。事实上,映射类型这个概念的引入使得Elasticsearch的这些概念在整体上都变得混乱,Elasticsearch官方已经开始弱化映射类型的概念。
在6.0版本以后映射类型的概念还将延续,但在映射中只能有一个映射类型,而不允许再定义多个映射类型;而在7.0版本以后,映射类型的概念被彻底删除。
索引是存储文档的容器,文档在存储前会做文档分析并编入倒排索引。而文档从全文数据到索引的转变由映射(Mapping)定义,这是另一个在Elasticsearch中非常重要的概念。映射介于文档与索引之间,所以一般是在创建索引时指定文档与索引的映射关系。映射的概念比较难理解,想要理解它就得先理解Elasticsearch中的文档概念。
文档
在Elasticsearch中,数据存储和检索的基本单元是文档。Elasticsearch的文档使用JSON格式。Elasticsearch对外开放的接口以REST为主,而REST本身也是以JSON为通用数据交换格式。可以预先定义好属性和数据类型。为了明确概念,文档的JSON属性为字段(Field),即文档字段,以区别在其他领域中使用的JSON属性。
文档字段
文档字段(Field)可以理解为文档的一个结构化特征。由于文档中的数据分散在各个字段中,所以索引文档肯定都是针对文档字段进行的。在默认情况下,文档的所有字段都会创建倒排索引。这可以通过字段的index参数来设置,其默认值为true,即字段会被编入索引。在编入索引时,一般不会将字段值整体编入。比如text类型的字段来说,它们会被解析为词项后再以词项为单位编入索引。
元字段
文档字段可以分为两类:一类是元字段(Meta-field);另一类是用户定义的业务字段。元字段不需要用户定义,在任一文档中都存在,例如在前面提及的文件ID字段_id就是一个元字段。在名称上它们有一个显著的特征,就是它们都以下划线“_”开头。在学习这些字段时,要从字段索引和字段存储两方面理解它们。有些元字段只是为了存储,它们会出现在文档检索的结果中,但却不能通过这个字段本身做检索,比如_source字段。而有些元字段则只是为了索引,它会创建一个索引出来,用户可以在这个索引上检索文档,但这个字段却不会出现最终的检索结果中,如_all字段。此外,也并不是所有元字段都是默认开启的,有些元字段是需要在索引中配置开启才可使用的。
_type
_id和_uid都是文档的标识符,在版本6之前_id仅在映射类型内惟一,而_uid由_type和_id组成并在索引内惟一;
但在6.0.0版之后,映射类型在索引内仅有一个,所以_uid已经被废止,而_id则在索引内惟一。
_source
尽管在默认情况下所有的字段都会被索引,但是这些字段的原始值是不会被编入索引中的。这意味着用户可以通过某一字段的词项检索到文档,但并不能直接取到这个字段的原始值。因为字段的索引最多只包含上述四项内容,并不包含字段原始值。
为什么字段原始值不会被编入索引呢?这显然还是出于对性能与效率的考量。还是以“Elasticsearch is a search engine”这段文本为例,文档分析后会提取出5个词项并编入索引。如果这5个词项都在索引中保留字段的原始值,那么这段文本就要被保留5次。而对于很多文档来说,它们的文本内容要比这大得多,如果都保留下来这对于存储空间的浪费将是十分惊人的。
尽管单个字段的原始值不会被保存,但索引提供了一个叫_source的字段用于存储整个文档的原始值。_source字段有一个特性,那就是这个字段在默认情况下是不会被索引的,但是每个查询默认都会带着_source字段返回。_source字段保存的源文档信息是在索引文档时以JSON形式传递过来的最原始文档。
_field_names
_field_names字段用于给所有有值的字段名称做索引,这可以用于检索某一字段是否存在。
相关文章:
ElasticSearch基本概念
本文内容参考了田雪松老师编著的《Elastic Stack应用宝典》 对比关系型数据库 索引(Index)相当于库映射类型(Mapping Type)相当于表文档(Document)相当于行文档字段(Field)相当于列…...
fluent-ffmpeg操作MP3文件深入解析
软考鸭微信小程序 学软考,来软考鸭! 提供软考免费软考讲解视频、题库、软考试题、软考模考、软考查分、软考咨询等服务 引言 fluent-ffmpeg是一个功能强大的Node.js库,它为FFmpeg提供了一个流畅的接口。FFmpeg是一个著名的多媒体框架,以处理音频、视频和…...
做信创项目需要什么资质、信创产品认证标准?
信创项目需要企业具备一些特定的资质和认证,以证明其合规性和专业性。以下是做信创项目可能用到的一些资质: 1. 信息安全管理体系认证(ISO27001):该认证可以证明企业已经建立了完善的信息安全管理体系,能够…...
Spring i18n国际化
从源码MessageSource的三个实现出发实战springi18n国际化 - 简熵 - 博客园 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.MessageSource; import org.spri…...
基于stm32的楼宇照明控制系统设计
基于stm32的楼宇照明控制系统设计 项目说明一、绪论1.1 研究背景1.2 研究意义1.4 研究内容 二、系统方案设计2.1 微控制器方案选择2.2 信息检测模块方案选择2.3 WiFi模块选择2.4 终端显示2.5 WiFi无线通信实现方法 三、系统硬件电路图设计3.1 整体电路图设计3.2 主控制器设计3.…...
ESP32移植Openharmony外设篇(3)OLED屏
模块简介 产品介绍 OLED (Organic Light-Emitting Diode):有机发光二极管又称为有机电激光显示,OLED显示技术具有自发光的特性,采用薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光,而且…...
人工智能:未来生活与工作的变革力量
人工智能(AI)作为21世纪最具变革性的技术之一,正以前所未有的速度改变着我们的生活和工作方式。从医疗行业的突破性进展到企业运营的智能化,以及日常生活中各种智能产品的普及,人工智能正在成为现代社会不可或缺的一部…...
AI自动生成PPT哪个软件好?智能生成PPT不再熬夜做课件
大概这世上,都是职场牛马对“PPT”这三个字母的头痛反应最大吧! 是的,就连各个年级段的老师也是很头痛——愁着怎样能在排版整齐的情况下,将必考知识点都呈现在PPT每一张幻灯片页面里...... 近期打听到用人工智能生成ppt课件&am…...
C# OOP面试题精选 面向新手/SOLID原则/设计模式++ 长期更新
1.整理目的 相当于0.1版本,旨在学习/提升/复习 关于面向对象模块的知识 目前,记录了一些比较容易混淆或者突然想不起的冷门内容 还有一些个人经过实战后总结的内容,其中还指明了很多实例和分析链接以更加方便地复习 【金山文档 | WPS云文…...
安全见闻(2)——开阔眼界,不做井底之蛙
内容预览 ≧∀≦ゞ 安全见闻二:Web程序构成与潜在漏洞声明导语前端语言及潜在漏洞前端语言前端框架与代码库代码库的概念和用途流行的JavaScript框架常见的代码库 前端潜在漏洞 后端语言及潜在漏洞常见后端语言协议问题后端潜在漏洞 数据库及潜在漏洞数据库分类数据…...
ProtoBuf 的含义和安装
ProtoBuf 是什么 Protocol Buffers 是 Google 的⼀种语⾔⽆关、平台⽆关、可扩展的序列化结构数据的⽅法,它可⽤ 于(数据)通信协议、数据存储等。 Protocol Buffers 类⽐于、 XML,是⼀种灵活,⾼效,⾃动化机…...
C++位操作实战:掩码、提取与组装
在C编程中,位操作是一项基础且强大的技术,它允许程序员在二进制级别上直接操作数据。这种能力对于性能优化、内存节省以及底层硬件控制至关重要。本文将深入探讨C中的掩码操作、字节提取与组装,并通过实例展示这些技术的实际应用。 一、位运算…...
PVE虚拟机强制重启
在Proxmox VE (PVE) 中,强制重启虚拟机的方法有几种,取决于具体场景和虚拟机的状态。以下是常用的两种方法: 1. 使用PVE Web UI强制重启虚拟机 如果虚拟机无法正常关闭或重启,可以使用PVE Web界面中的强制关机/重启选项…...
Adobe Acrobat DC 打印PDF文件,没有打印出注释的解决方法
adobe acrobat在打印的时候,打印不出来注释内容(之前一直可以,突然就不行),升级版本、嵌入字体等等都试过,也在Google找了半天和问了GPT也么找着办法。 无奈之下,自己通过印前检查,…...
主机名学习
1.主机名 定义:主机名是一个人类可读的标识符,通常由字母、数字和连接符组成,用于标识网络中的设备。主机名可以是局部的(例如局域网中的设备名)或者全局的(通过 DNS 解析成 IP 地址)。 解析&…...
SpringBoot循环依赖
在Spring Boot(以及Spring框架)中,循环依赖是指两个或多个Bean互相依赖,导致Spring在创建这些Bean时无法正常进行依赖注入。例如,假设有两个类A和B,A依赖于B,而B又依赖于A。在这种情况下&#x…...
一道面试题:为什么要使用Docker?
先来笼统地看一下 1、环境一致性 众所周知,开发过程中一个常见的问题是环境一致性问题,由于开发环境,测试环境,生产环境不一致,导致有些bug并未在开发过程中被发现,而Docker的镜像提供了除内核外完整的运…...
类的创建、构造器、实例属性、实例方法
Creating Classes # Class: blueprint for creating new Objects # Object: instance of a class # Class: Human # Objects: John, Mary, Jack# 类名定义每个单词的首字母大写 class Point:# 每个方法至少有一个参数def draw(self):print("draw")# 创建Point对象 p…...
js读取.txt文件内容
方法一:FileReader() <input type"file" id"fileInput" /><script>const fileInput document.getElementById(fileInput)fileInput.addEventListener(change, function (e) {const file e.target.files[0]const reader new Fil…...
【AscendC算子开发】笔记2 算子高级开发和调试调优
算子调试 Tensor也可以通过特定的printf方法来打印,见上图。 gdb调试见上图。 为什么gdb调试无法成功,因为run.sh里面有两行export,如果直接通过.XX运行的话需要配置一下。 npu域也支持调试,可以使用上述的方法。 内存检测工…...
vscode连接keil-5 开发STM32 程序
Vs Code连接 keil-5 ,开发STM32 程序 为了不使用难用的 keil-5 软件 继续使用友好的 vscode开发 步骤: 1 安装Keil Assitant 扩展 2 将你的 Keil-5 这个程序的路径找到复制到这里 3 下载 Mingw 下载点此处 4 下载后只解压 就行了 不安装 下载完 放在…...
数据结构深度优先搜索遍历连通图+非连通图(C语言代码+遍历+终端输入内容)
首先数据结构(C语言版第二版)的关于深度优先搜索遍历连通图的图G4如下: 使用邻接表去创建上面这个无向图,然后再使用书本DFS函数以及DFSTraverse函数实现深度优先搜索遍历 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #…...
信息安全工程师(55)网络安全漏洞概述
一、定义 网络安全漏洞,又称为脆弱性,是网络安全信息系统中与安全策略相冲突的缺陷,这种缺陷也称为安全隐患。漏洞可能导致机密性受损、完整性破坏、可用性降低、抗抵赖性缺失、可控性下降、真实性不保等问题。 二、分类 网络安全漏洞可以根据…...
member access within null pointer of type ‘ListNode‘
文章目录 前言一、空指针解引用二、访问已释放的内存三、 结构体定义问题四、错误的链表操作五、代码上下文六、示例代码七、调试建议 前言 p -> next p1; p1 p1 -> next; p p->next;runtime error: member access within null pointer of type ListNode如果出现…...
UE5蓝图中整理节点的方法
UE5蓝图中整理节点的方法 第一种:子图 右键选中的节点,出现一个面板,点击 Collapse Nodes 既可折叠选中的所有节点 注意:子图不可以被复制使用。 双击子图可以查看节点,若不想折叠选中的节点为子图,右键点…...
01,http 协议
1 ,http 协议 :介绍 1 ,http :是什么 Hyper Text Transfer Protocol :超文本传输协议 2 ,传输内容 :文本 1 ,内容 : 纯文本 2 ,特殊 …...
在 typescript 中,如何封装一个 class 类来接收接口的响应数据
在 TypeScript 中,封装一个类来接收接口的响应数据是一个常见的需求,特别是在处理后端 API 响应时。这通常涉及到定义与后端 API 响应结构相匹配的接口(或类型),并在类中创建方法来处理这些数据。以下是一个简单的示例…...
力扣周赛第420场 中等 3325.字符至少出现k次的子字符串 I
文章目录 题目介绍题解 题目介绍 题解 滑动窗口思想:参考 3.无重复字符的最长子串 链接 代码如下: class Solution {public int numberOfSubstrings(String s, int k) {int n s.length(), res 0;for(int left 0; left < n; left){// 记录窗口内…...
【Spring框架】Spring核心思想IoC以及依赖注入DI详解
目录 Spring框架前言 服务端三层开发表现层业务层持久层 Spring框架的概述Spring框架的优点Spring核心——IoC什么是IoC?O.o什么是耦合度? 创建第一个IoC程序导入必要依赖编写接口和实现类编写Spring核心配置文件测试类进行测试 Spring配置文件Bean对象的…...
Java项目-基于springboot框架的智慧外贸系统项目实战(附源码+文档)
作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…...
乐云seo网站建设公司/网站seo诊断分析报告
以前一直以为,在编写js代码的时候,如果在代码后面不添加分号,JavaScript会自动填补分号。最近看了权威指南,才突然发现一直理解有误,而且关于分号的使用,还有很多需要注意的地方。 1、分号的省略࿱…...
内江做网站的公司/百度指数功能模块有哪些
错误提示:System.Data.OleDb.OleDbException: 字段太小而不能接受所要添加的数据的数量。“/”应用程序中的服务器错误。-------------------------------------------------------------------------------- 字段太小而不能接受所要添加的数据的数量。试着插入或粘…...
wordpress怎么登录网站后台/建网站的公司
在集群环境中如何用LotusScript获取当前服务器 环境 产品: Lotus Domino Designer平台: 平台无关版本: 5.x, 6.x 问题 在集群环境中, 当其中一台服务器没有响应时, 因为失效转移的作用, 用户会被转移到集群中的另一台服务器上。如果我们在编写程序时在LotusScript中直接指定了…...
制作html网站/网站优化策略
http://www.imc.org/pdi/vcard-21.txt vCard 规范容许公开交换个人数据交换 (Personal Data Interchange PDI) 信息,在传统纸质商业名片可找到这些信息。规范定义电子名片(或叫vCard)的格式。 vCard 规范可作为各种应用或系统之间的交换格式。…...
网站建设实训报告模板/学网络运营在哪里学比较好
单例,故名思议,一个只能创建一个实例的类。 单例被广泛应用于Spring的bean(默认)、线程池、数据库连接池、缓存,还有其他一些无状态的类如servlet。 一个没必要多例的类实现了单例可以节约空间(显而易见&am…...
wordpress b2b源码/电商运营基础知识
IntelliJ IDEA是Java语言开发的集成环境,IntelliJ在业界被公认为优秀的Java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能可以说是超常的。 点击下载IntelliJ IDEA最新试…...