• 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"

    }

    }

    }

    }

  • 相关阅读:
    1.1. 哪一种 Python 适合您?
    使用自定义的 grafana插件
    ubuntu更换pip源
    安装gitlfs
    密钥配置
    java学习ArrayList集合讲解
    java学习Scanner常用类学习
    java学习猜数字游戏
    java学习匿名对象
    java学习一个标准类
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8542101.html
Copyright © 2020-2023  润新知