千家信息网

elasticsearch的doc_values

发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,Doc Values 是什么其实大部分 NoSQL在创建多个索引的时候也采用这种方式,就是再使用另一种方式存储一份文本,使得可以增强搜索。 Docvalues 通过转置两者间的关系来解决这个问题。倒排
千家信息网最后更新 2024年11月25日elasticsearch的doc_values

Doc Values 是什么

其实大部分 NoSQL在创建多个索引的时候也采用这种方式,就是再使用另一种方式存储一份文本,使得可以增强搜索。 Docvalues 通过转置两者间的关系来解决这个问题。倒排索引将词项映射到包含它们的文档, Docvalues 将文档映射到它们包含的词项:

Doc      Terms-----------------------------------------------------------------Doc_1 | brown, dog, fox, jumped, lazy, over, quick, theDoc_2 | brown, dogs, foxes, in, lazy, leap, over, quick, summerDoc_3 | dog, dogs, fox, jumped, over, quick, the-----------------------------------------------------------------

当数据被转置之后,想要收集到每个文档行,获取所有的词项就非常简单了。所以搜索使用倒排索引查找文档,聚合操作收集和聚合 DocValues 里的数据,这就是 ElasticSearch

深入理解 ElasticSearch Doc Values

DocValues 是在索引时与倒排索引同时生成。也就是说 DocValues倒排索引一样,基于 Segement 生成并且是不可变的。同时 DocValues倒排索引一样序列化到磁盘,这样对性能和扩展性有很大帮助。

DocValues 通过序列化把数据结构持久化到磁盘,我们可以充分利用操作系统的内存,而不是 JVMHeap 。 当 workingset 远小于系统的可用内存,系统会自动将 DocValues 保存在内存中,使得其读写十分高速; 不过,当其远大于可用内存时,操作系统会自动把 DocValues 写入磁盘。很显然,这样性能会比在内存中差很多,但是它的大小就不再局限于服务器的内存了。如果是使用 JVMHeap来实现那么只能是因为 OutOfMemory 导致程序崩溃了。

Doc Values 压缩

从广义来说, DocValues 本质上是一个序列化的 列式存储,这个结构非常适用于聚合、排序、脚本等操作。而且,这种存储方式也非常便于压缩,特别是数字类型。这样可以减少磁盘空间并且提高访问速度。下面来看一组数字类型的 DocValues

Doc      Terms  -----------------------------------------------------------------  Doc_1 | 100  Doc_2 | 1000  Doc_3 | 1500  Doc_4 | 1200  Doc_5 | 300  Doc_6 | 1900  Doc_7 | 4200  -----------------------------------------------------------------

你会注意到这里每个数字都是 100 的倍数, DocValues 会检测一个段里面的所有数值,并使用一个 最大公约数 ,方便做进一步的数据压缩。我们可以对每个数字都除以 100,然后得到: [1,10,15,12,3,19,42] 。现在这些数字变小了,只需要很少的位就可以存储下,也减少了磁盘存放的大小。

DocValues 在压缩过程中使用如下技巧。它会按依次检测以下压缩模式:

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

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

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

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

当然如果存储 String类型,其一样可以通过顺序表对 String类型进行数字编码,然后再把数字类型构建 DocValues

禁用 Doc Values

DocValues 默认对所有字段启用,除了 analyzed strings。也就是说所有的数字、地理坐标、日期、IP 和不分析( not_analyzed)字符类型都会默认开启。

analyzed strings 暂时还不能使用 DocValues,是因为经过分析以后的文本会生成大量的 Token,这样非常影响性能。

虽然 DocValues非常好用,但是如果你存储的数据确实不需要这个特性,就不如禁用他,这样不仅节省磁盘空间,也许会提升索引的速度。

要禁用 DocValues ,在字段的映射(mapping)设置 doc_values:false 即可。例如,这里我们创建了一个新的索引,字段 "session_id" 禁用了 DocValues

PUT my_index{  "mappings": {    "my_type": {      "properties": {        "session_id": {          "type":       "string",          "index":      "not_analyzed",          "doc_values": false         }      }    }  }}

通过设置 doc_values:false ,这个字段将不能被用于聚合、排序以及脚本操作

同样可以禁用倒排索引,使它不能被正常搜索,但是可以排序,例如:

PUT my_index{  "mappings": {    "my_type": {      "properties": {        "customer_token": {          "type":       "string",          "index":      "not_analyzed",          "doc_values": true,           "index": "no"         }      }    }  }}

通过设置 doc_values:trueindex:no ,我们得到一个只能被用于聚合/排序/脚本的字段。

索引 数字 内存 磁盘 类型 存储 字段 数据 文档 系统 排序 最大 公约数 序列 性能 数值 方式 最大公约数 脚本 搜索 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖北系统软件开发大概多少钱 需要从广义层面发展网络安全产业 机电高职软件开发 黄河鲲鹏服务器及pc机许昌 海康威视平台服务器不通闪红灯 高级网络技术命令 网络安全事件2018年 数据库异样是什么意思 深圳蓬莱网络技术有限公司 湖南智能软件开发要多少钱 数据库的恢复与安全性控制 电子发票邮件服务器有问题 我的世界中国版服务器中怎么建家 三级网络技术dchp报文 企业网络安全防护认证考试 sql数据库如何查询前200 兰帕网络技术深圳有限公司 青海网络软件开发定制大概价格 工伤鉴定软件开发 云服务器管理控制台 网络技术服务价格 ra系统里面需要数据库吗 数据库的应用 金融 保定橙道网络技术服务 重庆网络软件开发定制大概价格 网络安全培训考试试卷及答案 思想道德数据库 学校网络安全与第三方共建协议 网络安全的电子书 软件开发工作日常干嘛
0