elasticsearch的doc_values


Doc Values 是什么其实大部分 NoSQL在创建多个索引的时候也采用这种方式,就是再使用另一种方式存储一份文本,使得可以增强搜索Docvalues 通过转置两者间的关系来解决这个问题。倒排索引将词项映射到包含它们的文档, Docvalues 将文档映射到它们包含的词项:当数据被转置之后,想要收集到每个文档行,获取所有的词项就非常简单了。所以搜索使用倒排索引查找文档,聚合操作收集和聚合 DocValues 里的数据,这就是 ElasticSearchDocValues 是在索引时与倒排索引同时生成。也就是说 DocValues倒排索引一样,基于 Segement 生成并且是不可变的。同时 DocValues倒排索引一样序列化到磁盘,这样对性能和扩展性有很大帮助。DocValues 通过序列化把数据结构持久化到磁盘,我们可以充分利用操作系统的内存,而不是 JVMHeap 。 当 workingset 远小于系统的可用内存,系统会自动将 DocValues 保存在内存中,使得其读写十分高速; 不过,当其远大于可用内存时,操作系统会自动把 DocValues 写入磁盘。很显然,这样性能会比在内存中差很多,但是它的大小就不再局限于服务器的内存了。如果是使用 JVMHeap来实现那么只能是因为 OutOfMemory 导致程序崩溃了。Doc Values 压缩从广义来说, DocValues 本质上是一个序列化的 列式存储,这个结构非 香港云主机常适用于聚合、排序、脚本等操作。而且,这种存储方式也非常便于压缩,特别是数字类型。这样可以减少磁盘空间并且提高访问速度。下面来看一组数字类型的 DocValues:你会注意到这里每个数字都是 100 的倍数, DocValues 会检测一个段里面的所有数值,并使用一个 最大公约数 ,方便做进一步的数据压缩。我们可以对每个数字都除以 100,然后得到: [1,10,15,12,3,19,42] 。现在这些数字变小了,只需要很少的位就可以存储下,也减少了磁盘存放的大小。DocValues 在压缩过程中使用如下技巧。它会按依次检测以下压缩模式:如果所有的数值各不相同(或缺失),设置一个标记并记录这些值如果这些值小于 256,将使用一个简单的编码表如果这些值大于 256,检测是否存在一个最大公约数如果没有存在最大公约数,从最小的数值开始,统一计算偏移量进行编码当然如果存储 String类型,其一样可以通过顺序表对 String类型进行数字编码,然后再把数字类型构建 DocValues禁用 Doc ValuesDocValues 默认对所有字段启用,除了 analyzed strings。也就是说所有的数字、地理坐标、日期、IP 和不分析( not_analyzed)字符类型都会默认开启。analyzed strings 暂时还不能使用 DocValues,是因为经过分析以后的文本会生成大量的 Token,这样非常影响性能。虽然 DocValues非常好用,但是如果你存储的数据确实不需要这个特性,就不如禁用他,这样不仅节省磁盘空间,也许会提升索引的速度。要禁用 DocValues ,在字段的映射(mapping)设置 doc_values:false 即可。例如,这里我们创建了一个新的索引,字段 "session_id" 禁用了 DocValues:通过设置 doc_values:false ,这个字段将不能被用于聚合、排序以及脚本操作同样可以禁用倒排索引,使它不能被正常搜索,但是可以排序,例如:通过设置 doc_values:trueindex:no ,我们得到一个只能被用于聚合/排序/脚本的字段。

相关推荐: 也谈SAP业务顾问如何避免被ABAP开发顾问怒打

也谈SAP业务顾问如何避免被ABAP开发顾问怒打 近期一个视频火了,说是中国平安一个产品经理和APP开发人员在办公室直接扭打起来。据说是因为该产品经理向程序员提出了一个需求,要求用户APP的主题颜色能根据手机壳自动调整。可能是开发程序员对于这个需求很是愤怒与绝…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/24 16:10
下一篇 07/24 16:10

相关推荐