索引表配置

索引表配置介绍

索引表配置是向量检索版中最重要的一个配置,它描述了原始文档的数据格式,并基于这些数据如何构建索引。这些索引包括倒排索引、正排索引、摘要索引。

索引表配置

配置概览

{
    "table_name":"sample",
    "fields":[

    ],
    "indexs":[

    ],
    "attributes":[

    ],
    "summarys":{

    },
    "dictionaries":[

    ],
          "adaptive_dictionaries":[
      
    ],
    "enable_ttl":true,
    "ttl_field_name":"ttl_filed",
    "default_ttl":86400
}
  • table_name:索引表名称,用于标识一个索引表,最终系统会生产一个$table_name_schema.json的索引表配置文件。

  • fields:字段信息,描述了用于构建索引的字段。

  • indexs:倒排索引配置。

  • attributes:正排索引配置。

  • summarys:摘要索引配置。

  • dictionaries:用于配置建立 bitmap 索引所需要的字典,如果不建立 bitmap 索引则不用配置该项。对高频词建立高频词典或者自适应词典能有效的减少索引空间,提高检索性能。

  • adaptive_dictionaries:建立自适应 bitmap 索引。根据配置的规则,生成高频词和对应的 bitmap 索引,如果不需要可以不配合该项。

  • file_compress:声明各种文件压缩方式的参数和别名,可供正排,倒排,summary使用文件级别的压缩。

  • enable_ttl:是否使用 TTL(time to live) 功能,过期数据会被自动清理。默认为 false。

  • ttl_field_name:指定表中字段作为ttl的字段,原始文档该字段没有填值则置为默认值。如果用户没有配置,是使用内置字段ops_doc_time_to_live_in_seconds,如果用户配置,需要字段为uint32单值类型。

  • default_ttl:TTL 的默认值。如果只配置 enable_ttl ,没有配置default_ttl ,使用默认值 std::numeric_limits<int64_t>::max() >> 20。如果只配置default_ttl 时,enable_ttl 会自动设置为 true。

fields配置

 "fileds":[
        {
            "field_name":"title",
            "field_type":"TEXT",
            "analyzer":"chn_standard"
        },
        {
            "field_name":"dup_title",
            "field_type":"TEXT",
            "analyzer":"fuzzy"
            "user_defined_param" : {
                "copy_from" : "title"
            }
        },
        {
            "field_name":"category",
            "field_type":"INTEGER",
            "multi_value":true,
            "compress_type":"uniq|equal"
        },
        {
            "field_name":"mlr_features",
            "field_type":"INTEGER",
            "multi_value":true,
            "updatable_multi_value":true
        },
        {
            "field_name":"feature",
            "field_type":"float",
            "multi_value":true,
            "fixed_multi_value_count":32,
            "compress_type":"uniq|fp16",
            "updatable_multi_value":true
        },
        {
            "field_name":"user_id",
            "field_type":"INTEGER"
        },
        {
            "field_name":"price",
            "field_type":"INTEGER",
            "enable_null":true,
            "default_null_string":"default_null"
        },
        {
            "field_name":"product_id",
            "field_type":"LONG"
        },
        {
            "field_name":"product_type",
            "field_type":"UINT8",
            "compress_type":"equal"
        },
        {
            "field_name":"bitwords",
            "field_type":"STRING",
            "multi_value":true
        },
        {
            "field_name":"date",
            "field_type":"DATE"
        },
        {
            "field_name":"time",
            "field_type":"TIME"
        },
        {
            "field_name":"timestamp",
            "field_type":"TIMESTAMP",
            "default_time_zone":"+0800"
        }
    ]
  • field_name : 字段名称。

  • field_type : 字段基本类型,详情请参考召回引擎版内置字段类型

  • analyzer : 类型为TEXT的字段所用的分词器。TEXT类型的field必须配置analyzer,其他类型不允许配置analyzer,召回引擎版支持的内置分析器请参考分析器说明。如果一个字段想使用不同的分析器,必须扩展出来一个新的字段,可以通过在schema中新增一个字段,并配置user_defined_param选项来实现,详细请参考上面的dup_title字段配置。

  • multi_value : 表明该field为多值(如果用于建立attirubte则建立多值attribute),默认值为false。

  • updatable_multi_value : 表示该多值类型字段(或单值STRING类型字段)可以更新。默认值为false。支持字段类型为:INT8,UINT8,INT16,UINT16,INTEGER(32 bit integer),UINT32,LONG(64 bit integer),UINT64,FLOAT,DOUBLE,STRING。除上述多值字段外,本配置还支持单值STRING类型。在配置updatable_multi_value=true时,还可以配置u32offset_threshold(默认为0xFFFFFFFFL,通常情况下,用户应忽略该配置项),当最大Offset超过u32offset_threshold时,将使用8字节Offset文件格式,否则使用4字节Offset文件格式。

  • fixed_multi_value_count: 多值的固定个数,如果配置该字段,则该字段在attribute索引中为定长多值字段,目前支持int8/int16/int32/int64/uint8/uint16/uint32/uint64/float/double类型字段配置为定长多值attribute。fixed_multi_value_count可以为单值string字段配置定长长度,不支持多值string字段配置

  • compress_type :指定该字段作为attribute字段存储时的压缩方法,取值可以为uniq|equal任意一个或者组合,默认值为空(不压缩)。

  • 多值attribute或者string attribute,配置uniq则对data数据进行排重压缩存储;配置equal则对offset数据进行等值压缩

  • 单值整型attribute不能配置uniq,可以配置equal对data数据进行等值压缩;FLOAT/DOUBLE浮点型单值attribute也支持等值压缩配置

  • 其他压缩方式:当字段类型为定长多值的float类型字段时,除了uniq|equal外,还可以额外选定如下fp16/block_fp/int8#[absMax]三种有损精度的编码压缩方式中的一种,进行编码压缩存储。当字段类型为单值float类型,也可配置fp16/int8#[absMax]两种编码方式中的一种进行压缩。

  • fp16和blockfp压缩效果均接近50%, fp16编码空间略小,但精度损失比block_fp更大

  • int8#[absMax]:需要用户指定编码数值的绝对值上限,如int8#1.5, 则编码值范围在[-1.5, 1.5],压缩后效果为原值的25%,精度损失和absMax相关,absMax越大,精度损失越大

  • enable_null :指定该字段是否允许空值。enable_null为true的时候,对应字段不可以配置成定长多值或者是单值equal压缩。

  • default_null_string :指定空值的字面值,默认是"__NULL__"。

  • TIMESTAMP类型字段可以配置默认时区字段default_time_zone,格式形态为+/-HHMM(例:+0800对应GMT/UTC+0800北京时间)。配置了默认时区后,解析TIMESTAMP字段时,字段值如果不带时区信息则按照默认时区理解进行GMT/UTC时间戳转换。该字段如果存储为summary字段,则按照默认时区进行展示

