Поделиться через


Сегментированная служба DiskANN: поиск вектора с фокусом

Сегментированный DiskANN — функция, позволяющая пользователю вручную делить (или разбивать) векторный индекс DiskANN на более мелкие или более удобные для управления индексы, которые обеспечивают более эффективный поиск. Можно определить необязательный параметр в политике индексирования контейнера, vectorIndexShardKeyкоторый указывает на свойство в документах. По сути, это создает несколько уникальных индексов векторов DiskANN для контейнера, по одному для каждого уникального значения, которое может принимать свойство.

Сегментированная diskANN предлагает множество преимуществ, в том числе:

  • Низкая задержка. Каждый сегментизованный векторный индекс DiskANN меньше размера, чем один более крупный индекс. Это может означать, что поиск векторов завершается в меньшее время.
  • Более низкая стоимость. Поиск по меньшему индексу требует меньшей вычислительной работы и может привести к снижению затрат на ЕЗ.
  • Улучшенное запоминание. Изолируя поиск на меньшем индексе DiskANN, определенном для VectorIndexShardKey, вы можете достичь более высокой полноты и точности в результатах поиска, поскольку он выполняется на более сфокусированном подмножестве данных.
  • Масштабируемость. Сегментирование позволяет системе обрабатывать большие наборы данных, распределяя данные по нескольким сегментам, что упрощает масштабирование по мере роста набора данных.
  • Изоляция векторных данных. Сегментированная diskANN гарантирует, что векторные данные можно изолировать на основе определенных атрибутов (ключей сегментов), обеспечивая более эффективное управление данными и безопасность. Поиски ограничены элементами данных, соответствующими только ключу сегмента.

Случаи использования

Сегментированная diskANN полезна в следующих сценариях:

  • Многоарендные среды. В мультитенантных сценариях сегментированный diskANN обеспечивает изоляцию данных для разных клиентов, гарантируя, что данные каждого клиента запрашиваются независимо.
  • Category-Specific Поиски Сегментированная служба DiskANN позволяет эффективно выполнять поиск вектора для конкретной категории путем секционирования индекса на основе свойства, определяющего категорию данных. Затем поиск векторов можно выполнять исключительно для этой категории.

Как использовать Sharded DiskANN

Использование DiskANN без сегментирования

Так как ключ VectorIndexShard является необязательным параметром, его опущение создаёт один индекс DiskANN на каждый физический раздел, как обычно.

  "vectorIndexes": [
    {"path": "/vector2", "type": "DiskANN} 
]

Используйте vectorIndexShardKey

Здесь можно увидеть пример определения ключа сегментов на основе свойства tenantID. Это может быть любое свойство элемента данных, даже ключа раздела. Одна строка должна быть заключена в массив как отдельный элемент.

"vectorIndexes": [
    {
        "path": "/vector2",
        "type": "DiskANN",
        "vectorIndexShardKey": ["/tenantID"]
    }
]

Напишите запрос векторного поиска, сфокусированный на ключе фрагмента

Чтобы сосредоточить запрос векторного поиска на определенном значении ключа сегмента, просто отфильтруйте путь к значению с помощью предложения WHERE, как показано в следующем примере:

SELECT TOP 10 *
FROM c
ORDER BY VectorDistance(c.vector, {queryVector})
WHERE c.tenantID = "tenant1"