原文地址http://wiki.apache.org/solr/DocValues

DocValues从Lucene4.2和Solr4.2开始加入,通过建立字段的正排索引,提升sorting, faceting, grouping, function queries等性能。

介绍

在Solr的配置文件(schema.xml)中,如果需要为一个Filed建立倒排索引,可以通过配置(indexed=”true”)来实现,DocValues是一种正排索引方式,通过设置(DocValues=”true”)来实现。

1、docvalues的特性

近实时索引:在每一个索引段里面都会有一个docvalues数据结构,这个结构与索引同时建立,并且能够快速更新、生效;

基本的查询和过滤支持:你可以做基本的词、范围等基本查询,但是不参与评分,并且速度较慢,如果你对速度和评分排序有要求,你可以讲该字段设置为(indexed=”true”)

更好的压缩比: Docvalues fields 的压缩效果比 fieldcache好,但不强调做到极致。

节约内存:你可以定义一个fieldType的 docValuesFormat (docValuesFormat="Disk"),这样的只有一小部分数据加载到内存,其它部分保留在磁盘上。

2、docvalues不能实现的

不能用来代替存储字段:这和字段存储完全不同,只是一些便于(sort/facet/group/join/scoring)检索的数据存储结构。

对于静态索引不是最有选择:如果你有一个完全不更新的索引,docvalues看起来不会很吸引你。另一方面如果你需要和fieldcache对比,继续往下看。

风险较大:这个功能在4.2版本整合到Solr,非常新,可能仍有一些未知的bug!

Lucene的 DocValues 格式

Lucene有四个基础字段类型可以使用docvalues。目前Solr使用了其中三种:

NUMERIC:每一个文档里面只有一个这样类型的单值字段。这就像在整个索引里有一个很大的long[],数据基于实际使用的值经过压缩的。

例如,假设有3个这样的文档:
doc[0] = 1005
doc[1] = 1006
doc[2] = 1005

在这个例子中,每个文档仅需要一个bit。

SORTED:每一个文档里面有一个这样类型的单值字段。这就像在整个索引里有一个很大的String[], 但用的是不同的寻址方式。每一个唯一的value被赋予一个数字代表其顺序。所以每个文档只是记录一个压缩后的整数,有字典来还原他们原来的词。

例如,假设有3个这样的文档:
doc[0] = “aardvark”
doc[1] = “beaver”
doc[2] = “aardvark”

值 “aardvark” 被映射成0,”beaver”映射成1, 建立两个数据结构如下:
doc[0] = 0
doc[1] = 1
doc[2] = 0

term[0] = “aardvark”
term[1] = “beaver”

SORTED_SET: 每个文档里面有一个string类型的多值字段。这个和SORTED类型比较相似,每个文档有一个value的”set”。(按照递增存储)。 这里刻意的去除了重复的value,并且忽略了原有value的排序。

例如,假设有3个这样的文档:
doc[0] = “cat”, “aardvark”, “beaver”, “aardvark”
doc[1] =
doc[2] = “cat”

值 “aardvark” 被映射成0,”beaver”映射成1, “cat”映射成2,建立两个数据结构如下:

doc[0] = [0, 1, 2]
doc[1] = []
doc[2] = [2]

term[0] = “aardvark”
term[1] = “beaver”
term[2] = “cat”

BINARY: 每个文档存在一个 byte[] array。这个编码及数据结构可以由用户自定义。

Solr的 DocValues 类型

StrField (multiValued=false):这个背后实际上是由SORTED实现。对于要排序的字段,这是一个不错的选择。
例子:
<field name=”manu_exact” type=”str” indexed=”false” stored=”false” docValues=”true” default=””/>
StrField (multiValued=true):这个背后实际上是由SORTED_SET实现。
例子:
<field name=”productCategories” type=”str” indexed=”false” stored=”false” multiValued=”true” docValues=”true”/>

TrieXXXField (multiValued=false):这个背后实际上是由NUMERIC实现。这个对于排序字段或者用function queries打分的字段比较有益。
例子:
<field name=”popularity” type=”int” indexed=”false” stored=”false” docValues=”true” default=”0″/>

