什么是docValues?

docValues是一种记录doc字段值的一种形式,在例如在结果排序和统计Facet查询时,需要通过docid取字段值的场景下是非常高效的。

为什么要使用docValues?

这种形式比老版本中利用fieldCache来实现正排查找更加高效,更加节省内存。倒排索引将字段内存切分成一个term列表,每个term都对应着一个docid列表,这样一种结构使得查询能够非常快速,因为term对应的docid是现成就有的。但是,利用它来做统计,排序,高亮操作的时候需要通过docid来找到,field的值却变得不那么高效了。之前lucene4.0之前会利用fieldCache在实例启动的时候预先将倒排索引的值load到内存中,问题是,如果文档多会导致预加载耗费大量时间,还会占用宝贵的内存资源。

索引在lucene4.0之后引入了新的机制docValues,可以将这个理解为正排索引,是面向列存储的。

DocValues和 field的存储值(field属性设置为stored=“true”)有什么区别?

docValues和document的stored=ture存储的值,都是正排索引,单也是有区别的:

l  存储方式:

DocValues是面向列的存储方式,stored=true是面向行的存储方式,如果通过fieldid取列的值可定是用docValues的存储结构更高效。

l  是否分词:

Stored=true的存储方式是不会分词的,会将字段原值进行保存,而docValues的保存的值会进行分词。

DocValues的实现

docValues的类型:

查了一下lucene的源码,发现DocValues有四种实现方式:

  1. Memory

l  实现类:org.apache.lucene.codecs.memory.MemoryDocValuesFormat

运行时正排数据会全部加载到内存中,这部分数据在内存中是压缩存储的

  1. Direct

l  实现类:org.apache.lucene.codecs.memory.DirectDocValuesFormat

导入到内存中不压缩使用,这个实际使用的效果应该和老版本的fieldcache差不多吧

  1. SimpleText

l  实现类:org.apache.lucene.codecs.simpletext.SimpleTextDocValuesFormat

这个只是当娱乐只用,不用在环境中使用

以上三种类型定义在lucene-codecs-5.3.0.jar的META-INF/services目录下

  1. Lucene50(默认使用)

l  实现类:org.apache.lucene.codecs.lucene50.Lucene50DocValuesFormat

Lucene50定义存放在lucene-core-5.3.0.jar的META-INF/services目录下

Lucene50的实现方式和Memory的实现方式大同小异,支持的字段类型更加丰富

在lucene50中将docValues的值分成5种类型:

  1. Numeric
  2. Binary
  3. Sorted
  4. SortedSet
  5. SortedNumeric

类型是由Schema中的field类型决定的:

l  StrField或者UUIDField

如果字段不是多值字段,则类型是SORTED

如果是多值字段,则类型是SORTED_SET

l  数值字段Trie*或者EnumField

如MultiValue=false,则NUMERIC

如MultiValued=true,则SORTED_SET

如何使用

Schema field字段设置

<field name="manu_exact"

type="string" indexed="false" stored="false"

docValues="true" />

另外可以通过fieldtype的docValuesFormat属性来设置docValue的实现策略:

<fieldType name="string_in_mem_dv"

class="solr.StrField" docValues="true"

docValuesFormat="Memory" />

总结

如果在索引上要进行facet,gourp,highlight等查询尽量使用docValue,这样不用为内存开销烦恼了。

例如:solr4.0之后都会需要在schema中设置一个­­­_version_字段来实现对文档的原子操作,为了节省内存,可以加上docValues:

<field name="_version_"

type="long" indexed="true" stored="true" docValues="true"/>

一个朋友分析得不错的

http://blog.csdn.net/zteny/article/details/60633374

apache官方说明:

https://cwiki.apache.org/confluence/display/solr/DocValues

转自:http://mozhenghua.iteye.com/blog/2275932

转载于:https://www.cnblogs.com/bonelee/p/6669306.html

