关于Solr的DocValues

一.介绍

使用搜索引擎,你通常为字段构建倒排索引(indexed="true"):值指向文档。
DocValues 是一种建立前向索引(docValues="true")的方式,以便文档指向值。

1.docValues是什么?

  • NRT兼容: 这些是在索引时构建每段数据结构,并设计对数据快速变化的使用情况有效。

  • 基本查询/过滤支持:你可以对docValues字段执行基本的术语,范围等查询,而不对其进行索引,但是这些查询通常是常数分数,通常比较慢。如果你关系性能和得分,请索引这个字段。

  • 比字段缓存压缩更好: DocValues 字段比fieldCache有更好的压缩,让人觉得不可思议。

  • 能够在堆内存中存储数据:你可以在fieldType(docValuesFormat="Disk")上指定一个不同的docValuesFormat,以便在堆上加载少量的数据,大部分数据保存在磁盘上。

2.docValues不是什么

  • 不是存储字段的替代:这些于存储字段无关,而是用于搜索的数据结构(sort/facet/group/join/scoring)。
  • 静态索引没有什么大的改进: 如果你有一个完全静态的索引,docValues似乎不会有什么有趣地方,如果你打算用fileldCache,可以看看。

二. 更详细信息

Lucene有四种可以用的docValues类型,目前solr用了其中三个:

  • NUMERIC:单值的每个文档数字类型。这就像整个索引有一个大的long[]数组,尽管数据是基于实际使用的值压缩的。
    考虑一下三个值的文档:
       doc[0] = 1005
       doc[1] = 1006
       doc[2] = 1005

在这里面,字段将使用1个bit位标示docValues,因为可以标示2个值已经够用了。

  • SORTED: 单值每个文档字符串类型。这就像为整个索引有一个大的String[] 数组,但是有一个有附加额外级别。每个唯一的值都被分配一个表示其真实Term值的顺序编号。因此每个文档真正存储的是一个压缩的整数,并且单独有个“字典”,将这些顺序编号映射到其真实的值上。
    举个例子,有下面三个值的文档:
 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:一个多值的文档字符串类型。类似于SORTED,除了每个文档有一个Set值(以增加的顺序排序)。因此,它有意丢失文档中的重复值,并且在文档中失去了顺序。
    举个例子,有以下三个文档:
       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: 单值的每文档字节[]数组。 这可以用于编码自定义的每个文档的数据结构。

你可能感兴趣的:(关于Solr的DocValues)