更新时间:2024-10-12 GMT+08:00

优化向量检索写入与查询性能

写入性能优化

  • 关闭副本,待数据导入完成后再开启副本,减少副本构建的开销。
  • 调整“refresh_interval”为120s或者更大,避免频繁刷新索引生成大量小的segments,同时减少merge带来的向量索引构建开销。
  • 适当调大“native.vector.index_threads”的值(默认为4),增加向量索引构建的线程数。
    PUT _cluster/settings
    {
      "persistent": {
        "native.vector.index_threads": 8
      }
    }

查询性能优化

  • 在批量导入场景下,数据写入完成后,执行forcemerge操作能有效提升查询效率。
    POST index_name/_forcemerge?max_num_segments=1
  • 如果向量索引所需堆外内存超过了熔断线,查询时索引的缓存管理器会控制索引的换进换出,导致查询变慢,此时可适当调大熔断线的配置。
    PUT _cluster/settings
    {
      "persistent": {
        "native.cache.circuit_breaker.cpu.limit": "75%"
      }
    }
  • 如果需要返回的字段较少,且均为keyword或者数值类型字段,可以通过docvalue_fields配置召回需要的字段,有效降低fetch阶段的开销。
    POST my_index/_search
    {
      "size": 2,
      "stored_fields": ["_none_"], 
      "docvalue_fields": ["my_label"],
      "query": {
        "vector": {
          "my_vector": {
            "vector": [1, 1],
            "topk": 2
          }
        }
      }
    }