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

简介: 带你读《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

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
JSON Dubbo 测试技术
junit5单元测试自动生成最佳实践
在对比了几款插件后,最终选择了重新打造一套适合自己的插件。参看:【谈一谈单元测试】插件安装本地安装[文件: jcode5-1.0-SNAPSHOT.zip] 请在PC端预览或下载idea插件市场下载,搜索JCode5            插件使用插件有三个功能生成测试代码,也就是生成单元测试。生成json数据,通常用来生成测试数据,比如model。用来参数化测试。增加测试方法,随着业务开发,类可
3027 0
junit5单元测试自动生成最佳实践
|
5月前
|
存储 人工智能 JSON
AI 成为主流负载后,数据基础设施将如何演进?|Apache Doris 2026 Roadmap
Scale Intelligence, Accelerate Insight,不仅是年度主题,也定义了 Doris 在 AI 时代的演进方向。
537 0
|
6月前
|
缓存 监控 API
使用API获取新加坡股票数据的完整指南
本文为开发者提供获取新加坡股票数据的完整API指南,涵盖股票列表、历史K线、STI指数等核心接口调用方法,附Python实战示例(含实时监控、量化回测、WebSocket订阅与缓存优化),助力金融科技应用高效开发。(239字)
|
缓存 计算机视觉 数据格式
成功解决cv2.imwrite(filename, img)代码输出中文文件乱码的问题(cv2.imencode方法解决
成功解决cv2.imwrite(filename, img)代码输出中文文件乱码的问题(cv2.imencode方法解决)
成功解决cv2.imwrite(filename, img)代码输出中文文件乱码的问题(cv2.imencode方法解决
|
3月前
|
人工智能 供应链 小程序
从0到1搭建餐饮门店点餐预约配送小程序
本文详解餐饮小程序从0到1的搭建全过程,涵盖需求分析、模块设计(商品/购物车/预约/订单/配送/支付)、系统架构、多门店管理及云部署等关键环节,助力商家构建自主可控的数字化经营体系。(239字)
|
4月前
|
人工智能 监控 搜索推荐
AI购物搜索的底层秘密:你的商品为何被推荐,又为何被淹没
本文揭秘2026年AI购物搜索底层逻辑:告别关键词竞价,转向“意图拆解—知识库匹配—上下文排序”新范式。详解千问×淘宝、豆包×抖音两大战场,揭示GEO优化核心——聚焦行业高权重信源、结构化商品信息、统一主体深耕,助中小商家破局AI流量红利。(239字)
|
存储 机器学习/深度学习 人工智能
Elasticsearch:使用阿里云 AI 服务进行向量化和重新排名
本文介绍了如何将阿里云 AI 功能与 Elasticsearch 集成,以提高语义搜索的相关性。
1003 0
|
Prometheus Kubernetes 负载均衡
带你读《Elastic Stack 实战手册》之15:——3.4.1.8. ECK 安装(1)
带你读《Elastic Stack 实战手册》之15:——3.4.1.8. ECK 安装(1)
690 0
|
存储 缓存 弹性计算
阿里云Optane+QLC存储实践案例分享
本文主要分享主题在阿里云本地盘存储中,基于Optane SSD和SPDK WSR的功能,降低QLC SSD的写放大。
|
缓存 算法 网络协议
Ch3.数据链路层(四)
数据链路层是OSI参考模型中的第二层,介乎于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自物理层来的数据可靠地传输到相邻节点的目标机网络层。
1295 0

热门文章

最新文章