indexs配置

"indexs":
[
        {index1},
        {index2},
        ……
        {indexn}
]

indexs配置是一个列表,每一项都是一个完整的index配置,召回引擎版支持的index类型及配置请参考倒排索引介绍

attributes配置

"attributes": [
  "user_id", 
  "product_id", 
  "category"
]

attributes配置是一个字段的列表,字段必须在fields中声明,除了TEXT类型不能建立成attribute之外,其他都能建立为attribute。

注意:

TIME/DATE/TIMESTAMP类型的正排索引存储含义如下:

  • DATE: 从1970.01.01到date的天数(单值4字节存储), 用户如有需要可以取值后乘以86400000(单日ms总数)换算为时间戳。

  • TIME:从00:00:00到time的毫秒数(单值4字节存储)。

  • TIMESTAMP: 从1970.01.01到timestamp的毫秒数(单值8字节存储)。

summarys配置

"summarys":
{
        "summary_fields":["id", "company_id", "subject", "cat_id"],
        "compress":false 
}
  • summary_fields:配置需要进入summary的field,对于field的类型没有限制,field必须在fileds中声明。

  • compress:summary是否需要压缩(使用zlib),true为需要压缩,false为不压缩,默认值为false。

dictionaries配置

"dictionaries":[
    {
        "dictionary_name":"bitmap1",
        "content":"a;an"
    },
    {
        "dictionary_name":"bitmap2",
        "content":"of;and"
    }
]
  • dictionary_name:字典的名称;

  • content: 列举该字典中的所有单词,各单词之间以“;”分隔。

adaptive_dictionaries配置

"adaptive_dictionaries":[
    {
        "adaptive_dictionary_name":"df",
        "dict_type":"DOC_FREQUENCY",
        "threshold":1500000
    },
    {
        "adaptive_dictionary_name":"percent",
        "dict_type":"PERCENT",
        "threshold":30
    },
    {
        "adaptive_dictionary_name":"size",
        "dict_type":"INDEX_SIZE"
    }
]
  • adaptive_dictionary_name:自适应高频词典生成规则名称。

  • dict_type:自适应高频词生成规则类型。主要有三种:

  • DOC_FREQUENCY : 将df>=threshold的term作为高频词。

  • PERCENT : 将满足df/totalDocCount*100>=threshold 的term作为高频词。

  • INDEX_SIZE : 比较term生成的bitmap索引和原始索引的大小,当bitmap 索引较小时,认为该term是高频词。

注意:

一般建议将索引term可枚举(如term固定为a,b,c可数的几个)和查询query中检索比例相对不频繁的倒排字段对应的自适应bitmap规则设置为INDEX_SIZE; 对于term不可枚举且查询比较频繁的倒排索引对应的自适应bitmap规则建议设置为PERCENT或DOC_FREQUENCY(配置阈值建议基于性能测试结果选择,经验阈值为文档总数的5%,如文档总数为1000w,则DOC_FREQUENCY阈值建议为50w/PERCENT阈值配置为5)。