• segments&cache


    Segments

    执行效果

    • 命令  在 sense 里边执行  GET /abcd/_segments  前边的是索引名称,后边是请求 段信息
    • 说明  索引是面向分片的,是由于索引是由一个或多个分片(以及它的副本)构成,每个分片就是一个物理上的Lucene索引
    • 返回

    名词解释

    • 已提交索引段:指那些已经执行了提交命令的段,意味着已经提交到磁盘持久化并且是只读的;
    • 可查询索引段:可供查询使用的索引段;
    • 索引的代:告诉我们索引有多“老”,起初创建的索引段的代为0,接着是1,依次继续;
    • 被标记为已删除的索引数:这些文档会在索引段合并的过程中被删除;

    Cache

    分类

    • 过滤器缓存
    • 字段数据缓存

    哪些场景会使用到缓存

    • 父子索引
    • 切面
    • 基于索引字段的高效排序

    过滤器缓存

    索引级过滤器缓存

    index.cache.filter.type:类型 resident,soft,weak或node(默认值)

    index.cache.filter.max_size:存储到缓存中的最大纪录数,默认为-1,应用于指定索引的某个分片的某个索引段上;

    index.cache.filter.expire:指定过滤器缓存中记录的过期时间,默认为-1,60m代表60分钟;

    节点级别过滤器缓存

    应用于给定节点的所有分片,可以利用下边的参数设置缓存的大小:

    indices.cache.filter.size:可以使用百分数 1% 占用当前最大堆内存的百分比,也可以设置数字 如 1024mb

    移除策略:LRU

    字段数据缓存

    说明

    字段数据缓存在我们涉及到 切面计算 或 基于字段数据排序使用

    做法:加载相关字段的全部数据到内存中。

    配置

    index.fielddata.cache.type:同上

    index.fielddata.cache.size:同上

    index.fielddata.cache.expire:同上

    过滤

    上边的索引尤其是字段索引都是es的默认机制,将 切面计算的字段和排序的字段做的默认的fielddata索引,

    现在我们选择性的将一些字段数据缓存做一个定制化

    这样做的好处是:将一些低频词项甚至是错误的词从字段缓存中删除,降低字段缓存的总量;

    基于词频和正则表达式过滤

    只加载那些词频高于指定最小值且低于指定最大值的词项,词项的范围是针对索引段的。

     1 {
     2 ...
     3   properties:{
     4     "field":{
     5         "type":"string",
     6         "index":"not_anlyzed",
     7         "fielddata":{
     8             "filter":{
     9                 "frequency":{
    10                     "min":0.01,     词项出现频率大于1%
    11                     "max":0.4,      词项出现频率小于40%
    12                     "min_segment_size":100    该索引段至少要有100个文档
    13                 },
    14                 “regex”:"^#.*"   词项必须以#开头
    15             }
    16         }
    17     }
    18   }
    19 }
    20   
    21 只有符合以上过滤条件的 词项 才会被缓存

    清除缓存

    • 清除全部缓存      _cache/clear
    • 清除指定缓存      index/_cache/clear
    • 清除指定类型缓存     index/_cache/clear?filter=true&field_data=false&bloom=true   清除索引的filter缓存和bloom缓存,保留fielddata字段数据缓存
    • 清除指定字段缓存     index/_cache/clear?fields=title,price  清除字段为field和price的全部缓存

    问题

    1. filtercache是如何存储和获取的?
    2. fielddatacache是如何存储和获取的?
    3. segments的创建和merge机制是怎样的?
  • 相关阅读:
    Linux下查看文件和文件夹大小的df和du命令(链接)
    路由的原理和作用[赛迪网]
    select 好用插件
    如何启动/停止/重启MySQL
    Spirng quartz 整合
    String,StringBuffer与StringBuilder的区别
    如何给input[file]定义cursor
    dns简介
    浏览器高级对象
    shell 学习文章列表
  • 原文地址:https://www.cnblogs.com/zhangxiaoguang/p/es_segments_cache.html
Copyright © 2020-2023  润新知