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/zh-tw/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

發表回復

登錄後才能評論