zoukankan      html  css  js  c++  java
  • 57.fielddata预加载机制以及序号标记预加载

    如果真的要对分词的field执行聚合,那么每次都在query-time的同时由es生成fielddata并加载到内存中来,速度可能会比较慢,性能很差,改善性能的方式就是预先生成fielddata值并加载到内存中去。

       

    一、fielddata预加载

       

    POST /test_index/_mapping/test_type

    {

    "properties": {

    "test_field": {

    "type": "string",

    "fielddata": {

    "loading" : "eager"

    }

    }

    }

    }

    这样就把fielddata的生成从query-time变为index-time,在建立倒排索引的时候,会同步生成fielddata并且加载到内存中来,这样的话,对分词field的聚合性能当然会大幅度增强。

       

    二、序号标记预加载

       

    在一些doc中会有很多重复值,es在加载到内存时不会完全加载这些重复的值,只会加载一些序号标记,这样就可以大幅度的减少内存的使用。比如有如下四个doc,值分别对应:

    • doc1: status1
    • doc2: status2
    • doc3: status2
    • doc4: status1

    在有很多重复值的情况,es会进行global ordinal标记

    • status1 标记为 0
    • status2 标记为 1

    这样这四个doc所对应的标记就是:

    • doc1: 0
    • doc2: 1
    • doc3: 1
    • doc4: 0

    建立的fielddata也会是这个样子的,这样的好处就是减少重复字符串的出现的次数,减少内存的消耗

       

    POST /test_index/_mapping/test_type

    {

    "properties": {

    "test_field": {

    "type": "string",

    "fielddata": {

    "loading" : "eager_global_ordinals"

    }

    }

    }

    }

  • 相关阅读:
    Windows Message ID 常量列表大全
    C#中Thread与ThreadPool的比较
    HTML元素隐藏和显示
    Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警
    Windbg DUMP分析(原创汇总)
    计算密集型分布式内存存储和运算平台架构
    从.net到java,从基础架构到解决方案。
    C# 泛型集合
    你该怎么选Offer
    C++ 虚拟桌面
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8542101.html
Copyright © 2011-2022 走看看