TrieXXXField (multiValued=true):这个背后实际上是由SORTED_SET实现,数字编码的值由基础反推出原始的数字,可以用于排序。
例子:
<field name=”specialCodes” type=”int” indexed=”false” stored=”false” multiValued=”true” docValues=”true”/>

配置不同的 Codec 实现

你可以通过设置fieldType的docValuesFormat属性来选择不同的实现。

要启用 per-field DocValues 格式, 必须在solrconfig.xml里面设置SchemaCodecFactory:

<codecFactory class=”solr.SchemaCodecFactory”/>
schema.xml下面的配置:

  • docValuesFormat="Lucene42": 这是默认设置,所有数据会被加载到堆内存中。
  • docValuesFormat="Disk": 这是另外一个实现,将部分数据存储在磁盘上。
  • docValuesFormat="SimpleText": 文本格式,非常慢,用于学习。

Solr4.2 新特性 DocValues [转]的更多相关文章

  1. Solr新特性【4.x,5.x,6.x,7.x】

    一.Solr4.x新特性 1.近实时搜索 Solr的近实时搜索[Near Real-Time,NRT]功能实现了文档添加到搜索的快速进行,以应对搜索快速变化的数据. 2.原子更新与乐观并发 原子更新功 ...

  2. Elasticsearch之elasticsearch5.x 新特性

    其实,elasticsearch5.x 和 elasticsearch2.x 并不区别很大. 是因为,ELK里之前版本各种很混乱,直接升级到5.0了. 其实,elasticsearch5.x 按理来说 ...

  3. SQL Server 2014 新特性——内存数据库

    SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...

  4. ElasticSearch 5学习(10)——结构化查询(包括新特性)

    之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...

  5. [干货来袭]C#6.0新特性

    微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...

  6. CSS3新特性应用之结构与布局

    一.自适应内部元素 利用width的新特性min-content实现 width新特性值介绍: fill-available,自动填充盒子模型中剩余的宽度,包含margin.padding.borde ...

  7. 【译】Meteor 新手教程:在排行榜上添加新特性

    原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...

  8. 跨平台的 .NET 运行环境 Mono 3.2 新特性

    Mono 3.2 发布了,对 Mono 3.0 和 2.10 版本的支持不再继续,而且这两个分支也不再提供 bug 修复更新. Mono 3.2 主要新特性: LLVM 更新到 3.2 版本,带来更多 ...

  9. Atitit opencv版本新特性attilax总结

    Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...

随机推荐

  1. AE旋转

    精准对位: 好几个图层上的旋转点在一个位置上: 方法1:勾选网格,定点. 方法2:按住ctrl+r  调出尺寸.拖参考线,焦点自动吸附功能. 选中四张或者选中第一张,按shift键,选中最后一张(即可 ...

  2. linux下简单制作iso,img镜像文件

    1. 如果你是直接从cd压制iso文件的,执行sudo umount /dev/cdromdd if=/dev/cdrom of=file.iso bs=1024 2. 如果你要把某个文件或者目录压到 ...

  3. 《DSP using MATLAB》Problem 5.37

    证明过程: 代码: %% +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  4. 理解--->Java中的值传递&引用传递

    转自:http://url.cn/5tL9F5D 值传递和引用传递 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际 ...

  5. 【BZOJ1930】【SHOI2003】吃豆豆

    初见杀…… 原题: 两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会吃掉它.PACMAN行走的路线很奇怪,只能向右走或者向上走,他们行 ...

  6. day18-19 Storm

    课程介绍 课程名称:Storm是什么 课程目标: 通过该课程的学习能够了解离线计算与流式计算的区别.掌握Storm框架的基础知识.了解流式计算的一般架构图. 课程大纲: 1. 离线计算是什么? 2.  ...

  7. namespace关键字学习笔记

    一.namespace简介 namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越 ...

  8. jquery trigger函数和triggerHandler函数的对照

    一句话的差别就是:trigger will bubbling jQuery events (not default DOM events) and triggerHnadler will not do ...

  9. revit api 实现过滤墙图元并选中

    public IList<Element> findElementsByCategory(Autodesk.Revit.UI.UIApplication aApp, Document aD ...

  10. windows下安装python-Levenshtein

    安装python-Levenshtein 报错 error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Vi ...