ElasticSearch基本概念

286 阅读8分钟

ElasticSearch基本概念:

ElasticSearch 是一个开源的搜索引擎,建立在全文搜索引擎库Apache Lucene基础之上

学习资源

www.elastic.co/guide/cn/el…

基础概念

index索引

类比mysql中的database数据库,存储数据的地方

type类型(_doc)

用于定义数据结构,类似mysql的一张表

mapping(映射)

mapping定义了每个字段的类型等信息。相当于关系型数据库中的表结构。

document

类比mysql中的一条data数据,不同的是myslq中是固定的表结构,es中字段结构不固定

field字段

类比mysql中的column,是es中的最小单位

正排索引

正排索引(Forward Index)是一种常见的索引结构,用于将文档的内容按顺序进行存储,以支持快速的文档检索。正排索引以文档为单位,将文档中的每个字 段的值都存储在索引中(参考mysql索引)

倒排索引

  • 在倒排索引中,每个关键词都有一个对应的倒排列表(Inverted List),列表中记录了包含该关键词的文档标识符。倒排列表可以看作是一个关键词到文档的映射。

    倒排索引的结构是基于关键词的,它存储了每个关键词在哪些文档中出现。当需要搜索某个关键词时,可以通过倒排索引快速定位到包含该关键词的文档,从而实现快速的搜索和过滤操作。

    倒排索引的构建过程包括以下几个步骤:

    1. 文档分词:将文档拆分成一系列的关键词或词项。
    2. 构建倒排列表:遍历每个文档,将每个关键词映射到对应的倒排列表上。如果关键词已经存在于倒排列表中,则将文档标识符添加到列表中;如果关键词不存在,则创建新的倒排列表。
    3. 排序和优化:对倒排列表进行排序和优化,以提高搜索性能和减少存储空间。

    倒排索引的优点是可以快速定位到包含指定关键词的文档,适用于快速搜索和检索大量的文本数据。它可以支持复杂的布尔查询、短语查询和范围查询等高级搜索操作。

    然而,倒排索引的缺点是构建和维护索引的过程需要一定的时间和计算资源。每次有新文档添加或更新时,都需要更新倒排索引。此外,对于大规模的数据集,倒排索引可能占用较多的内存空间。

    总而言之,倒排索引是一种常见的索引结构,用于快速搜索和检索。它将关键词映射到包含该关键词的文档集合上,提供了快速的搜索和过滤功能。倒排索引在搜索引擎、全文搜索和数据检索等领域得到广泛应用。

重新生成

基本语法

query

代表查询,同SQL的select 关键字

aggs

在Elasticsearch中,"aggs"是用于聚合(aggregation)操作的缩写。聚合是一种将文档集合分组并计算各组统计信息的功能 ,类似group by语法含义

highlight

对搜索出来的字段,高亮显示

sort

排序

from && size

对查询结果分页,类似limit关键字

post_filter

后置过滤器,对查询的结果过滤

数据类型

text、keyword、number、array、range、boolean、date、geo_point、ip、nested、object

分词

  • 分词(Tokenization)是指将文本数据按照一定的规则或算法拆分成一个个独立的单词或词项的过程。在自然语言处理和信息检索领域中,分词是一项重要的预处理步骤,用于将连续的文本数据转换为离散的词语。

    分词的目的是为了更好地理解和处理文本数据,使得文本可以被计算机系统理解和处理。通过将文本拆分成单个词语,我们可以对词语进行统计、建立索引、进行搜索和语义分析等操作。

    在中文分词中,主要的方法是基于字典和规则的方法。这些方法通过匹配已知的词语或根据语法规则进行切分。另外,也有一些基于机器学习的方法,如基于条件随机场(CRF)和深度学习模型的分词方法。

    在英文分词中,通常根据空格和标点符号进行切分。但是也会面临一些特殊情况,如缩写词、复合词等,需要额外的处理。

    分词的结果通常被称为词项(Token),每个词项代表文本中的一个单词。分词后的词项可以用于构建索引、进行文本分类、进行语义分析等任务。

    总之,分词是将文本数据按照一定规则或算法拆分成独立的词语或词项的过程。分词是自然语言处理和信息检索中的重要预处理步骤,为后续的文本处理和分析提供基础。

重新生成

ES常用分词器

  1. Standard 分词器:这是ES的默认分词器,适用于大多数的英文文本和非英文文本。它基于空格和标点符号对文本进行分词,并进行小写转换和去除停用词等操作。
  2. Simple 分词器:这是一种简单的分词器,它仅按照非字母字符进行分词,并将词语转换为小写形式。适用于少量的非英文文本或特殊需求。
  3. Whitespace 分词器:这个分词器根据空格进行分词,不进行任何其他的操作。适用于特定的需求,如处理已经分好词的文本。
  4. Keyword 分词器:这个分词器将整个文本作为单个词语处理,不进行任何分词操作。适用于处理不需要进行分词的情况,如识别文档的ID或精确匹配的字段。
  5. Language 分词器:ES提供了多种语言特定的分词器,如English 分词器、Chinese 分词器、French 分词器等。这些分词器针对不同的语言特点进行了优化,能够更好地处理相应语言的分词需求。
  6. Pattern 分词器:这个分词器基于正则表达式对文本进行分词。您可以自定义正则表达式来满足特定的分词需求。
  7. N-Gram 分词器:这个分词器将文本拆分成N个连续的字符序列(N-Gram),以便进行模糊匹配和搜索。例如,可以将"hello"拆分成"h"、"he"、"hel"、"hell"、"hello"等词语。

集群

分片

在Elasticsearch中,分片(Shard)是将索引划分为更小的块或分片的过程。每个分片都是一个独立的、可被分配到不同节点上的索引部分。

分片在Elasticsearch中具有以下重要性质和作用:

  1. 分布式存储:通过将索引划分为多个分片,可以将数据分布在集群中的多个节点上,从而实现数据的分布式存储和负载均衡。这样可以提高系统的容错性、可扩展性和性能。
  2. 并行处理:每个分片可以在不同的节点上进行并行处理。当执行搜索、聚合、排序等操作时,可以同时在多个分片上进行,以提高查询的速度和性能。
  3. 容灾和恢复:分片允许在节点故障或数据丢失时进行容灾和恢复。如果某个节点发生故障,分片可以自动分配到其他节点上,以确保数据的可用性和持久性。
  4. 水平扩展:通过增加分片的数量,可以水平扩展集群的处理能力和存储容量。当数据量增加或负载增加时,可以通过增加节点和分片来实现系统的扩展。

在创建索引时,可以指定分片的数量。默认情况下,每个索引会有5个主分片和1个副本分片。主分片和副本分片的作用是为了提高数据的可靠性和可用性。

主分片是原始数据的主要拷贝,负责处理客户端请求和写入操作。副本分片是主分片的副本,用于提供高可用性和读取负载均衡。副本分片可以在多个节点上复制,并且与主分片保持数据同步。

通过合理设置分片数量和副本数量,可以根据系统的需求平衡存储容量、性能和可用性。

总之,分片是将Elasticsearch索引划分为更小的块或部分的过程。分片实现了分布式存储、并行处理、容灾和恢复以及水平扩展等功能,提高了系统的性能、可靠性和可扩展性。

集群的健康状态

ES的健康状态分为三种:

Greed 绿色 :表示所有主分片和副本都正常分配。

Yellow 黄色:表示所有主分片都正常分配,但有副本分片未分配。

Red 红色:表示主分片未分配