ElasticSearch Doc Values

倒排索引

ElasticSearch之所以搜索这么快速,归功于他的倒排索引的设计。

从上图可以看出,词对应的doc,但是并不知道每一个doc中的内容,那么如果想要排序的话每一个doc都去获取一次文档内容非常耗时。Doc Values的出现使得这个问题迎刃而解。

Doc Values

倒排索引将词项映射到包含它们的文档,doc values 将文档映射到它们包含的词项:

当数据被转置之后,想要收集到 Doc_1 和 Doc_2 的唯一 token 会非常容易。

Doc Values使用

Doc Values 是在索引时与倒排索引同时生成。默认情况下每个字段的 Doc Values 都是激活的,除了 analyzed strings。也就是说 Doc Values 和倒排索引一样,基于 Segement 生成并且是不可变的。同时 Doc Values 和倒排索引一样序列化到磁盘,这样对性能和扩展性有很大帮助。

Doc Values 通过序列化把数据结构持久化到磁盘,我们可以充分利用操作系统的内存,而不是 JVM 的 Heap 。 当 working set 远小于系统的可用内存,系统会自动将 Doc Values 保存在内存中,使得其读写十分高速; 不过,当其远大于可用内存时,操作系统会自动把 Doc Values 写入磁盘。很显然,这样性能会比在内存中差很多,但是它的大小就不再局限于服务器的内存了。

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

  • 对一个字段进行排序
  • 对一个字段进行聚合
  • 某些过滤,比如地理位置过滤
  • 某些与字段相关的脚本计算

Doc Values缺点是需要额外的空间来保存,如果你存储的数据确实不需要这个特性,就不如禁用他,这样不仅节省磁盘空间,也许会提升索引的速度。在字段的映射(mapping)设置 doc_values: false 即可。

转载于:https://juejin.im/post/5c88ec13f265da2ddc3cb9dc

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值