1.4.9 DocValues
DocValues
在solr4.2以后,引入了一个令人兴奋的功能,这个功能在lucene存在已经一段时间了,但是还没有在solr中使用.
在某些方面,DocValue 是一种非常有效的索引方式.
为什么用DocValues?
标准的建立索引方式是一中倒排序索引方式,这种方式就是对索引中的所有文档的词语(terms)构造一个列表,挨着term是一个词语(term)所属文档的列表(同样包含词语在一篇文档中出现的次数).这种方式会使搜索速度很快,因为用户通过词语来搜索的,有一个准备好的词语到文档关系的值会使查询处理非常快.
对于其他常见的搜索相关的功能,如排序,分面,高亮.这种方法并不是很有效.这个分面工具,必须查找每篇文档中的每一个词语,然后组成结果集列表,抽取文档的id用来构建分面结果列表.在solr中,这主要是在内存中,并且加载比较慢.(主要依赖于文档数,词数terms等.)
在lucene4.0中,引入了一个新的方法,DocValue字段现在是一个以列为主的字段,具有在索引的时候构建的文档到值(document-to-value)的映射.这个方法保证减轻了一些字段缓存的内存要求,并且是查找分面,排序,分组速度更快.
如何使用DocValue
使用DocValue,只需要在field中开启即可.就整个框架(schema)来说,你需要定义一个字段类型,然后使用docValues定义那个字段类型的字段.所有的这些动作都是在schema.xml中完成的.
使DocValue生效,只需要docValue="true"即可,例子如下:
<field name="manu_exact" type="string" indexed="false" stored="false" docValues="true"/>
在solr4.5以前,使用docValues的字段不能为空,在solr4.5以后,这个限制已经取消.
提示:如果你已经索引过你的数据,在schem.xml改变之后,需要重新建立索引,这样才能使docValue起到作用.
DocValue只对于指定的字段类型有作用.类型的选择,决定了下面使用的Lucene DocValue的类型.可用的solr字段类型是:
字符串字段类型:strField
如果是单值字段,Lucene将使用SORTED类型.
如果是多值字段,Lucene将使用SORTED_SET类型.
所有的Trie*类型:
如果是单值字段,Lucene将使用NUMERIC类型
如果是多值字段,Lucene将使用SORTED_SET类型.
UUID字段.
这些Lucene的类型关系到这些值是如何排序和存储的.
还有一个配置选项可用,在字段类型中修改docValuesFormat.默认的实现是使用一个混合的加载,一部分东西在内存中,一部分东西在硬盘上.在有些情况下,你可能会选择保存所有的东西在硬盘上或者保存所有的东西到内存中,你可以在字段类型中定义docValuesFormat="Disk"或者docValuesFormat="Memory"来实现.
<fieldType name="string_ondisk" class="solr.StrField" docValuesFormat="Disk" />
这个选项,保存所有东西到硬盘上降低了性能.但是它试着保持了一个合理的性能.即使这样它仍旧比字段缓存(fieldCache)好.保存所有东西到内存中可能会增加对内存要求.
请注意docValuesFormat选项在将来可能会发生改变.
DocValue对solr来说是一个很新的东西,更多背景知识请参考:
Introducing Lucene Index Doc Values
Fun with DocValues in Solr 4.2
1.4.9 DocValues的更多相关文章
- docvalues和Fieldcache
Fieldcache: docID->document->fieldvalue 无论是聚类排序关联等,首先都需要获得文档中某个字段的值,通过docID去获得整个document,然后再去 ...
- Lucene中string docvalues使用utf-16的优化
原来的string docvalues使用utf-8编码,载入时转码花费大量时间,我们把转码实现从new String(bytes, "UTF-8")改用lucene的bytesR ...
- Solr4.2 新特性 DocValues [转]
原文地址http://wiki.apache.org/solr/DocValues DocValues从Lucene4.2和Solr4.2开始加入,通过建立字段的正排索引,提升sorting, fac ...
- Solr DocValues详解
前言: 在Lucene4.x之后,出现一个重大的特性,就是索引支持DocValues,这对于广大的solr和elasticsearch用户,无疑来说是一个福音,这玩意的出现通过牺牲一定的磁盘空间带来的 ...
- Elasticsearch中的DocValues
Elasticsearch最近一段时间非常火,以致于背后的公司都改名为Elastic了,因为Elasticsearch已经不仅限于搜索,反而更多的用在大数据分析场景,所以在公司品牌上开始“去Searc ...
- 使用ByteRef加速String类型DocValues的载入
眼下商户索引DocValues很大,warmup时花费70-80秒(在beta环境),有62秒在载入DocValues,发现当中有54秒时间在载入string docvalues,string doc ...
- 时间序列数据库——索引用ES、聚合分析时加载数据用什么?docvalues的列存储貌似更优优势一些
加载 如何利用索引和主存储,是一种两难的选择. 选择不使用索引,只使用主存储:除非查询的字段就是主存储的排序字段,否则就需要顺序扫描整个主存储. 选择使用索引,然后用找到的row id去主存储加载数据 ...
- Solr 中的 docValues=true
前言: 在Lucene4.x之后,出现一个重大的特性,就是索引支持DocValues,这对于广大的solr和elasticsearch用户,无疑来说是一个福音,这玩意的出现通过牺牲一定的磁盘空间带来 ...
- lucene DocValues——本质是为通过docID查找某field的值 看图
Why DocValues? The standard way that Solr builds the index is with an inverted index. This style bui ...
随机推荐
- spring的annotation-driven配置事务管理器详解
http://blog.sina.com.cn/s/blog_8f61307b0100ynfb.html ——————————————————————————————————————————————— ...
- svn's tree conflict
[svn's tree conflict] A tree conflict occurs when a developer moved/renamed/deleted a file or folder ...
- A Dream
A Dream 2013年10月20日,成都,天气阴,铜牌16.离2012年10月14日长春现场赛刚好隔了一年,刚看了下去年写的总结http://blog.csdn.net/cc_again/arti ...
- 解决数据库datatime数据在DataGridView里不显示秒的解决
在数据库中正确显示有分有秒,到dataset里的时候也有,但绑定到DataGridView里的时候就没有秒,解决办法: dataGridView1.Columns["record_time& ...
- My集合框架第五弹 最小堆
二叉堆(以最小堆为例),其具有结构性质和堆序性质结构性质: 堆是一棵完全的二叉树,一颗高为h的完全二叉树有2^h到2^h-1个节点,高度为log N 而且该结构可以很容易的使用数 ...
- Spring REST实践之客户端和测试
RestTemplate 可参考spring实战来写这部分. RestTemplate免于编写乏味的样板代码,RestTemplate定义了33个与REST资源交互的方法,涵盖了HTTP动作的各种形式 ...
- 【CSDN博客之星】2013年CSDN博客之星正在评选,希望大家支持,非常感谢!
首先在此感谢 MoreWindows 秒杀多线程面试题系列让我成长和学习,同时也借鉴了很多优秀观点和示例! 请各位读者可以支持MoreWindows,让更优秀的文章陪伴我们! 各位读者好, 本人博客自 ...
- 如何设置Grunt
原文地址: Step 1: Install Node.js Download a Node installer and run it. Installation packages are availa ...
- ADO与ADO.NET的区别
ADO是使用ole db接口并基于微软的COM技术,ADO.NET使用自己的ADO.NET接口并基于微软的.NET体系架构,所以ADO.NET与ADO是两种数据访问方式. ADO以recordset存 ...
- centos下 Apache、php、mysql默认安装路径
centos下 Apache.php.mysql默认安装路径 http://blog.sina.com.cn/s/blog_4b8481f70100ujtp.html apache: 如果采用RPM包 ...