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. 存量数据处理结果查询.txt

    请求报文:<?xml version="1.0" encoding="UTF-8"?><PDL><PDL-Head>< ...

  2. WIFI接入Internet配置过程

    转载请注明出处:http://club.gizwits.com/thread-256-1-1.html AirLink模式GoKit2代配置路由SSID和密码方法如下:1.GoKit2上电2.长按Ke ...

  3. socket对于大数据的发送和接收

    大数据是指大于32K或者64K的数据. 大数据的发送和接收通过TSTREAM对象来进行是非常方便的. 我们把大数据分割成一个个4K大小的小包,然后再依次传输. 一.大数据的发送的类语言描述: 1)创建 ...

  4. Codeforces 583D. Once Again... (LIS变形)

    题目链接:http://codeforces.com/contest/583/problem/D 给你t个长度为n的数组.问你最长不下降子序列的长度. 一开始用第一个n数组的lis和最后一个n数组的l ...

  5. JDBC 常用驱动类及url格式

    1. oracle <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</ ...

  6. 设置UIButton文字大小颜色不同

    _loginBtn = [[UIButton alloc]initWithFrame:CGRectMake(iconX, CGRectGetMaxY(passwordBGView.frame)+25, ...

  7. Spring中的设计模式

    [Spring中的设计模式] http://www.uml.org.cn/j2ee/201301074.asp [详解设计模式在Spring中的应用]    [http://www.geek521.c ...

  8. 理解MFC 文档、视图、框架[转]

    理解文档/视图框架                                      出处.雷神 了解文档和视图的相互作用关系是编写MFC程序的基本功.但是MFC的应用程序框架把文档和视图之间 ...

  9. Docker 入门教程

    几个月以前,红帽(Red Hat)宣布了在 Docker 技术上和 dotCloud 建立合作关系.在那时候,我并没有时间去学习关于 Docker 的知识,所以在今天,趁着这个 30 天的挑战,我决定 ...

  10. C语言运算符表

    优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右   () 圆括号 (表达式)/函数名(形参表)   . 成员选择(对象) 对象.成员名   -& ...