lucene DocValues——本质是为通过docID查找某field的值相关推荐

  1. Lucene DocValues详解

    今天斗胆来试试DocValues,对于DocValues我想大家都不会觉得陌生,同时又不是非常熟悉,就是那种熟悉而又陌生的感觉. 一.docValues是什么鬼呢? DocValues在LUCENE- ...

  2. 用指针查找数组中温度值为32的天数

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p92 5.1.2 上级实训内容 [实训内容4]假设一个数组用于存储一周7天,每天24小时温度的度数,数 ...

  3. opencv cv2.LUT()(使用查找表中的值填充输出数组)

    from cv2.__init__.py def LUT(src, lut, dst=None): # real signature unknown; restored from __doc__&qu ...

  4. Excel插件:按范围查找,按格式查找,标示相同值

    Excel内置的查找功能只能查找等于某某值的单元格, Excel插件:按范围查找,按格式查找,标示相同值

  5. vlookup匹配值不唯一_突破VLOOKUP函数限制,查找多个对应值

    原标题:突破VLOOKUP函数限制,查找多个对应值 题外话:卢子从今天起联合了一些会计公众号开始送资料,正常安排在第2篇,会持续送很多天,大家按自己需要下载. VLOOKUP函数很神奇,不过并非万能查 ...

  6. 有序数组二分查找最接近的值

    有序数组二分查找最接近的值 问题 思路 代码 循环的终止条件 如何改为求upper_bound 问题 给你一个有序数组,数组里面有正有负,有重复值,再给你扔一个target 数,求这个数组中最接近ta ...

  7. 关于二分查找算法中中间值的获取

    关于二分查找算法中中间值的获取 //left是左边元素索引的变量,right是右边元素索引的变量 int mid = (left + right) / 2; //这样写的话可能会出现问题,当数组中的元 ...

  8. 在Excel中根据条件查找匹配多个值

    在Excel中根据条件查找匹配多个值(vlookup只能匹配第一个值) 之前在深圳的时候就被问过这个问题,今天又遇到同事在问,索性记录在此. 如下图,根据E列的值,在A列中查找对应的数据,输出匹配行上 ...

  9. 如何在excel UiPath中查找范围内的值

    如何在excel UiPath中查找范围内的值 我们经常在自动化业务流程的同时使用 excel 文件. 如果要在该 excel 文件中查找某个范围内的值以获取搜索值的地址. 我们如何才能完成这项任务? ...

最新文章

  1. 云职教课堂计算机文化基础,2020智慧职教云课堂计算机文化基础答案最新最全单元测试答案...
  2. 宇宙条一面:十道经典面试题解析
  3. 【Python基础】Pandas数据可视化原来也这么厉害
  4. centos yum安装nginx 提示 No package nginx available问题解决方法
  5. 语句 查询每个人每个科目的最高分_转行数据分析师专栏(SQL篇)-05多表查询...
  6. vs2015企业版密钥
  7. 10、存储过程、while语句
  8. 使用Axis2方式发布webService实例说明
  9. Docker入门系列(一):目标和安排
  10. 关于 SQLNET.AUTHENTICATION_SERVICES 验证方式的说明
  11. 深度 | 人工智能究竟能否实现?
  12. 外部IC寄存器的位定义
  13. W(hadoop).Permission denied: user=dr.who, access=WRITE, inode=“/output“:root:supergroup:drwxr-xr-x
  14. 错误specificity:nan
  15. 【转载】 Sqlserver使用Left函数从最左边开始截取固定长度字符串
  16. 数据结构之线性表----一文看懂顺序表、单链表、双链表、循环链表
  17. 网卡驱动修改服务器,网卡驱动配置
  18. CRNN:文本序列识别
  19. [杀鸡用鸡刀]扯谈“快准狠”的去服务化商业模式
  20. idea 设置黑色或白色背景以及图片背景

热门文章

  1. 利用libevent 和线程池实现高并发服务器的设计
  2. 二. 主流视频编码标准的发展
  3. 鸿蒙 github harmony,鸿蒙HarmonyOS三方件开发指南-SwipeLayout侧滑删除
  4. conlleval_[转载]CRF++的使用总结
  5. 软件性能测试瓶颈定位,软件性能问题正确定位思路
  6. 倪海厦天纪笔记16_倪海厦老师讲解天纪易经——第3集(13)
  7. mysql子查询设置_什么是mysql子查询?如何利用子查询进行过滤?
  8. git pull 报错:git - error: RPC failed; curl 18 transfer closed with outstanding read data remaining 解决
  9. 【原理+实战+视频+源码】java更新无法下载所需安装文件
  10. python【力扣LeetCode算法题库】27-移除元素