本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業(yè)務造成影響,請務必仔細閱讀。
索引表結構介紹
每個Document都是由多個field組成,每個field中包含一系列的詞語,構建索引的目的是為了加快檢索的速度,根據(jù)映射關系方向的不同,索引可以分為:
字段(field):用于定義索引表的字段名及字段類型。
倒排索引(index):倒排索引存儲了從單詞到DocID的映射關系,形如:詞:(Doc1,Doc2,...,DocN),倒排索引主要用在檢索中,它能快速的定位用戶查詢到關鍵字對應的Document。
正排索引(attribute):正排索引存儲從DocID到field的映射關系,形如:DocID-->(term1,term2,...termn),正排索引分單值和多值兩種,單值attribute由于長度是固定的(不包括string類型),因此查找效率高,而且可以支持更新。多值attribute表示某個field中有多個數(shù)據(jù)(數(shù)量不固定),由于長度不確定,因此查找效率相較與單值更慢,而且不能支持更新。
正排索引主要是在查詢到了某個Document后,根據(jù)docid值能快速獲取到其attribute用來統(tǒng)計、排序、過濾中。目前引擎支持的正排字段基本類型包括:
INT8(8位有符號數(shù)字類型), UINT8(8位無符號數(shù)字類型),
INT16(16位有符號數(shù)字類型),
UINT16(16位無符號數(shù)字類型),
INTEGER(32位有符號數(shù)字類型),
UINT32(32位無符號數(shù)字類型), INT64(64位有符號數(shù)字類型),
UINT64(64位無符號數(shù)字類型),
FLOAT(32位浮點數(shù)),
DOUBLE(64位浮點數(shù)),
STRING(字符串類型)
摘要(summary):summary的存儲形式與attribute類似,但是summary是將一個Document對應的多個field存儲在一起,并且建立映射,所以能很快從docid定位到對應的summary內容。summary主要是用于結果的展示,一般而言summary的內容都比較大,對于每次查詢而言不適合取過多的summary,只有最終需要展示結果的Document會取到對應的summary。由于summary過大,引擎在存儲summary時提供壓縮的機制,在schema中配置summary壓縮,那么引擎在存儲時會用zlib壓縮后再存儲,讀取時引擎會先解壓,再返回給用戶。
有關索引表配置的詳細介紹的文章可參考索引表配置。
索引schema示例:
{
"summarys": {
"summary_fields": [
"pk",
"embedding",
"cate_id"
],
"parameter": {
"file_compressor": "zstd"
}
},
"indexs": [
{
"index_name": "id",
"index_type": "PRIMARYKEY64",
"index_fields": "pk",
"has_primary_key_attribute": true,
"is_primary_key_sorted": false
},
{
"index_name": "vector",
"index_type": "CUSTOMIZED",
"index_fields": [
{
"field_name": "pk",
"boost": 1
},
{
"field_name": "cate_id",
"boost": 1
},
{
"field_name": "embedding",
"boost": 1
}
],
"parameters": {
"dimension": "128",
"distance_type": "SquaredEuclidean",
"vector_index_type": "Qc",
"build_index_params": "{\"proxima.qc.builder.quantizer_class\":\"Int8QuantizerConverter\",\"proxima.qc.builder.quantize_by_centroid\":true,\"proxima.qc.builder.optimizer_class\":\"BruteForceBuilder\",\"proxima.qc.builder.thread_count\":10,\"proxima.qc.builder.optimizer_params\":{\"proxima.linear.builder.column_major_order\":true},\"proxima.qc.builder.store_original_features\":false,\"proxima.qc.builder.train_sample_count\":3000000,\"proxima.qc.builder.train_sample_ratio\":0.5}",
"search_index_params": "{\"proxima.qc.searcher.scan_ratio\":0.01}",
"embedding_delimiter": ",",
"major_order": "col",
"linear_build_threshold": "5000",
"min_scan_doc_cnt": "20000",
"enable_recall_report": "false",
"is_embedding_saved": "false",
"enable_rt_build": "false",
"builder_name": "QcBuilder",
"searcher_name": "QcSearcher"
},
"indexer": "aitheta2_indexer"
}
],
"attributes": [
{
"field_name": "pk",
"file_compress": "no_compressor"
},
{
"field_name": "embedding",
"file_compress": "no_compressor"
},
{
"field_name": "cate_id",
"file_compress": "file_compressor"
}
],
"fields": [
{
"user_defined_param": {},
"field_name": "pk",
"field_type": "INTEGER",
"compress_type": "equal"
},
{
"user_defined_param": {
"multi_value_sep": ","
},
"field_name": "embedding",
"field_type": "FLOAT",
"compress_type": "uniq",
"multi_value": true
},
{
"user_defined_param": {},
"field_name": "cate_id",
"field_type": "INTEGER",
"compress_type": "equal"
},
{
"field_name": "titile",
"field_type": "TEXT",
"analyzer": "chn_ecommerce_general"
}
],
"file_compress": [
{
"name": "file_compressor",
"type": "zstd"
},
{
"name": "no_compressor",
"type": ""
}
]
}
添加索引表
在實例管理界面,進入配置中心 > 索引結構頁面,單擊“添加索引表”:
配置索引表,模板選擇通用模板:
索引表:可自定義
數(shù)據(jù)源:按需選擇已添加數(shù)據(jù)源
數(shù)據(jù)分片:根據(jù)用戶購買的數(shù)據(jù)節(jié)點個數(shù)進行配置
設置字段,至少需要定義2個字段主鍵字段和向量字段(向量字段需要設置為多值float類型):
如果需要帶有類目的向量,可以在主鍵和向量字段中間加一個類目字段,類型要求單值或多值的整數(shù)類型:
屬性和字段內容壓縮:
屬性字段可以選擇是否壓縮,默認為不壓縮,選擇file_compressor表示開啟壓縮
字段內容可以選擇是否壓縮,默認為不壓縮,默認多值和STRING類型選擇uniq,單值數(shù)值類型是equal
使用向量檢索,在定義字段時有位置要求,需要按照主鍵字段、標簽字段(非必要)、向量字段的順序創(chuàng)建。(如上圖所示)
如果開啟了屬性壓縮,建議前往「部署管理-數(shù)據(jù)節(jié)點-在線表配置」編輯索引加載方式,以此降低對性能的影響
設置索引,主鍵字段索引類型設置為PRIMARYKEY64,向量索引類型選擇CUSTOMIZED:
索引字段設置壓縮:
索引字段可以選擇是否壓縮,默認為不壓縮,選擇file_compressor表示開啟壓縮
主鍵索引不支持壓縮
如果開啟了索引壓縮,建議前往「部署管理-數(shù)據(jù)節(jié)點-在線表配置」編輯索引加載方式,以此降低對性能的影響
4.1. 為向量字段添加包含字段:
主鍵字段、向量字段必須填寫,標簽字段非必填,可以為空。
僅支持選擇固定的三個字段,不支持新增。
4.2. 高級配置,向量索引需要單獨配置參數(shù),可以參考如下配置,詳情可參考向量索引:
更多參數(shù):
其中build_index_params的配置如下:
{
"proxima.qc.builder.quantizer_class": "Int8QuantizerConverter",
"proxima.qc.builder.quantize_by_centroid": true,
"proxima.qc.builder.optimizer_class": "BruteForceBuilder",
"proxima.qc.builder.thread_count": 10,
"proxima.qc.builder.optimizer_params": {
"proxima.linear.builder.column_major_order": true
},
"proxima.qc.builder.store_original_features": false,
"proxima.qc.builder.train_sample_count": 3000000,
"proxima.qc.builder.train_sample_ratio": 0.5
}
search_index_params的配置如下:
{
"proxima.qc.searcher.scan_ratio": 0.01
}
配置完成后,單擊保存版本,并在彈框后填寫備注(可選),單擊發(fā)布:
索引表添加成功后,可在運維中心>部署管理中查看新加的索引表的拓撲:
若需要新加的索引表在集群中生效,需要在運維中心>運維管理中手動觸發(fā)配置更新并全量,“配置更新”操作中執(zhí)行“推送配置并觸發(fā)索引重建”:
索引重建時,可以在運維中心>變更歷史中的數(shù)據(jù)源變更中查看全量進度:
索引重建完成后,即可對新索引表進行查詢。
字段設置有且僅有一個主鍵;
字段設置中,至少需要有一個字段勾選搜索結果展示;
TEXT類型的字段需要設置分析方式,且不支持多值;
索引設置有且僅有一個主鍵索引;
多值分割符除默認分割符外,只支持單字符,且不支持全角字符;
在設置數(shù)據(jù)分片時需要注意,假設集群的副本個數(shù)為2,數(shù)據(jù)分片設置為2,那么在購買實例時數(shù)據(jù)節(jié)點數(shù)量需要大于副本個數(shù)*數(shù)據(jù)分片,新加的索引表才能正常使用。
分片數(shù)設置時參考下面幾個規(guī)則:單個分片數(shù)據(jù)量不要超過6億(最大21億);單個分片的索引大小不要超過300G;如果有實時更新需求,單個分片數(shù)據(jù)更新tps不要超過4000(add命令的文檔,如果只是update可以達到1w tps)。
編輯索引表
索引表版本介紹:
新創(chuàng)建的索引表默認有2個版本:
index_config_v1:初次配置的索引表版本,若已推送配置并索引重建,狀態(tài)變?yōu)椤笆褂弥小保粑赐扑团渲貌⑺饕亟ǎ瑺顟B(tài)則為“未使用”;
index_config_edit:正在編輯中的索引表版本,狀態(tài)一直為“編輯中”;
隨著索引表版本的連續(xù)發(fā)布版本名稱會依次遞增,比如第二個版本名為“index_config_v2”,第三個版本名為“index_config_v3”依次類推,為明顯區(qū)分各個版本,每個版本的備注是必須填寫的。
編輯并發(fā)布新的索引表版本:
找到版本狀態(tài)為“編輯中”的版本,單擊編輯:
cluster.json配置補充說明:
平臺支持配置索引整理策略,可以對customized_merge_config
和segment_customize_metrics_updater(僅新實例支持)
進行配置,如圖:
參數(shù)詳解參考:離線cluster配置
修改后,單擊保存版本:
也可以切換到開發(fā)者模式手動編輯schema:
找到版本狀態(tài)為“編輯中”的版本,單擊發(fā)布,并填寫備注,單擊確定:
此時系統(tǒng)會為該索引表生產一個新的索引表版本,版本狀態(tài)為“未使用”。
若需要將新添加的索引表版本在集群中生效,則需要在運維中心>運維管理>更新配置中執(zhí)行推送配置并觸發(fā)索引重建:
刪除索引表版本:
狀態(tài)為“未使用”的索引表版本可以直接刪除:
查看索引表版本:
單擊“查看”后,可跳轉到索引表版本的只讀配置界面:
管理員模式:
開發(fā)者模式:
刪除索引表
若索引表中的索引表版本沒有“使用中”的狀態(tài),可以直接刪除索引表:
若索引表中的索引表版本有“使用中”的狀態(tài):
則需要按如下步驟操作,才可刪除:
在運維管理>部署管理中,單擊索引表,‘取消訂閱’,如圖:
然后在配置中心--->索引結構中,刪除對應的索引表:
如果在部署管理中,索引表取消訂閱,一定要在索引結構中刪除對應的索引表,否則會影響線上集群。
注意事項
添加索引表時,數(shù)據(jù)源為必選項,若無數(shù)據(jù)源,則需要先添加數(shù)據(jù)源再添加索引表;
索引表名稱創(chuàng)建后不可修改;
索引表中如有“使用中”的索引表版本,則無法直接刪除索引表;
每個索引表只能存在一個編輯中的索引表版本;