Elasticsearch索引优化指南:分片、副本、mapping和analyzer

这篇具有很好参考价值的文章主要介绍了Elasticsearch索引优化指南:分片、副本、mapping和analyzer。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Elasticsearch是一个开源的分布式搜索引擎,它的数据存储和查询速度非常快。然而,在面对大规模的数据集和高并发访问时,Elasticsearch的性能也可能受到一些影响。为了最大程度地提高Elasticsearch的性能,我们需要对索引进行优化。本篇博客将介绍Elasticsearch索引优化的几个关键方面,包括调整分片和副本、使用mapping和analyzer等。

1. 分片和副本

Elasticsearch使用分片(shard)和副本(replica)来实现分布式存储和高可用性。分片是将索引划分成多个部分,每个部分都是一个独立的Lucene索引。而副本则是分片的备份,每个分片可以有多个副本。

默认情况下,Elasticsearch会为每个索引创建5个主分片和1个副本,总共会有10个分片(5个主分片+5个副本分片)。这意味着,每个索引的数据会被划分成10个部分,并且每个部分都会有一个主分片和一个副本分片。这种设置对于小规模索引来说已经足够,但是在面对大规模的数据集时,我们可能需要进行调整。

1.1 调整主分片数量

主分片数量的设置会直接影响到索引的分布式性能和可扩展性。如果主分片数量太少,会导致每个分片中的数据量过大,而且无法利用集群中所有节点的计算资源。如果主分片数量太多,会导致索引过度分散,造成数据迁移和调整的负担。

一般来说,我们可以通过以下两种方式来调整主分片数量:

  • 创建新索引时指定主分片数量;
  • 对已有索引进行重新索引(reindex)操作,指定新的主分片数量。

在实际操作中,我们需要根据数据量、查询频率、集群规模等因素来调整主分片数量。例如,对于每个节点拥有8个CPU核心的集群来说,通常推荐将主分片数量设置为2的幂次方(2、4、8、16等)。

1.2 调整副本数量

副本数量的设置会影响索引的可用性和读写性能。如果副本数量太少,当某个节点故障时,将无法保证数据的可用性。如果副本数量太多,会占用过多的磁盘空间和网络带宽,降低写入性能。

一般来说,我们可以通过以下两种方式来调整副本数量:

  • 在创建索引时指定副本数量;
  • 在已有索引上执行API操作来更改副本数量。

与主分片数量不同,副本数量可以根据实际需要进行动态调整。例如,对于写入频率较高的索引,我们可以降低副本数量来提高写入性能。而对于查询频率较高的索引,我们可以增加副本数量来提高查询性能。

2. Mapping

在Elasticsearch中,Mapping是将文档字段映射到索引中的数据结构的过程。Mapping定义了索引中每个字段的类型、分词器、存储方式等信息,这些信息对于搜索和聚合操作来说非常重要。通过对Mapping进行优化,我们可以提高查询和聚合的性能,并减少索引的存储空间。

2.1 明确字段类型

在定义Mapping时,我们需要尽可能明确每个字段的类型。Elasticsearch支持的字段类型包括:

  • 字符串(text、keyword);
  • 数值(long、integer、short、byte、double、float、half_float、scaled_float);
  • 日期(date);
  • 布尔值(boolean);
  • 二进制(binary);
  • 地理位置(geo_point、geo_shape)。

在选择字段类型时,我们需要根据字段的实际含义和使用场景进行选择。例如,对于需要进行全文检索的文本字段,通常使用text类型。而对于需要进行精确匹配的文本字段,通常使用keyword类型。另外,对于数值类型的字段,我们还需要注意字段是否需要进行聚合操作,因为不同的字段类型在聚合时的性能表现也不同。

2.2 避免使用默认Mapping

Elasticsearch提供了一个默认Mapping,它会自动将文档中所有未定义的字段映射成text类型。然而,使用默认Mapping会导致索引的存储空间浪费和查询性能下降。因此,在定义Mapping时,我们应该尽可能明确每个字段的类型,避免使用默认Mapping。

2.3 使用Field Data

Field Data是Elasticsearch中一种用于聚合操作的数据结构,它可以将文档字段的值加载到内存中,从而提高聚合操作的性能。在使用Field Data时,我们需要注意以下几点:

  • Field Data只适用于不可变的字段;
  • Field Data占用内存,因此在选择使用Field Data时需要注意内存使用情况;
  • Field Data对于高基数(cardinality)字段的性能表现较差。

2.4 使用嵌套字段

Elasticsearch支持嵌套字段,即在一个文档中嵌套另一个文档。使用嵌套字段可以简化查询和聚合操作,并提高查询性能。在使用嵌套字段时,我们需要注意以下几点:

  • 嵌套字段的定义必须在Mapping中进行;
  • 嵌套字段不能直接进行全文检索;
  • 在使用嵌套字段进行聚合操作时,需要使用嵌套聚合(nested aggregation)。

3. Analyzer

Analyzer是Elasticsearch中用于处理文本的组件,它可以将文本分割成一系列的词项(term),并将这些词项存储在索引中。Analyzer包括三个组件:字符过滤器(character filter)、分词器(tokenizer)和词项过滤器(token filter)。

3.1 字符过滤器

字符过滤器用于对文本进行预处理,例如删除HTML标签、转换特殊字符等。Elasticsearch提供了一些内置的字符过滤器,例如HTML Strip Character Filter、Mapping Character Filter等。

3.2 分词器

