Fielddata 详尽解读

Fielddata 是 Elasticsearch 中的一个术语,指的是一些字段上值的聚合操作。ES 默认情况下,对于每个字段,都会存储原始的值和倒排索引来支持搜索。然而,在某些场景下,我们也需要聚合数据,计算最小、最大、平均值等指标,这就用到了 fielddata。下面将从几个方面对 fielddata 进行详细解读。

一、基础概念

Fielddata 中有两种类型的值:doc value 和 fielddata cache。其中,doc value 本质是一种优化索引的方式,可以加速排序和聚合操作。doc value 值是预先计算好的存储在内存中的值。相比之下,fielddata cache 存储在磁盘上的原始值,需要在聚合操作时再进行计算。fielddata cache 默认情况下是禁用的,需要手动启用。

二、聚合操作

聚合操作是 Elasticsearch 中 fielddata 的一个核心使用场景。最简单的聚合操作是计算最大值、最小值、平均值和唯一值,可以通过以下语句进行实现:

GET /my_index/_search
{
    "aggs": {
        "max_amount": { "max": { "field": "amount" } },
        "min_amount": { "min": { "field": "amount" } },
        "avg_amount": { "avg": { "field": "amount" } },
        "unique_tags": { "cardinality": { "field": "tags" } }
    }
}

另外,我们还可以使用 fielddata 对文本进行聚合操作。例如,以下语句计算商品品牌的销售总量:

GET /my_index/_search
{
    "aggs": {
        "brand_sales": {
            "terms": {
                "field": "brand.keyword"
            },
            "aggs": {
                "total_sales": {
                    "sum": {
                        "field": "sales"
                    }
                }
            }
        }
    }
}

三、性能优化

Fielddata 相对于一些常用的 Elasticsearch 操作(如搜索)是非常消耗资源的。因此需要一定的性能优化。常见的优化方式包括:

1、启用 doc value

启用 doc value 可以提升排序、聚合操作的性能,占用更少的内存。

PUT my_index/_mapping/my_type
{
  "properties": {
    "my_field": {
      "type": "long",
      "doc_values": true
    }
  }
}

2、避免全量操作

避免全量操作可以大大减少聚合操作的耗时。因此,需要明确设置聚合、搜索、查询、过滤和排序等操作的范围和目标,尽量不对全部数据执行操作。

3、增加缓存大小

fielddata 的 cache 默认是 30% JVM 堆空间。如果数据量较大,缓存可能会非常满,导致性能问题。可以通过增加缓存大小解决这个问题。

PUT /my_index/_settings
{
    "index": {
        "fielddata": {
            "cache": {
                "size": "40%"
            }
        }
    }
}

4、合理使用 filter

filter 比 query 更快,因为它可以减少 fielddata 的工作。过滤多个聚合操作时,尽量使用 filter 而不是 query。

四、总结

本文介绍了 Elasticsearch 中的 fielddata,讨论了其基础概念、聚合操作和性能优化。对于线上环境中的 fielddata 操作,需要根据具体的业务场景和数据量进行合理的性能优化,才能获得更好的使用效果。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/303335.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-31 11:49
下一篇 2024-12-31 11:49

相关推荐

  • master_auto_position的详尽解析

    一、master_auto_position的概述 master_auto_position是一个自动化地控制DOM元素的位置的JavaScript库。它可以将元素定位于父元素的中…

    编程 2025-01-03
  • Lasso算法的详尽解析

    一、Lasso算法详解 Lasso(Least Absolute Shrinkage and Selection Operator)是一种线性回归分析工具,它在普通最小二乘估计(O…

    编程 2024-12-29
  • ElasticsearchRange: 详尽解析

    ElasticsearchRange 是 Elasticsearch 中的一种常见查询方式,通过指定一个范围来查询某个字段的数据。在实际应用中,它的使用非常广泛。在本文中,我们将从…

    编程 2024-12-12
  • mac卸载docker详尽指南

    一、mac卸载软件 1、Mac当中的软件卸载并非像Windows系统那样容易,需要以下步骤:Finder->应用程序->找到需要卸载的软件->右键点击->选…

    编程 2024-11-25
  • ASPACCESS详尽解析

    一、ASPACCESS搭建 1、ASPACCESS是一款基于Windows的权限管理系统,需要按照以下步骤进行搭建: Step1. 下载ASPACCESS安装包; Step2. 解…

    编程 2024-11-10
  • Oracle除法函数的详尽解析

    一、Oracle除法函数公式 Oracle数据库中的除法运算符为“/”,使用该运算符进行除法运算时,如果除数或被除数有空值(null),则结果也将为空值(null)。下面是Orac…

    编程 2024-10-03
  • c语言优先级详尽列表,C语言优先级最高

    本文目录一览: 1、c语言优先级是什么? 2、c语言运算符的优先级 3、c语言中运算符有哪几种,优先级顺序是怎样 4、c语言所有运算的优先级?? 5、C语言运算符优先级顺序 6、c…

    编程 2024-10-03

发表回复

登录后才能评论