全部產品
Search
文件中心

:索引表配置

更新時間:Sep 04, 2024

索引表配置介紹

索引表配置是向量檢索版中最重要的一個配置,它描述了原始文檔的資料格式,並基於這些資料如何構建索引。這些索引包括倒排索引、正排索引、摘要索引。

索引表配置

配置概覽

{
    "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)。