千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > Fielddata 详尽解读

Fielddata 详尽解读

来源:千锋教育
发布人:xqq
时间: 2023-11-23 12:03:14 1700712194

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 操作,需要根据具体的业务场景和数据量进行合理的性能优化,才能获得更好的使用效果。

tags: fp32和fp16
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT