2024-03-13  阅读(3)
原文作者:吴声子夜歌 原文地址: https://blog.csdn.net/cold___play/article/details/104740869
索引词(term)

在Elasticsearch中索引词(term)是一个能够被索引的精确值。foo、Foo、FOO几个单词是不同的索引词。索引词是可以通过term查询进行准确的搜索。

文本(text)

文本是一段普通的非结构化文字。通常,文本会被分析成一个个的索引词,存储在Elasticsearch的索引库中。为了让文本能够进行搜索,文本字段需要事先进行分析;当对文本中的关键词进行查询的时候,搜索引擎应该根据搜索条件搜索出原文本。

分析(analysis)

分析是将文本转换为索引词的过程,分析的结果依赖于分词器。比如:FOO、BAR、Foo-Bar和foo bar这几个单词有可能会被拆分成相同的索引词foo和bar,这些索引词存储在Elasticsearch的索引库中。当用FoO:bAR进行全文搜索的时候,搜索引擎根据匹配计算也能在索引库中搜索出之前的内容。

集群(cluster)

集群由一个或多个节点组成,对外提供服务,对外提供索引和搜索功能。在所有节点,一个集群有一个唯一的名称默认为『Elasticsearch』。此名称是很重要的,因为每个节点只能是集群的一部分,当该节点被设置为相同的集群名称时,就会自动加入集群。当需要有多个集群的时候,要确保每个集群的名称不能重复,否则,姐弟啊可能会假如错误的集群。

请注意:一个节点只能假如一个集群,此外,你还可以拥有多个独立的集群,每个集群都有其不同的集群名称。

例如,在开发过程中,可以建立开发集群库和此时集群库,分别为开发、测试服务。

Elasticsearch集群结构如下图:

202403132036098441.png

节点(node)

一个节点是一个逻辑上独立的服务,它是集群的一部分,可以存储数据,并参与集群的索引和搜索功能。

节点也有唯一的名字,在启动的时候分配。如果你不想要默认名称,你可以定义任何你想要的节点名。这个名字在管理中很重要,在网络中Elasticsearch集群通过节点名称进行管理和通信。

一个节点可以被配置假如一个特定的集群。默认情况下,每个节点会加入名为Elasticsearch的集群中,这意味着如果你在网络上启动多个节点,如果网络通常,他们能彼此发现并自动假如一个名为Elasticsearch的集群中,你可以拥有多个你想要的节点。当网络没有集群运行的时候,只要启动任何一个节点,这个节点会默认生成一个新的集群,这个集群会有一个节点。

路由(routing)

当存储一个文档的时候,它会存储在唯一的主分片中,具体哪个分片是通过散列值进行选择。默认情况下,这个值是由文档的ID生成。如果文档有一个指定的父文档,则从父文档ID中生成,该值可以在存储文档的时候进行修改。

分片(shard)

分片是单个Lucene实例,这是Elasticsearch管理的比较底层的功能。所以是指向主分片和副本分片的逻辑空间。对于使用,只需要指定分片的数量,其它不需要做过多的事情。在开发使用的过程中,我们对应的对象都是索引,Elasticsearch会自动管理集群中的所有分片,当发生故障的时候,Elasticsearch会把分片移动到不同的节点或者添加新的节点。

一个索可以存储很大的数据,这些空间可以超过一个节点的物理存储的限制。例如,十亿个文档占用磁盘空间为1TB。仅从单个节点搜索可能会很慢,还有一台物理机器也不一定能存储这么多的数据。为了解决这一问题,Elasticsearch将索引分解成多个分片。当你创建一个索引,你可以简单地定义你想要的分片数量。每个分片本身是一个全功能的、独立的打暖,可以托管在集群中的任何节点。

主分片(primary shard)

每个文档都存储在一个分片中,当你存储一个文档的时候,系统会首先存储在主分片中,然后会复制到不同的副本中。默认情况下,一个索引有5个主分片。你可以事先定制分片的数量,当分片一旦建立,则分片的数量不能修改。

副本分片(replica shard)

每个分片有零个或多个副本。副本主要是主分片的复制,其中有两个目的:

  1. 增加高可用性: 当主分片失败的时候,可以从副本分片中选择一个作为主分片。
  2. 提高性能: 当查询的时候可以到主分片或者副本分片中进行查询。默认情况下,一个主分片配有一个副本,但副本的数量可以在后面动态地配置增加。副本分片必须部署在不同的节点上,不能部署在和主分片相同的节点上。

分片主要有两个很重要的原因是:

  • 允许水平分割扩展数据
  • 允许分配和并行操作(可能在多个节点上)从而提高性能和吞吐量
复制(replica)

复制是一个非常有用的功能,不然会有单点问题。当网络中的某个节点出现问题的时候,复制可以对故障进行转移,保证系统的高可用。因此,Elasticsearch 允许你创建一个或多个拷贝,你的索引分片就形成了所谓的副本或副本分片。
复制是重要的,主要的原因有:

  • 它提供了高可用性,当节点失败的时候不受影响。需要注意的是,一个复制的分片不会存储在同一个节点中。
  • 它允许你扩i展搜索量,提高并发量,因为搜索可以在所有副本上并行执行。

每个索引可以拆分成多个分片。索引可以复制零个或者多个分片。一旦复制,每个索引就有了主分片和副本分片。分片的数量和副本的数量可以在创建索引时定义。当创建索引后,你可以随时改变副本的数量,但你不能改变分片的数量。

默认情况下,每个索引分配5个分片和一个副本,这意味着你的集群节点至少要有两个节点,你将拥有5个主要的分片和5个副本分片共计10个分片。

索引(index)

索引是具有相同结构的文档集合。例如,可以有8个客户信息的索引,包括一个产品目录的索引,一个订单数据的索引。在系统上索引的名字全部小写,通过这个名字可以用来执行索引、搜索、更新和删除等操作。在单个集群中,可以定义多个你想要的索引。索引结构如下图:

202403132036106912.png

类型(type)

在索引中,可以定义一个或多个类型,类型是索引的逻辑分区。在一般情况下,一种类型被定义为具有一组公共字段的文档。例如,让我们假设你运行一个博客平台,并把所有的数据存储在一个索引中。在这个索引中,你可以定义一种类型为用户数据,一种类型为博客数据,另一种类型为评论数据。

文档(document)

文档是存储在Elasticsearch中的一个JSON格式的字符串。它就像在关系数据库中表的一行。每个存储在索引中的一个文档都有一个类型和一个ID,每个文档都是一个JSON对象,存储了零个或者多个字段,或者键值对,原始的JSON文档被存储在一个叫做 _source 的字段中。当搜索文档的时候默认返回的就是这个字段。

映射(mapping)

映射像关系数据库中的表结构,每一个索引都有一个映射,它定义了索引中的每一个字段类型,以及一个索引范围内的设置。一个映射可以事先被定义,或者在第一次存储文档的时候自动识别。

字段(field)

文档中包含零个或多个字段,字段可以是一个简单的值(例如字符串、整数、日期),也可以是一个数组或对象的嵌套结构。字段类似于关系数据库中表的列。每个字段都对应一个字段类型,例如正数、字符串、对象等。字段还可以指定如何分析该字段的值。

来源字段(source field)

默认情况下,你的原文档将被存储在 _source 这个字段中,当你查询的时候也是返回这个字段。这允许你可以从搜索结果中访问原始的对象,这个对象返回一个精确的JSON字符串,这个对象不显示索引分析后的其它任何数据。

主键(ID)

ID是一个文件的唯一标识,如果在库存的时候没有提供ID,系统会自动生成一个ID,文档的index/type/id必须是唯一的。


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文