(可选)预构建与注册 本章节主要介绍如何预构建与注册。 在创建向量索引时,若选择使用“IVFGRAPH”和“IVFGRAPHPQ”的索引算法就需要对中心点向量进行预构建和注册。 背景信息 在向量索引加速算法中,IVFGRAPH和IVFGRAPHPQ适用于超大规模场景。这两种算法需要通过对子空间的切割缩小查询范围,子空间的划分通常采用聚类或者随机采样的方式。在预构建之前,需要通过聚类或者随机采样得到所有的中心点向量。 当完成生成中心点向量的工作之后,需要对中心点向量进行预构建和注册,以实现将中心点向量预构建GRAPH或者GRAPHPQ索引,同时注册到ES集群内,实现在多个节点间共享此索引文件。中心点索引在shard间复用能够有效减少训练的开销、中心点索引查询次数,提升写入以及查询的性能。 操作步骤 1.选择启用向量检索的集群,单击操作列“Kibana”,登录Kibana界面。 2.单击左侧导航栏的“Dev Tools”,进入操作界面。 3.创建中心点索引表。 −创建的索引命名为mydict,注意该索引的numberofshards数必须设置为1,否则无法注册。 −当需要使用IVFGRAPH索引时,中心点索引的algorithm设置为GRAPH。 −当需要使用IVFGRAPHPQ索引时,中心点索引的algorithm设置为GRAPHPQ。 PUT mydict { "settings": { "index": { "vector": true }, "numberofshards": 1, "numberofreplicas": 0 }, "mappings": { "properties": { "myvector": { "type": "vector", "dimension": 2, "indexing": true, "algorithm": "GRAPH", "metric": "euclidean" } } } } 4.写入中心点向量数据。 参考创建向量索引章节中的“导入向量数据”,将采样或者聚类得到的中心点向量写入上述创建的mydict索引中。 5.调用注册接口。 将上述创建的mydict索引注册具有全局唯一标识名称(dictname)的Dict对象。 PUT vector/register/mydict { "dictname": "mydict" } 6.创建IVFGRAPH或IVFGRAPHPQ索引。 在创建IVFGRAPH或者IVFGRAPHPQ索引时,不再需要指定dimension以及metric信息,只需指定之前注册好的dict名称即可。 PUT myindex { "settings": { "index": { "vector": true } }, "mappings": { "properties": { "myvector": { "type": "vector", "indexing": true, "algorithm": "IVFGRAPH", "dictname": "mydict", "offloadivf": false } } } } Field mappings参数 参数 说明 dictname 指定依赖的中心点索引名称。该索引字段的向量维度和度量方式将与dict索引保持一致,不再需要额外指定。 offloadivf 将底层索引实现的IVF倒排索引卸载到ES端实现,可以减少堆外内存的使用,以及减少写入/合并的性能开销,但是查询的性能也有一定的损失。采用默认值即可。 取值范围:true、false。 默认值:false。