ES 29 - 内核知识点之Doc_Values


搜索的时候,要依靠倒排索引;排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values在建立索引的时候,一方面会建立正排索引,也就是doc values,以供排序、聚合、过滤等操作使用

doc values是被保存到磁盘上的,此时如果内存足够,os会自动将其缓存在内存中,性能还会很高;如果内存不足够,os会将其写入磁盘上

 

doc_value是什么

绝大多数的fields在默认情况下是indexed,因此字段数据是可被搜索的。倒排索引中按照一定顺序存放着terms供搜索,当命中搜索时,返回包含term的document。terms 中包含很多term

Doc_values 本质上是一个序列化的 列式存储,这个结构非常适用于聚合(aggregations)、排序(Sorting)、脚本(scripts access to field)等操作。而且,这种存储方式也非常便于压缩,特别是数字类型。这样可以减少磁盘空间并且提高访问速度。

Doc values 为on-disk 数据结构,在document索引时被创建。Doc values 存放的values和 _source这个meta-Fields是一致的。支持除了analyzed string 以外的所有类型。

doc_value特性

doc_value 默认情况下是enable的
column-oriented(列式存储) 存放field,以便sort(排序)、aggregate(聚合)、access the field from a script(脚本)
disable doc_value:

PUT /bank
{
    "settings": {
        "number_of_shards": 2,
        "number_of_replicas": 0
    },
    "mappings": {
        "user": {
            "properties": {
                "name": {
                    "type": "keyword"
                },
                "address": {
                    "type": "text"
                },
                "age": {
                    "type": "integer",
                    "doc_value": false
                },
                "birthday": {
                    "type": "date"
                }
            }
        }
    }
}

DocValue其实是Lucene在构建倒排索引时,会额外建立一个有序的正排索引(基于document => field value的映射列表)

{“birthday”:“1985-11-11”,age:23}

{“birthday”:“1989-11-11”,age:29}

documentagebirthday
doc1231985-11-11
doc2291989-11-11

注意:默认对不分词的字段时开启的,对分词自读那无效(需要把fielddata设置为true)

disable doc_value会怎样

消极影响:sort、aggregate、access the field from script将会无法使用
积极影响:节省磁盘空间

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值