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

  DocValues

1.4.9 DocValues的更多相关文章

  1. docvalues和Fieldcache

    Fieldcache:  docID->document->fieldvalue 无论是聚类排序关联等,首先都需要获得文档中某个字段的值,通过docID去获得整个document,然后再去 ...

  2. Lucene中string docvalues使用utf-16的优化

    原来的string docvalues使用utf-8编码,载入时转码花费大量时间,我们把转码实现从new String(bytes, "UTF-8")改用lucene的bytesR ...

  3. Solr4.2 新特性 DocValues [转]

    原文地址http://wiki.apache.org/solr/DocValues DocValues从Lucene4.2和Solr4.2开始加入,通过建立字段的正排索引,提升sorting, fac ...

  4. Solr DocValues详解

    前言: 在Lucene4.x之后,出现一个重大的特性,就是索引支持DocValues,这对于广大的solr和elasticsearch用户,无疑来说是一个福音,这玩意的出现通过牺牲一定的磁盘空间带来的 ...

  5. Elasticsearch中的DocValues

    Elasticsearch最近一段时间非常火,以致于背后的公司都改名为Elastic了,因为Elasticsearch已经不仅限于搜索,反而更多的用在大数据分析场景,所以在公司品牌上开始“去Searc ...

  6. 使用ByteRef加速String类型DocValues的载入

    眼下商户索引DocValues很大,warmup时花费70-80秒(在beta环境),有62秒在载入DocValues,发现当中有54秒时间在载入string docvalues,string doc ...

  7. 时间序列数据库——索引用ES、聚合分析时加载数据用什么?docvalues的列存储貌似更优优势一些

    加载 如何利用索引和主存储,是一种两难的选择. 选择不使用索引,只使用主存储:除非查询的字段就是主存储的排序字段,否则就需要顺序扫描整个主存储. 选择使用索引,然后用找到的row id去主存储加载数据 ...

  8. Solr 中的 docValues=true

    前言:  在Lucene4.x之后,出现一个重大的特性,就是索引支持DocValues,这对于广大的solr和elasticsearch用户,无疑来说是一个福音,这玩意的出现通过牺牲一定的磁盘空间带来 ...

  9. lucene DocValues——本质是为通过docID查找某field的值 看图

    Why DocValues? The standard way that Solr builds the index is with an inverted index. This style bui ...

随机推荐

  1. Struts – Wildcards example

    Struts wildcards can helps to reduce the repetition in your struts-config.xml file, as long as your ...

  2. Educational Codeforces Round 5 E. Sum of Remainders (思维题)

    题目链接:http://codeforces.com/problemset/problem/616/E 题意很简单就不说了. 因为n % x = n - n / x * x 所以答案就等于 n * m ...

  3. socket的异步回调函数,采用一问一答

    socket.Send(buf); AsyncCallback callback = new AsyncCallback(ReceiveData5); mysocket.BeginReceive(Wi ...

  4. iOS摄像头和相册-UIImagePickerController-浅析

    转载自:http://blog.sina.com.cn/s/blog_7b9d64af0101cfd9.html 在一些应用中,我们需要用到iOS设备的摄像头进行拍照,视频.并且从相册中选取我们需要的 ...

  5. 一个人写的操作系统 - Sparrow OS

    一个人写的操作系统 - Sparrow OS 自己写一个操作系统,这是在过去的几年里我一直为之努力的目标,现在终于完成了. 缘起 自己动手写操作系统的动机最初来自于学习Linux遇到的困难. 我是一个 ...

  6. IE下判断IE版本的语句...[if lte IE 6]……[endif]

    <!--[if lte IE 6]> <![endif]--> IE6及其以下版本可见 <!--[if lte IE 7]> <![endif]--> ...

  7. RESTful Webservice (一) 概念

    Representational State Transfer(表述性状态转移) RSET是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩 ...

  8. android wifi总结

    大致可以分为四个主要的类ScanResult wifiConfiguration WifiInfo WifiManager (1)ScanResult,主要是通过wifi 硬件的扫描来获取一些周边的w ...

  9. JS瀑布流布局模式(2)

    这个例子与上一篇类似,唯一的区别是排序的方式有差别.上一篇是在高度最小的列里插入内容,这个案例是按顺序放置内容. 两种方法各有优缺点.第一种需要在图片内容加载完成的情况下有效,各个列的图高度差异不大. ...

  10. li中包含span,在IE6、IE7下会有3pxbug

    如果给每个li里面加个span标签的话,在IE6,IE7下看,li与li之间的距离就会多了3px. 解决方法:在li中加vertical-align:middle; <div class=&qu ...