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

ИНВЕРТИРОВАННЫЙ

Если вам необходимо часто выполнять запросы фильтрации данных, индексы INVERTED могут значительно повысить производительность запросов. Вместо сканирования всех документов Milvus использует инвертированные индексы, чтобы быстро находить записи, соответствующие условиям фильтра.

Когда использовать инвертированные индексы

Используйте инвертированные индексы, когда вам необходимо:

  • Отфильтровать по определенным значениям: Найти все записи, в которых поле равно определенному значению (например, category == "electronics").

  • Фильтровать текстовое содержимое: Выполнять эффективный поиск по полям VARCHAR.

  • Запрашивать значения полей JSON: Фильтр по определенным ключам в структурах JSON

Преимущество производительности: индексы INVERTED позволяют сократить время выполнения запросов с секунд до миллисекунд в больших наборах данных за счет отсутствия необходимости в полном сканировании коллекции.

Как работают индексы INVERTED

Индекс INVERTED в Milvus сопоставляет каждое уникальное значение поля (термин) с набором идентификаторов документов, в которых встречается это значение. Такая структура обеспечивает быстрый поиск полей с повторяющимися или категориальными значениями.

Как показано на схеме, процесс происходит в два этапа:

  1. Прямое сопоставление (ID → Термин): Каждый идентификатор документа указывает на содержащееся в нем значение поля.

  2. Инвертированное сопоставление (термин → идентификаторы): Milvus собирает уникальные термины и строит обратное отображение от каждого термина ко всем идентификаторам, которые его содержат.

Например, значение "электроника" соотносится с идентификаторами 1 и 3, а "книги" - с идентификаторами 2 и 5.

How Inverted Index Works Принцип работы инвертированного индекса

Когда вы фильтруете определенное значение (например, category == "electronics"), Milvus просто ищет термин в индексе и получает соответствующие идентификаторы напрямую. Это позволяет избежать сканирования всего набора данных и обеспечивает быструю фильтрацию, особенно для категориальных или повторяющихся значений.

Индексы INVERTED поддерживают все скалярные типы полей, такие как BOOL, INT8, INT16, INT32, INT64, FLOAT, DOUBLE, VARCHAR, JSON и ARRAY. Однако параметры индекса для индексирования поля JSON несколько отличаются от обычных скалярных полей.

Создание индексов для неJSON-полей

Чтобы создать индекс для неJSON-поля, выполните следующие действия:

  1. Подготовьте параметры индекса:

    from pymilvus import MilvusClient
    
    client = MilvusClient(uri="http://localhost:19530") # Replace with your server address
    
    # Create an empty index parameter object
    index_params = client.prepare_index_params()
    
  2. Добавьте индекс INVERTED:

    index_params.add_index(
        field_name="category",           # Name of the field to index
        index_type="INVERTED",          # Specify INVERTED index type
        index_name="category_index"     # Give your index a name
    )
    
  3. Создайте индекс:

    client.create_index(
        collection_name="my_collection", # Replace with your collection name
        index_params=index_params
    )
    

Создать индексы для полей JSONCompatible with Milvus 2.5.11+

Вы также можете создавать индексы INVERTED по определенным путям внутри полей JSON. Для этого потребуются дополнительные параметры для указания пути и типа данных JSON:

# Build index params
index_params.add_index(
    field_name="metadata",                    # JSON field name
    index_type="INVERTED",
    index_name="metadata_category_index",
    params={
        "json_path": "metadata[\"category\"]",    # Path to the JSON key
        "json_cast_type": "varchar"              # Data type to cast to during indexing
    }
)

# Create index
client.create_index(
    collection_name="my_collection", # Replace with your collection name
    index_params=index_params
)

Подробную информацию об индексировании полей JSON, включая поддерживаемые пути, типы данных и ограничения, см. в разделе Индексирование JSON.

Удаление индекса

Используйте метод drop_index(), чтобы удалить существующий индекс из коллекции.

  • В версии 2.6.3 и более ранних вы должны освободить коллекцию перед удалением скалярного индекса.

  • Начиная с версии 2.6.4 и выше, вы можете удалять скалярный индекс напрямую, как только в нем отпадет необходимость - не нужно сначала освобождать коллекцию.

client.drop_index(
    collection_name="my_collection",   # Name of the collection
    index_name="category_index" # Name of the index to drop
)

Лучшие практики

  • Создавайте индексы после загрузки данных: Создавайте индексы в коллекциях, которые уже содержат данные, для повышения производительности.

  • Используйте описательные имена индексов: Выбирайте имена, которые четко указывают на поле и цель

  • Контролируйте производительность индексов: Проверьте производительность запросов до и после создания индексов.

  • Учитывайте шаблоны запросов: Создавайте индексы для полей, по которым вы часто фильтруете

Следующие шаги

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

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

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

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