`
weitao1026
  • 浏览: 1034683 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DocValues 对于一些存储的值

 
阅读更多
DocValues 对于一些存储的值,通常我们可以取得内容,通过docid,有时候为了实现更快的访问,我们可以将其存储的值通过DocValues来把它加载到主存中,存储的值用于在检索时搜索结果汇总,而docvalues的值则对于一些评分因素是非常有用的。

DocValues的文件格式.dv.cfs和.dv.cfe。
信息存在一个复合文件中

<segment>_<fieldNumber>.dat: 存储数据的值
<segment>_<fieldNumber>.idx: 为dat文件建立的索引


DocValues有许多种不同的编码方式,从文件名的角度来说,所有的类型存储他们的值在一个复合格式的dat文件里,在dereferenced/sorted类型的情况下,.dat实际上只包含一个唯一的值,还有一个额外的idx索引文件来存储引用这些值的指针

Fixed(固定长度)
Var  (变长)

DocValues存储的格式如下:
VAR_INTS .dat --> Header, PackedType, MinValue, DefaultValue, PackedStream
FIXED_INTS_8 .dat --> Header, ValueSize, Bytemaxdoc
FIXED_INTS_16 .dat --> Header, ValueSize, Shortmaxdoc
FIXED_INTS_32 .dat --> Header, ValueSize, Int32maxdoc
FIXED_INTS_64 .dat --> Header, ValueSize, Int64maxdoc
FLOAT_32 .dat --> Header, ValueSize, Float32maxdoc
FLOAT_64 .dat --> Header, ValueSize, Float64maxdoc
BYTES_FIXED_STRAIGHT .dat --> Header, ValueSize, (Byte * ValueSize)maxdoc
BYTES_VAR_STRAIGHT .idx --> Header, TotalBytes, Addresses
BYTES_VAR_STRAIGHT .dat --> Header, (Byte * variable ValueSize)maxdoc
BYTES_FIXED_DEREF .idx --> Header, NumValues, Addresses
BYTES_FIXED_DEREF .dat --> Header, ValueSize, (Byte * ValueSize)NumValues
BYTES_VAR_DEREF .idx --> Header, TotalVarBytes, Addresses
BYTES_VAR_DEREF .dat --> Header, (LengthPrefix + Byte * variable ValueSize)NumValues
BYTES_FIXED_SORTED .idx --> Header, NumValues, Ordinals
BYTES_FIXED_SORTED .dat --> Header, ValueSize, (Byte * ValueSize)NumValues
BYTES_VAR_SORTED .idx --> Header, TotalVarBytes, Addresses, Ordinals
BYTES_VAR_SORTED .dat --> Header, (Byte * variable ValueSize)NumValues

数据类型:

Header --> CodecHeader
PackedType --> Byte
MaxAddress, MinValue, DefaultValue --> Int64
PackedStream, Addresses, Ordinals --> PackedInts
ValueSize, NumValues --> Int32
Float32 --> 32-bit float encoded with Float.floatToRawIntBits(float) then written as Int32
Float64 --> 64-bit float encoded with Double.doubleToRawLongBits(double) then written as Int64
TotalBytes --> VLong
TotalVarBytes --> Int64
LengthPrefix --> Length of the data value as VInt (maximum of 2 bytes)



(1)PackedType 是0的时候,代表着是被压缩过的,当写入的流是一个64位的int时,这个值为1
(2)地址存储指针的实际字节位置和docid有关,在VAR_STRAIGHT的情况下,每个值可以有不同的长度,所以确定长度来自docid+1。
(3)在索引的时候,term id默认是有序的,在FIXED_SORTED的情况下,地址被存储在dat文件里,可以通过Header+ValueSize+(ordinal*ValueSize)计算;在VAR_SORTED的情况下,可以间接的通过docid -> ordinal -> address计算,所以决定长度的是ord+1的地址。
(4)BYTES_VAR_STRAIGHT BYTES_VAR_STRAIGHT相比其他的直接格式,通过idx文件,来提升性能。


限制:
二进制的doc values的值被限制在MAX_BINARY_FIELD_LENGTH。



.del文件用来标记在索引中被删除的记录,它仅仅出现在当一个段出现删除操作时,该文件才会生成,这个文件也维护外部的复合段文件

Deletions (.del) --> Format,Header,ByteCount,BitCount, Bits | DGaps (depending on Format)

Format,ByteSize,BitCount --> Uint32
Bits --> <Byte> ByteCount
DGaps --> <DGap,NonOnesByte> NonzeroBytesCount
DGap --> VInt
NonOnesByte --> Byte
Header --> CodecHeader
Format is 1: indicates cleared DGaps.

ByteCount indicates the number of bytes in Bits. It is typically (SegSize/8)+1.

BitCount indicates the number of bits that are currently set in Bits.

Bits contains one bit for each document indexed. When the bit corresponding to a document number is cleared, that document is marked as deleted. Bit ordering is from least to most significant. Thus, if Bits contains two bytes, 0x00 and 0x02, then document 9 is marked as alive (not deleted).

DGaps represents sparse bit-vectors more efficiently than Bits. It is made of DGaps on indexes of nonOnes bytes in Bits, and the nonOnes bytes themselves. The number of nonOnes bytes in Bits (NonOnesBytesCount) is not stored.

For example, if there are 8000 bits and only bits 10,12,32 are cleared, DGaps would be used:

(VInt) 1 , (byte) 20 , (VInt) 3 , (Byte) 1
分享到:
评论

相关推荐

    elasticsearch-docvalues-string:索引为文档值的可排序弹性搜索字符串

    'dvstring' 的行为类似于带有额外分析器 'index_docvalues_analyzer' 的 'string',第一个标记存储为 DocValue:克服了“无法使用 doc 值存储分析的字符串”的限制。 用法 echo "Create a superhero type in the ...

    EJB3.0实例教程如何调用存储过程.doc

    2. **返回单值的存储过程**:存储过程接收参数并返回单个值。例如,`GetPersonName`存储过程接受一个整数参数`Pid`,返回对应的`personname`: ```sql CREATE PROCEDURE GetPersonName(IN Pid INTEGER(11)) ...

    ASA存储过程.doc

    例如,以下存储过程比较两个整数值,并将较大值返回: ```sql CREATE PROCEDURE greater(IN a INT, IN b INT, OUT c INT) BEGIN IF a &gt; b THEN SET c = a; ELSE SET c = b; END IF; END ``` **5. 返回结果集...

    java操作mysql存储过程的例子.doc

    3. 创建存储过程`p_test`,它声明了一个局部变量`temp`,将其设为0,并更新`test`表中所有记录的`field1`字段为`temp`的值。 ```sql create procedure p_test() begin declare temp int; set temp = 0; update ...

    sqlservr存储图片.doc

    ### SQL Server 存储图片知识点详解 #### 一、为何考虑在SQL Server中存储图片? 在探讨如何在SQL Server中存储图片之前,我们先来了解一下为何有时候会考虑将图片存储在数据库中。根据文档描述部分提到的信息,...

    lucene分组查询优化facet

    1. **缓存优化**:Lucene提供了一些缓存机制,如FacetResultCache,可以缓存分面查询的结果,避免重复计算。对于频繁查询的分面,启用缓存可以显著提高性能。 2. **分面预计算**:在索引构建阶段就预先计算好分面...

    数据库应用技术:第11章 存储过程与触发器.doc

    存储过程与触发器 第 11 章 存储过程与触发器是数据库应用技术的重要组成部分。本章主要介绍了 SQL Server 2005 中存储过程的概念、类型、常用系统存储过程以及如何创建存储过程;另外介绍了触发器的类型以及创建...

    编程之java调用存储过程.doc

    对于有返回值的存储过程,通常会包含`OUT`参数。例如,修改`TESTA`存储过程,使其返回一个状态码: ```sql CREATE OR REPLACE PROCEDURE TESTA ( PARA1 IN VARCHAR2, PARA2 IN VARCHAR2, RETURN_FLAG OUT NUMBER...

    使用JSP来操作SQL SERVER中存储过程.doc

    它接收三个参数:`@userName`(用户名),`@userAge`(用户年龄)和`@userProfession`(用户职业),并将这些值插入到相应的列中。 ```sql CREATE PROCEDURE addUserInfo @userName VARCHAR(50), @userAge INT, ...

    mysql数据库精华.doc

    - `INSERT INTO 数据表 (字段1, 字段2, 字段3...) VALUES (值1, 值2, 值3...)`:插入新记录到数据表中。 - `INSERT INTO 目标数据表 SELECT * FROM 源数据表`:将源数据表的记录复制到目标数据表。 5. **数据记录...

    中缀表达式求值

    这个过程通常涉及两个栈:一个用于存储运算符,另一个用于构建后缀表达式。遍历中缀表达式,如果遇到数字,将其添加到后缀表达式;如果遇到运算符,与栈顶运算符比较优先级,如果当前运算符优先级更高或栈为空,入栈...

    ORACLE_PLSQL存储过程教程.doc

    你可以直接在INSERT语句中使用,如`INSERT INTO test VALUES(SEQNAME.NEXTVAL)`,或者通过查询DUAL表来获取,如`SELECT SEQNAME.NEXTVAL INTO id_temp FROM DUAL`,然后使用变量id_temp。 在编写PL/SQL代码时,可能...

    PHP数组函数.doc

    在PHP编程语言中,数组是一种非常重要的数据结构,用于存储多个值。PHP提供了丰富的数组函数,可以帮助开发者在处理数组时实现各种操作。以下是对标题和描述中提到的一些关键PHP数组函数的详细解释: 1. **count**...

    SQL基础语句大全.doc

    - 批量插入:`insert into 表名 values(值 1, 值 2, 值 3), (值 1, 值 2, 值 3)...` 2. **修改数据** - 使用 `update` 语句:`update 表名 set 字段名=xxx, 字段名=xxx where 条件;` 3. **删除数据** - 使用 `...

    CallableStatement调用Oracle存储过程返回结果集(ResultSet).doc

    接下来,我们将介绍如何使用`CallableStatement`来调用一个返回单个值(非结果集)的存储过程。 ##### 存储过程定义 我们创建一个名为`PRO_2`的存储过程,它接受一个输入参数`PARA1`和一个输出参数`PARA2`,并在`...

    17-Map集合、集合练习.doc

    - `values()`:返回一个Collection视图,包含了Map中的所有值。 在实际开发中,Map集合常用于存储关联关系的数据,如用户信息(用户名作为键,用户详情作为值)、配置参数(参数名作为键,参数值作为值)等场景。...

    我的mySQL笔记.doc

    例如,`INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);`。如果某个字段允许自增(如整数类型的ID),则可以使用`null`,默认值则使用`default`。对于字符串类型,如`VARCHAR`和日期时间类型,需要用单引号 `' '` ...

    sqlite学习笔记.doc

    * 例如,使用以下命令可以将一行数据插入到 userinfo 表中:INSERT INTO userinfo(username, password) VALUES('mrq', 123) * 在插入数据时,需要指定要插入的数据和对应的字段名称。 查询数据 * 使用 SELECT 语句...

    SQL常用语句一览.doc

    例如,`INSERT INTO 数据表 (字段1, 字段2, ...) VALUES (值1, 值2, ...)`。如果想从一个表复制数据到另一个表,可以使用`INSERT INTO 目标数据表 SELECT * FROM 源数据表`。 更新数据记录使用`UPDATE`语句,如`...

    syspro doc: automation

    这样,您的表单值将被保存为一个XML文件,存储路径为...\settings\FormValues_operator_programName.XML。 例如,以下是如何通过Syspro主菜单的“运行”选项,使用`DESIGN`参数运行程序的示意图: ``` // 这里应...

Global site tag (gtag.js) - Google Analytics