• О Милвусе
  • Начать
  • Концепции
  • Руководство пользователя
  • Импорт данных
  • Инструменты искусственного интеллекта
  • Руководство по администрированию
  • Инструменты
  • Интеграции
  • Учебники
  • Вопросы и ответы
  • API Reference

SPARSE_INVERTED_INDEX

Индекс SPARSE_INVERTED_INDEX - это тип индекса, используемый Milvus для эффективного хранения и поиска разреженных векторов. Этот тип индекса использует принципы инвертированного индексирования для создания высокоэффективной структуры поиска для разреженных данных. Для получения дополнительной информации см. раздел ИНВЕРТИРОВАННЫЙ.

Построение индекса

Чтобы построить индекс SPARSE_INVERTED_INDEX на разреженном векторном поле в Milvus, используйте метод add_index(), указав index_type, metric_type и дополнительные параметры для индекса.

from pymilvus import MilvusClient

# Prepare index building params
index_params = MilvusClient.prepare_index_params()

index_params.add_index(
    field_name="your_sparse_vector_field_name", # Name of the vector field to be indexed
    index_type="SPARSE_INVERTED_INDEX", # Type of the index to create
    index_name="sparse_inverted_index", # Name of the index to create
    metric_type="IP", # Metric type used to measure similarity
    params={"inverted_index_algo": "DAAT_MAXSCORE"}, # Algorithm used for building and querying the index
)

В данной конфигурации:

  • index_type: Тип индекса, который будет построен. В этом примере задайте значение SPARSE_INVERTED_INDEX.

  • metric_type: Метрика, используемая для расчета сходства между разреженными векторами. Допустимые значения:

    • IP (Внутреннее произведение): Измеряет сходство с помощью точечного произведения.

    • BM25: Обычно используется для полнотекстового поиска, фокусируясь на текстовом сходстве.

      Более подробную информацию см. в разделе Типы метрик и полнотекстовый поиск.

  • params.inverted_index_algo: Алгоритм, используемый для построения и запроса индекса. Допустимые значения:

    • "DAAT_MAXSCORE" (по умолчанию): Оптимизированная обработка запросов Document-at-a-Time (DAAT) с использованием алгоритма MaxScore. MaxScore обеспечивает лучшую производительность при больших значениях k или запросах с большим количеством терминов, пропуская термины и документы, которые, вероятно, будут иметь минимальное влияние. Это достигается путем разделения терминов на существенные и несущественные группы на основе их максимальных баллов влияния, фокусируясь на терминах, которые могут внести вклад в результаты top-k.

    • "DAAT_WAND": Оптимизированная обработка запросов DAAT с помощью алгоритма WAND. WAND оценивает меньше документов, попавших в запрос, за счет использования максимальных баллов влияния для пропуска неконкурентных документов, но при этом имеет более высокие накладные расходы на каждый запрос. Это делает WAND более эффективным для запросов с небольшими значениями k или коротких запросов, где пропуск документов более целесообразен.

    • "TAAT_NAIVE": Обработка запросов с использованием базового термина (TAAT). Хотя он медленнее, чем DAAT_MAXSCORE и DAAT_WAND, TAAT_NAIVE обладает уникальным преимуществом. В отличие от алгоритмов DAAT, использующих кэшированные оценки максимального воздействия, которые остаются статичными независимо от изменений глобального параметра коллекции (avgdl), TAAT_NAIVE динамически адаптируется к таким изменениям.

    Чтобы узнать больше о параметрах построения, доступных для индекса SPARSE_INVERTED_INDEX, обратитесь к разделу Параметры построения индекса.

После настройки параметров индекса вы можете создать индекс, используя метод create_index() напрямую или передавая параметры индекса в метод create_collection. Подробности см. в разделе Создание коллекции.

Поиск по индексу

После создания индекса и вставки сущностей можно выполнять поиск по сходству в индексе.

# Prepare the query vector
query_vector = [{1: 0.2, 50: 0.4, 1000: 0.7}]

res = MilvusClient.search(
    collection_name="your_collection_name", # Collection name
    anns_field="vector_field",  # Vector field name
    data=query_vector,  # Query vector
    limit=3,  # TopK results to return
)

Чтобы узнать о параметрах поиска, доступных для индекса SPARSE_INVERTED_INDEX, обратитесь к разделу Параметры поиска по индексу.

Параметры индекса

В этом разделе представлен обзор параметров, используемых для построения индекса и выполнения поиска по индексу.

Параметры построения индекса

В следующей таблице перечислены параметры, которые могут быть настроены в params при построении индекса.

Параметр

Описание

Диапазон значений

Предложение по настройке

inverted_index_algo

Алгоритм, используемый при построении индекса и запросов к нему. Он определяет, как индекс обрабатывает запросы.

"DAAT_MAXSCORE" (по умолчанию), "DAAT_WAND", "TAAT_NAIVE"

Используйте "DAAT_MAXSCORE" для сценариев с большими значениями k или запросов с большим количеством терминов, которые могут выиграть от пропуска неконкурентных документов.

Выберите "DAAT_WAND" для запросов с небольшими значениями k или коротких запросов, чтобы использовать более эффективный пропуск документов.

Используйте "TAAT_NAIVE", если требуется динамическая подстройка к изменениям коллекции (например, avgdl).

Специфические для индекса параметры поиска

В следующей таблице перечислены параметры, которые могут быть настроены в search_params.params при поиске по индексу.

Параметр

Описание

Диапазон значений

Tuning Suggestion

drop_ratio_search

Доля наименьших значений, которые следует игнорировать при поиске, что помогает уменьшить шум.

Фракция от 0,0 до 1,0 (например, 0,2 игнорирует 20 % наименьших значений).

Настройте этот параметр в зависимости от разреженности и уровня шума векторов запроса.

Этот параметр управляет долей значений малой величины, отбрасываемых при поиске. Увеличение этого значения (например, до 0.2) может уменьшить шум и сфокусировать поиск на более значимых компонентах, что может повысить точность и эффективность. Однако отбрасывание большего количества значений может также снизить запоминаемость за счет исключения потенциально значимых сигналов. Выберите значение, которое сбалансирует запоминание и точность для вашей рабочей нагрузки.

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?