ElasticSearch基本概念

embedded/2024/10/24 6:12:39/

本文内容参考了田雪松老师编著的《Elastic Stack应用宝典》

对比关系型数据库

  • 索引(Index)相当于库
  • 映射类型(Mapping Type)相当于表
  • 文档(Document)相当于行
  • 文档字段(Field)相当于列

索引

elasticsearch%E6%B2%A1%E6%9C%89%E5%BC%95%E5%85%A5%E5%BA%93%E7%9A%84%E6%A6%82">Elasticsearch没有引入库的概念,而是将文档的容器直接称为索引(Index)​。而这里的索引就是倒排索引,或者更准确的说是一组倒排索引。因为Elasticsearch中所有数据的检索都必须要通过倒排索引来检索,离开了倒排索引文档就相当于不存在。所以从检索的角度来看,文档以倒排索引的形式表现其存在性。

编入索引的信息包括文档ID、词项在字段中出现的频率、词项在字段中的次序、词项在字段中的起止偏移量等信息。

文档ID

文档ID是词项来源文档的编号,是文档的惟一标识,可用于存在性检索。文档ID由文档中的元字段_id保存。

词频

词项在字段中出现的频率一般称为词频(Term Frequency)​,它可以反映检索结果的相关性,词项在文本中出现的频率越高与检索的相关性也就越高。

词序

词项在字段中的次序(以下简称词序)记录的是某一词项在所有词项中的次序,主要用于短语查询(Phrase Query)​。

词项偏移量

词项在字段中的起止偏移量(以下简称词项偏移量)​,给出了词项在字段中的实际位置,一般用于高亮检索结果。

elasticsearch-i">例如,在“Elasticsearch is a search engine”中,search这个词项在整个文本中只出现了1次,所以它的词频为1;而search之前还有3个词项,所以词序为3(词序起始位置为0)​;最后,由于search在整个短语中的位置是第19~24之间,所以偏移量为[19,25)

映射类型

映射类型(Mapping Type)是定义文档与索引映射关系的一种方式。

elasticsearch%E7%89%88%E6%9C%AC6%E4%B9%8B%E5%89%8D%EF%BC%8C">在Elasticsearch版本6之前,一个索引中是可以定义多个映射类型。事实上,映射类型这个概念的引入使得Elasticsearch的这些概念在整体上都变得混乱,Elasticsearch官方已经开始弱化映射类型的概念。

在6.0版本以后映射类型的概念还将延续,但在映射中只能有一个映射类型,而不允许再定义多个映射类型;而在7.0版本以后,映射类型的概念被彻底删除。

索引是存储文档的容器,文档在存储前会做文档分析并编入倒排索引。而文档从全文数据到索引的转变由映射(Mapping)定义,这是另一个在Elasticsearch中非常重要的概念。映射介于文档与索引之间,所以一般是在创建索引时指定文档与索引的映射关系。映射的概念比较难理解,想要理解它就得先理解Elasticsearch中的文档概念。

文档

elasticsearch%E4%B8%AD%EF%BC%8C%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8">在Elasticsearch中,数据存储和检索的基本单元是文档。Elasticsearch的文档使用JSON格式。Elasticsearch对外开放的接口以REST为主,而REST本身也是以JSON为通用数据交换格式。可以预先定义好属性和数据类型。为了明确概念,文档的JSON属性为字段(Field)​,即文档字段,以区别在其他领域中使用的JSON属性。

文档字段

文档字段(Field)可以理解为文档的一个结构化特征。由于文档中的数据分散在各个字段中,所以索引文档肯定都是针对文档字段进行的。在默认情况下,文档的所有字段都会创建倒排索引。这可以通过字段的index参数来设置,其默认值为true,即字段会被编入索引。在编入索引时,一般不会将字段值整体编入。比如text类型的字段来说,它们会被解析为词项后再以词项为单位编入索引。

元字段

文档字段可以分为两类:一类是元字段(Meta-field)​;另一类是用户定义的业务字段。元字段不需要用户定义,在任一文档中都存在,例如在前面提及的文件ID字段_id就是一个元字段。在名称上它们有一个显著的特征,就是它们都以下划线“_”开头。在学习这些字段时,要从字段索引和字段存储两方面理解它们。有些元字段只是为了存储,它们会出现在文档检索的结果中,但却不能通过这个字段本身做检索,比如_source字段。而有些元字段则只是为了索引,它会创建一个索引出来,用户可以在这个索引上检索文档,但这个字段却不会出现最终的检索结果中,如_all字段。此外,也并不是所有元字段都是默认开启的,有些元字段是需要在索引中配置开启才可使用的。

739a257153b5ee0a7944c9b987d1bf8.jpg

90cb435d44c0167a2e9c2c3beff62e5.jpg

​_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字段用于给所有有值的字段名称做索引,这可以用于检索某一字段是否存在。


http://www.ppmy.cn/embedded/130004.html

相关文章

网络应用技术 实验一:路由器实现不同网络间通信(华为ensp)

目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验任务及要求 1、任务 1:完成网络部署 2、任务 2:设计全网IP 地址 3、任务 3:实现全网主机互通 六、实验步骤 1、在ensp中部署网络 2、配置各主机 IP地址、子网掩…

学习记录:js算法(七十三):跳跃游戏

文章目录 跳跃游戏思路一:贪心算法思路二:动态规划思路三:递归 记忆化搜索思路四:广度优先搜索 (BFS)思路五:深度优先搜索 (DFS) 跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个 下标 。数…

Nginx流量同时转发多后端(流量镜像分发)

一、背景 请注意,我这里标题提到的是一个请求流量被同时转发到2个或者多个后端,而非负载均衡的场景!!! 负载均衡的场景我想就不用赘述了,定义一个upstrem, upstrem定了一组提供相同服务的server地址, 最后通过proxy_pa…

HarmonyOS鸿蒙分布式文件操作的时候权限问题

对于分布式文件跨设备操作的时候,一定记得设置文件等级权限,否则会出现各种不同的异常: setSecurityLabel 设置文件权限 代码: //设置文件权限securityLabel.setSecurityLabel(destUriPath, s1).then(() > {PhLog.info(Succee…

MYSQL-SQL-01-DDL(Data Definition Language,数据定义语言)

DDL(数据定义语言) DDL(Data Definition Language),数据定义语言,用来定义数据库对象(数据库,表,字段) 。 一、数据库操作 1、 查询mysql数据库管理系统的所有数据库 语法&#…

通过微信小程序实现对接企业微信客服

文章目录 概要整体流程调用api代码小结 概要 在小程序中,您可以通过调用企业微信的接口来实现客服功能。 整体流程 1. 创建企业微信应用 登录企业微信管理后台:企业微信管理后台在左侧菜单中选择“应用管理” -> “添加应用”,根据提示…

什么是机器人流量?如何识别和预防有害机器人流量?

机器人流量是指由自动软件程序(或机器人)而非人类用户生成的互联网流量。机器人可以执行各种任务,包括有益的和恶意的,而且速度比人类快得多。 据估计,大约 30% 的互联网流量来自旨在窃取内容、破坏服务和开展其他恶意…

网络安全领域推荐证书介绍及备考指南

在网络安全领域,拥有专业认证不仅可以证明个人的专业能力,还能帮助在实际工作中应用先进的技术和知识。以下是几种热门的网络安全证书介绍及备考指南。 1. OSCP (Offensive Security Certified Professional) 证书简介 OSCP是针对渗透测试领域的入门级…