带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(2)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(2)

《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.1.inverted index,doc_values,store及source(1) https://developer.aliyun.com/article/1231138


禁用索引

 

默认情况下,Elasticsearch 文档每个字段都会被索引。如果某些字段不需要支持查询,可以在映射中配置 "index": false ,减少存储空间占用,并且提升写入速度。

 

例如,文章的标题、正文、发布时间字段,需要创建索引,文章的 url 字段不需要被索引,创建索引映射时可以按以下方式禁用它:


PUT news
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "ik_max_word"
      },
      "content": {
        "type": "text",
        "analyzer": "ik_max_word"
      },
      "createtime": {
        "type": "date"
      },
      "url": {
        "type": "keyword",
        "index": false
      }
    }
  }
}

文档值

 

在 Elasticsearch 中,Doc Values 是一种列式存储结构。Doc Values 默认对所有字段启用,除了 text 和 annotated_text 类型字段。

 

Doc Values 是在索引时创建的,当字段索引时,Elasticsearch 为了能够快速检索,会把字段的值加入倒排索引中,同时它也会存储该字段的 Doc Values。

 

Elasticsearch 中的 Doc Values 常被应用到以下场景:

 

l 对一个字段进行排序

l 对一个字段进行聚合

l 某些过滤,比如地理位置过滤

l 某些与字段相关的脚本计算

l 使用 docvalue_fields 返回搜索结果部分字段值

 

因为文档值被序列化到磁盘,可以依靠操作系统的帮助来快速访问。当数据集远小于节点的可用内存,操作系统会自动将所有的 Doc Values 保存在内存中,使得其读写十分高速;当其远大于可用内存,操作系统会自动把 Doc Values 加载到系统的页缓存中,从而避免了 JVM 堆内存溢出异常。

 

列式存储的压缩

 

Doc Values 本质上是一个序列化的列式存储,适用于聚合、排序、脚本等操作。这种存储方式


也非常便于压缩,特别是数字类型,这样可以节约磁盘空间,并且提高访问速度。

 

来看一组数字类型的 Doc Values,了解它如何压缩数据:


image.png


按列布局意味着我们有一个连续的数据块:[100,1000,1500,1200,300,1900,4200]。

 

因为我们已经知道他们都是数字,而不是像文档或行中看到的异构集合,所以我们可以使用统一的偏移来将他们紧紧排列。

 

而且,针对这样的数字有很多种压缩技巧。你会注意到这里每个数字都是 100 的倍数,Doc

Values 会检测一个段里面的所有数值,并使用一个最大公约数,方便做进一步的数据压缩。

 

如果我们保存100 作为此段的除数,我们可以对每个数字都除以100,然后得到: [1,10,15,12,3,19,42]。

 

现在这些数字变小了,只需要很少的位就可以存储下,也减少了磁盘存放的大小。Doc Values 在压缩过程中使用如下技巧,它会按依次检测以下压缩模式:

 

1如果所有的数值各不相同或缺失,设置一个标记并记录这些值

2如果这些值小于 256,将使用一个简单的编码表

3如果这些值大于 256,检测是否存在一个最大公约数

4如果没有存在最大公约数,从最小的数值开始,统一计算偏移量进行编码

 

你会发现这些压缩模式不是传统的通用压缩算法,比如 DEFLATE 或者 LZ4。因为列式存储的结构是严格且良好定义的,我们可以通过使用专门的模式来达到,比通用压缩算法(如 LZ4)更高的压缩效果。

 

《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.1.inverted index,doc_values,store及source(3) https://developer.aliyun.com/article/1231136

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
12月前
|
存储 JSON 数据格式
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(4)
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(4)
|
12月前
|
索引
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(3)
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(3)
|
12月前
|
算法 索引
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(1)
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(1)
|
12月前
|
存储 API 索引
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(5)
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(5)
|
12月前
|
API 网络架构 索引
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(1)
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(1)
|
12月前
|
存储 API 索引
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(6)
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(6)
|
12月前
|
API 索引
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(3)
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(3)
|
12月前
|
索引
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(4)
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(4)
|
12月前
|
JSON API 数据格式
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(2)
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(2)
|
12月前
|
索引
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(5)
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(5)