云搜索服务 CSS-在Elasticsearch集群创建向量索引:(可选)预构建与注册中心点向量
(可选)预构建与注册中心点向量
当创建向量索引时选择使用“IVF_GRAPH”和“IVF_GRAPH_PQ”的索引算法,则需要对中心点向量进行预构建和注册。
在向量索引加速算法中,“IVF_GRAPH”和“IVF_GRAPH_PQ”适用于超大规模场景。这两种算法需要通过对子空间的切割缩小查询范围,子空间的划分通常采用聚类或者随机采样的方式。在预构建之前,需要通过聚类或者随机采样得到所有的中心点向量。通过预构建和注册将中心点向量预构建成GRAPH或者GRAPH_PQ索引,同时注册到 CSS 集群内,实现在多个节点间共享此索引文件。中心点索引在shard间复用能够有效减少训练的开销、中心点索引的查询次数,提升写入以及查询的性能。
- 选择启用向量检索的集群,单击操作列“Kibana”,登录Kibana界面。
- 单击左侧导航栏的“Dev Tools”,进入操作界面。
- 创建中心点索引表。
- 创建的索引命名为my_dict,注意该索引的number_of_shards数必须设置为1,否则无法注册。
- 当需要使用IVF_GRAPH索引时,中心点索引的algorithm设置为GRAPH。
- 当需要使用IVF_GRAPH_PQ索引时,中心点索引的algorithm设置为GRAPH_PQ。
PUT my_dict { "settings": { "index": { "vector": true }, "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "properties": { "my_vector": { "type": "vector", "dimension": 2, "indexing": true, "algorithm": "GRAPH", "metric": "euclidean" } } } }
- 写入中心点向量数据。
- 调用注册接口。
将上述创建的my_dict索引注册具有全局唯一标识名称(dict_name)的Dict对象。
PUT _vector/register/my_dict { "dict_name": "my_dict" }
- 创建IVF_GRAPH或IVF_GRAPH_PQ索引。
在创建IVF_GRAPH或者IVF_GRAPH_PQ索引时,不再需要指定dimension以及metric信息,只需指定之前注册好的dict名称即可。
PUT my_index { "settings": { "index": { "vector": true, "sort.field": "my_vector.centroid" # 将向量字段的centroid子字段设置为排序字段 } }, "mappings": { "properties": { "my_vector": { "type": "vector", "indexing": true, "algorithm": "IVF_GRAPH", "dict_name": "my_dict", "offload_ivf": true } } } }
表2 Field mappings参数 参数
说明
dict_name
指定依赖的中心点索引名称。该索引字段的向量维度和度量方式将与dict索引保持一致,不再需要额外指定。
offload_ivf
将底层索引实现的IVF倒排索引卸载到ES端实现,可以减少堆外内存的使用,以及减少写入/合并的性能开销。建议设置为true。
取值范围:true、false。
默认值:false。