更新时间:2024-11-29 GMT+08:00

其他参数配置介绍

索引配置

向量检索插件集成了自研的向量检索引擎,提供了包括GRAPH等索引加速算法。当使用向量索引加速时,为了取得更高的查询性能或者查询精度,插件提供了部分与索引相关的参数配置选项。

  • GRAPH相关配置。
    • neighbors:图索引中每个向量的邻居数,默认值为64,值越大查询精度越高。索引越大,构建速度以及后续的查询速度也会变慢。
    • shrink:构建HNSW时的裁边系数,默认值1.0f。
    • scaling:HNSW上层图与下层图数据量的缩放倍数,默认值为50。
    • efc:构建HNSW时考察邻居节点的队列大小,默认值为200,值越大精度越高,构建速度变慢。
    • max_scan_num:扫描节点上限,默认值为10000,值越大精度越高,索引速度变慢。
  • PQ相关配置。当创建GRAPH_PQ索引或者PQ码本时都可配置。
    • centroid_num:每一段的聚类中心点数目,默认值为255。
    • fragment_num:段数,默认值为0,插件自动根据向量长度设置合适的段数。

查询配置

除索引的参数配置外,插件还提供针对向量索引的查询参数配置,可以调整GRAPH向量索引查询中的参数,取得更高的查询性能或者查询精度。

GRAPH相关配置。
  • ef:查询时考察邻居节点的队列大小。值越大查询精度越高,查询速度会变慢。默认值为200。
  • max_scan_num:扫描节点上限。值越大精度越高,查询速度变慢。默认值为10000。

集群配置

集群配置参数列表请参见表1

表1 集群配置参数列表

参数

说明

native.cache.circuit_breaker.enabled

是否开启堆外内存熔断。默认值为“true”

native.cache.circuit_breaker.cpu.limit

向量索引堆外内存使用上限。默认值为“45%”

例如:使用128GB内存的机器且堆内存大小为31GB,默认堆外内存使用上限为(128 - 31) * 45% = 43.65GB,堆外内存使用量超过该值将会触发写入熔断。

native.cache.expire.enabled

是否开启缓存超时设置。默认值:false。取值范围:

  • true:开启。开启时,如果某些缓存项长时间没有被访问过将会被清除。
  • false:关闭。

native.cache.expire.time

超时时长。默认值:24h。

native.vector.index_threads

创建底层索引时所使用的线程数。该值建议不要设置太大,否则会影响整体写入性能。默认值:4。

path.vector.data

向量检索词典文件存储的路径,默认为“/srv/BigData/elasticsearch/{实例名}/vector”。

  • 在离线导入数据场景下,为了提高批量写入性能,建议将索引的refresh_interval参数设置为“-1”,即关闭自动刷新索引。
  • 建议将备份数“number_of_replicas”设置为“0”,当离线数据导入完成后,再设置为需要的值。

索引缓存查询

向量检索引擎使用C++实现,使用堆外内存,在该插件中提供了两个API,方便对索引缓存进行更好的管理。

  • 查看缓存统计信息。

    在向量插件实现中,向量索引与Lucene其他类型索引一样,每一个segment构造并存储一份索引文件,在查询时,该索引文件会被加载到堆外内存中。插件使用缓存机制对这些堆外内存进行管理,上述API能够查询当前堆外内存使用量、缓存命中次数、加载次数等信息。

  • 清除缓存。

    PUT /_vector/clear/cache

    PUT /_vector/clear/cache/{index}

    在使用向量索引时,缓存机制会限制堆外内存使用量。当总索引大小超出缓存大小限制时,将会发生索引项的换进换出,此时将会影响查询的性能。通过清除缓存API能够将不再使用的索引缓存清空,保证热数据索引的查询性能。

向量索引信息查询

  • 查看向量检索统计信息。

    GET /_vector/stats

  • 预加载向量索引。

    PUT /_vector/warmup/{index}

向量检索词典

  • 注册词典

    PUT /_vector/register/{index}

    {

    "dict_name": "my_dict"

    }

  • 列举向量检索词典

    GET /_vector/list/{type}

  • 取消注册词典

    PUT /_vector/unregister

    {

    "dict_name": "my_dict"

    }

    取消注册词典有风险,如果在执行取消注册后还有IVF类型索引仍在使用该词典,则会导致还在使用该词典的索引在重启等场景因为没有词典而异常,请谨慎操作。