分词器用于将文本分割成一系列的词项。Elasticsearch提供了多种内置的分词器,例如Standard Tokenizer、Whitespace Tokenizer、Keyword Tokenizer等。另外,我们也可以通过自定义插件来实现自定义的分词器。

3.3 词项过滤器

词项过滤器用于对分词后的词项进行过滤、修改或替换。Elasticsearch提供了多种内置的词项过滤器,例如Lowercase Token Filter、Stop Token Filter、Synonym Token Filter等。另外,我们也可以通过自定义插件来实现自定义的词项过滤器。

3.4 Analyzer的优化

在使用Analyzer时,我们需要注意以下几点:

  • 尽可能减少字符过滤器和词项过滤器的数量,因为它们会增加处理时间;
  • 根据实际需求选择合适的分词器和词项过滤器;
  • 在进行全文检索时,应该使用与索引时相同的Analyzer。

结语

通过对Elasticsearch索引进行优化,我们可以提高搜索和聚合的性能,并减少存储空间的占用。虽然优化索引需要一定的技术和经验,但只要掌握了相关知识,就可以为业务提供更高效的搜索和分析服务。​文章来源地址https://www.toymoban.com/news/detail-830633.html

到了这里,关于Elasticsearch索引优化指南:分片、副本、mapping和analyzer的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Elasticsearch深入学习 (二) 索引创建及分片优化经验

    Elasticsearch深入学习 (二) 索引创建及分片优化经验

    一、索引与分片的关系 ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本。通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负

    2024年02月15日
    浏览(7)
  • 【ElasticSearch系列-07】ES的开发场景和索引分片的设置及优化

    【ElasticSearch系列-07】ES的开发场景和索引分片的设置及优化

    ElasticSearch系列整体栏目 内容 链接地址 【一】ElasticSearch下载和安装 https://zhenghuisheng.blog.csdn.net/article/details/129260827 【二】ElasticSearch概念和基本操作 https://blog.csdn.net/zhenghuishengq/article/details/134121631 【三】ElasticSearch的高级查询Query DSL https://blog.csdn.net/zhenghuishengq/article/details/1

    2024年02月03日
    浏览(38)
  • ElasticSearch--分片和副本--原理

    ElasticSearch--分片和副本--原理

    原文网址:ElasticSearch--分片和副本--原理_IT利刃出鞘的博客-CSDN博客 说明 本文介绍ES的分片和副本的原理。 粉丝福利 :有很多粉丝私信问我有没有Java的面试及PDF书籍等资料,我整理一下,包含: 真实 面试题汇总、简历模板、PDF书籍、PPT模板等。这些是 我自己也在用 的资料

    2023年04月09日
    浏览(11)
  • elasticsearch副本和分片

    1.文档冲突 当我们使用index API更新文档,可以一次性读取 修改索引副本 看起来您正在尝试修改一个已经打开的索引的非动态设置index.number_of_shards。在默认情况下,Elasticsearch不允许在索引处于打开状态时修改非动态(不可更改)的设置。 curl -XPOST http://192.168.1.136:9200/es-syslo

    2024年01月17日
    浏览(7)
  • Elasticsearch的分片和副本

    Elasticsearch是一个分布式搜索和分析引擎,其设计目标是在分布式环境下处理海量数据。为了实现这个目标,Elasticsearch将数据分割成多个分片,并在多台服务器上进行存储和处理。每个分片都是一个独立的Lucene索引,可以被分配到不同的节点上。 分片可以帮助Elasticsearch水平扩

    2024年02月17日
    浏览(9)
  • ES创建索引模板设置分片和副本数及时间格式问题

    ES创建索引模板设置分片和副本数及时间格式问题

    创建索引模板设置分片和副本及时间格式问题 一、创建索引模板 二、插入测试数据 三、查看索引情况(cerebro可视化插件) 查看分片和副本情况 查看字段 四、通kibana查看数据 五、最后补充下kibana设置时间格式显示问题

    2024年02月16日
    浏览(9)
  • elasticsearch的副本和分片的区别

    es/elasticsearch的副本和分片的区别 一:概念 (1)集群(Cluster): ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。 (2)节点(Node): 形成集群的每个服务器称

    2024年02月11日
    浏览(9)
  • Elasticsearch 的节点、集群、分片和副本 全面解析

    节点是 Elasticsearch 实例的运行实例,即一个独立的 Elasticsearch 服务进程。每个节点都是一个独立的工作单元,负责存储数据、参与数据处理(如索引、搜索、聚合等)以及参与集群的协调工作。节点可以在物理或虚拟机上单独部署,也可以在同一台机器上运行多个节点(但需

    2024年04月27日
    浏览(8)
  • ElasticSearch修改分片数和副本数及增加字段

    一、修改副本数 PUT test/_settings {     \\\"index\\\": {         \\\"number_of_replicas\\\" : 1     } } 二、修改分片数 ElasticSearch中的数据会被分别存储在不同的分片上,索引库的分片数量是在索引库创建的时候通过settings去设置的,如果不设置,分片数默认是5,分片数一旦确定就不能改变。如果

    2024年02月05日
    浏览(9)
  • OLAP系列:三、clickhouse Docker集群部署指南(3分片1副本模式)

    一是为了学习容器,另外也是帮助一些同学解决机器资源紧缺,能够在一台是宿主机部署一套clickhouse集群服务。 本章内容适合开发测试环境使用,生产环境还需要更多细节的处理工作,只能作为参考。 二、部署准备 1、机器准备 172.25.16.108 2、创建容器网络 3、镜像准备 1、下

    2024年02月12日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包