В этой статье вы узнаете, как начать работу с базой данных векторов milvus: включая установку Docker, установку и использование milvus, визуализацию attu и полное руководство по запуску Milvus для поиска по сходству векторов.
В этой статье вы узнаете, как начать работу с базой данных векторов milvus: включая установку Docker, установку и использование milvus, визуализацию attu и полное руководство по запуску Milvus для поиска по сходству векторов.

Предисловие: В Интернете есть много объяснений милвуса, но, прочитав их, я все еще чувствую, что они не очень подробные. Я специально написал этот блог, чтобы записать подробные шаги в качестве вводного поста о милвусе.

1. Введение в Милвус (2019 г.)

1.1 Что такое векторный поиск?

Вектор — это величина определенного размера и направления. Его можно просто понимать как набор чисел, например матрицу с одной строкой и несколькими столбцами, например: [2,0,1,9,0,6,3. ,0]. Каждая строка представляет элемент данных, а каждый столбец представляет атрибут элемента данных.

Собственные векторы — это векторы, которые содержат важные характеристики чего-либо. Хорошо известным вектором признаков является цвет RGB (красный-зеленый-синий). Каждый цвет можно получить соотношением трех цветов: красного®, зеленого (G) и синего (B). Такой вектор признаков можно описать как: цвет = [красный, зеленый, синий].

Под поиском векторов понимается извлечение K векторов, ближайших к целевому вектору, из библиотеки векторов. Обычно мы используем евклидово расстояние, косинусное расстояние и т. д. между двумя векторами, чтобы измерить расстояние между двумя векторами и оценить сходство двух векторов одновременно.

1.2 Знакомство с Милвусом

Нажмите, чтобы войти Milvus официальный сайт.

Milvus был создан в 2019 году с единственной целью: хранить, индексировать и управлять большим количеством векторов внедрения, созданных глубокими нейронными сетями и другими моделями машинного обучения (ML). Будучи базой данных, специально предназначенной для обработки входных векторных запросов, она способна индексировать векторы в масштабе триллиона. В отличие от существующих реляционных баз данных, которые в основном обрабатывают структурированные данные по заранее заданным схемам, Milvus спроектирован снизу вверх для обработки встроенных векторов, преобразованных из неструктурированных данных.

Milvus — это векторная база данных с открытым исходным кодом, которая поддерживает операции добавления, удаления и модификации, а также запросы векторов размером в терабайтах практически в реальном времени. Она очень гибкая, стабильная, надежная и обладает характеристиками высокоскоростных запросов. Milvus интегрирует широко используемые библиотеки векторных индексов, такие как Faiss, NMSLIB и Annoy, поддерживает такие функции, как секционирование и сегментирование данных, сохранение данных, инкрементальный прием данных, скалярно-векторный гибридный запрос и перемещение во времени. Производительность может удовлетворить потребности приложений в любом сценарии векторного поиска. Он предоставляет набор простых и интуитивно понятных API, позволяющих выбирать разные типы индексов для разных сценариев. Кроме того, Milvus также может фильтровать скалярные данные, что еще больше улучшает запоминаемость и повышает гибкость поиска.

Milvus использует общую архитектуру хранения данных, в которой хранилище и вычисления полностью разделены, а вычислительные узлы поддерживают горизонтальное расширение. С архитектурной точки зрения Milvus следует разделению потока данных и потока управления и разделен на четыре уровня: уровень доступа, службу координатора, рабочий узел и уровень хранения. Каждый уровень независим друг от друга, способен к независимому расширению и аварийному восстановлению.

С развитием Интернета,,Неструктурированные данные становятся все более распространенными,Включает электронные письма, документы, данные датчиков Интернета вещей, фотографии Facebook, белковые структуры и многое другое. для Позвольте компьютерам понимать и обрабатывать неструктурированные данные,Технология встраивания use преобразует эти данные в векторы. Milvus хранит и индексирует эти векторы. Milvus может анализировать корреляцию между двумя векторами, вычисляя расстояние их сходства. Если два вектора внедрения очень похожи,Это означает, что исходный источник данных также очень похож.。Milvus База данных векторов специально разработана для векторных запросов и поиска и может индексировать триллионы векторных данных. В отличие от существующих реляционных баз данных, которые в основном используются для обработки структурированных данных, Milvus В основе лежит обработка преобразования различных неструктурированных данных. Embedding Рожденный от переносчиков

2. Установите Milvus Standalone с помощью Docker Compose.

Описывает, как использовать Docker Compose для самостоятельной установки Milvus. Перед установкой проверьте требования к аппаратному и программному обеспечению.

Для пользователей MacOS 10.14 и более поздних версий настройте виртуальную машину Docker так, чтобы она использовала как минимум 2 виртуальных процессора и 8 ГБ начальной памяти. В противном случае установка может завершиться неудачно.

Ссылка на официальный сайт Милвуса

2.1 Загрузите YAML-файл

Загрузите milvus-standalone-docker-compose. и сохраните его как docker-compose. Создайте Yml вручную или с помощью следующей команды.

Язык кода:javascript
копировать
wget https://github.com/milvus-io/milvus/releases/download/v2.2.11/milvus-standalone-docker-compose.yml -O docker-compose.yml

2.2 Запуск Милвуса

В том же каталоге, что и docker-compose. yml, выполните следующую команду, чтобы запустить Milvus:

Язык кода:javascript
копировать
sudo docker-compose up -d

or

docker-compose up -d

Совет: Если в вашей системе установлен Docker Compose V2 вместо V1, используйте Docker Compose вместо Docker-Compose. Если это так, проверьте версию Docker Compose. Нажмите здесь, чтобы узнать больше.

2.2.1.docker-compose: команда не нашла решение

При запуске команды docker-compose up -d появляется сообщение об ошибке, указывающее, что команда не найдена.

Язык кода:javascript
копировать
# docker-compose up -d
-bash: docker-compose: command not found

Решение:

  1. Установить пип
Язык кода:javascript
копировать
# yum -y install epel-release
# yum -y install python-pip
  1. Обновление пункта
Язык кода:javascript
копировать
# pip install --upgrade pip
  1. Установите плагин docker-compose
Язык кода:javascript
копировать
# pip install docker-compose
  1. Проверьте успешную установку
Язык кода:javascript
копировать
# docker-compose -version
docker-compose version 1.29.2, build unknown
Загрузка docker-compose 2.2.2 зависла

Когда я впервые использовал среду установки, загрузка зависла, и даже после многократного повторения команды она зависла в том же месте. В конце концов решение было найдено и перезапуск решил 99% проблем.

raise DockerException( docker.errors.DockerException: Error while fetching server API version: (‘Connection aborted.’, FileNotFoundError(2, ‘No such file or directory’))

Перезапустить докер
Язык кода:javascript
копировать
service docker restart
2.2.3 Продолжите вышеуказанные шаги

Создание займет много времени, наберитесь терпения.

Язык кода:javascript
копировать
Creating milvus-etcd  ... done
Creating milvus-minio ... done
Creating milvus-standalone ... done

Теперь проверьте, запущен ли контейнер. (Я встал на заднем плане)

Язык кода:javascript
копировать
sudo docker-compose ps

or

docker-compose ps

После запуска автономного сервиса Milvus будут работать три докер-контейнера, включая автономный сервис Milvus и две его зависимости.

Язык кода:javascript
копировать
      Name                     Command                  State                            Ports
--------------------------------------------------------------------------------------------------------------------
milvus-etcd         etcd -advertise-client-url ...   Up             2379/tcp, 2380/tcp
milvus-minio        /usr/bin/docker-entrypoint ...   Up (healthy)   9000/tcp
milvus-standalone   /tini -- milvus run standalone   Up             0.0.0.0:19530->19530/tcp, 0.0.0.0:9091->9091/tcp

2.3 Подключиться к Милвусу

Проверьте, какой локальный порт прослушивает сервер Milvus. Замените имя контейнера своим собственным именем.

Язык кода:javascript
копировать
docker port milvus-standalone 19530/tcp

Вы можете подключиться к кластеру Milvus через локальный IP-адрес и номер порта, возвращаемые этой командой.

2.4 Остановить Милвуса

Чтобы остановить автономный Milvus, запустите:

Язык кода:javascript
копировать
sudo docker-compose down

Для удаления данных после остановки Милвуса используйте команду:

Язык кода:javascript
копировать
sudo rm -rf  volumes

3. Запускаем и тестируем

3.1 Установка зависимостей:

Язык кода:javascript
копировать
pymilvus>=2.1.0
hnswlib>=0.5.2
pybind11
milvus>=2.1.0

3.2 Загрузите пример кода для тестирования

  • скачать hello_milvus.py напрямую или с помощью следующей команды
Язык кода:javascript
копировать
wget https://raw.githubusercontent.com/milvus-io/pymilvus/v2.2.8/examples/hello_milvus.py

or

wget https://raw.githubusercontent.com/milvus-io/pymilvus/v2.2.x/examples/hello_milvus.py

бегать hello_milvus.py

Язык кода:javascript
копировать
python hello_milvus.py
Язык кода:javascript
копировать
=== start connecting to Milvus     ===

Does collection hello_milvus exist in Milvus: False

=== Create collection `hello_milvus` ===


=== Start inserting entities       ===

Number of entities in Milvus: 3000

=== Start Creating index IVF_FLAT  ===


=== Start loading                  ===


=== Start searching based on vector similarity ===

hit: id: 2998, distance: 0.0, entity: {'random': 0.9728033590489911}, random field: 0.9728033590489911
hit: id: 1262, distance: 0.08883658051490784, entity: {'random': 0.2978858685751561}, random field: 0.2978858685751561
hit: id: 1265, distance: 0.09590047597885132, entity: {'random': 0.3042039939240304}, random field: 0.3042039939240304
hit: id: 2999, distance: 0.0, entity: {'random': 0.02316334456872482}, random field: 0.02316334456872482
hit: id: 1580, distance: 0.05628091096878052, entity: {'random': 0.3855988746044062}, random field: 0.3855988746044062
hit: id: 2377, distance: 0.08096685260534286, entity: {'random': 0.8745922204004368}, random field: 0.8745922204004368
search latency = 0.1278s

=== Start querying with `random > 0.5` ===

query result:
-{'random': 0.6378742006852851, 'embeddings': [0.20963514, 0.39746657, 0.12019053, 0.6947492, 0.9535575, 0.5454552, 0.82360446, 0.21096309], 'pk': '0'}
search latency = 0.0587s
query pagination(limit=4):
        [{'random': 0.6378742006852851, 'pk': '0'}, {'random': 0.5763523024650556, 'pk': '100'}, {'random': 0.9425935891639464, 'pk': '1000'}, {'random': 0.7893211256191387, 'pk': '1001'}]
query pagination(offset=1, limit=3):
        [{'random': 0.5763523024650556, 'pk': '100'}, {'random': 0.9425935891639464, 'pk': '1000'}, {'random': 0.7893211256191387, 'pk': '1001'}]

=== Start hybrid searching with `random > 0.5` ===

hit: id: 2998, distance: 0.0, entity: {'random': 0.9728033590489911}, random field: 0.9728033590489911
hit: id: 747, distance: 0.14606499671936035, entity: {'random': 0.5648774800635661}, random field: 0.5648774800635661
hit: id: 2527, distance: 0.1530652642250061, entity: {'random': 0.8928974315571507}, random field: 0.8928974315571507
hit: id: 2377, distance: 0.08096685260534286, entity: {'random': 0.8745922204004368}, random field: 0.8745922204004368
hit: id: 2034, distance: 0.20354536175727844, entity: {'random': 0.5526117606328499}, random field: 0.5526117606328499
hit: id: 958, distance: 0.21908017992973328, entity: {'random': 0.6647383716417955}, random field: 0.6647383716417955
search latency = 0.1308s

=== Start deleting with expr `pk in ["0" , "1"]` ===

query before delete by expr=`pk in ["0" , "1"]` -> result:
-{'random': 0.6378742006852851, 'embeddings': [0.20963514, 0.39746657, 0.12019053, 0.6947492, 0.9535575, 0.5454552, 0.82360446, 0.21096309], 'pk': '0'}
-{'random': 0.43925103574669633, 'embeddings': [0.52323616, 0.8035404, 0.77824664, 0.80369574, 0.4914803, 0.8265614, 0.6145269, 0.80234545], 'pk': '1'}

query after delete by expr=`pk in ["0" , "1"]` -> result: []


=== Drop collection `hello_milvus` ===

3.3 Подробное объяснение кода hello_milvus

Для объяснения этого кода обратитесь к сообщению блога 3, где есть простые изменения для лучшего понимания.

  • Код поясняется построчно ниже: гипотетический фон:Теперь есть сумка, полная разных видов.измяч,Некоторые из этих шаров большие. из них представляют собой маленькие шарики、Некоторые круглые、Некоторые квадратные и так далее.
  • Импортируйте пакет PyMilvus:
Язык кода:javascript
копировать
from pymilvus import (
    connections,
    utility,
    FieldSchema,
    CollectionSchema,
    DataType,
    Collection,
)

Теперь нам нужен инструмент (для поиска, организации и управления этими шарами)

  • Конкретное объяснение кода
    1. from pymilvus import:нам нужно использоватьприезжать Один называется “pymilvus” панель инструментов (библиотека кода).
    2. connections, utility,:здесьмы хотимиспользоватьв ящике для инструментовиздва инструмента,Один называется «связи»., Помогает подключиться к сумке (другая база данных называется); «Утилита», имеющая ряд полезных функций по эксплуатации и управлению мячом.
    3. FieldSchema, CollectionSchema,: Эти двое похожи на шаблоны для изготовления сумок для мячей, Расскажите, как придать форму и размер различным волшебным шарам.
    4. DataType,: этот инструмент сообщает захватывающему устройству, как идентифицировать различные типы шариков и как отделять круглые и квадратные шарики.
    5. Collection,:наконец,Мы используем “Collection” Этот инструмент создает специальную сумку, в которой можно удерживать мяч.

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

3.3.1 Подключитесь к серверу:
Язык кода:javascript
копировать
connections.connect("default", host="localhost", port="19530")

Эта строка кода сообщает компьютеру, как подключиться к сумке с мячами, где находится сумка и как ее открыть.

  • Конкретное объяснение кода:
    1. default:Давайте дадим этому соединению имя,называется «по умолчанию», чтобы, когда нам понадобится подключиться в будущем, мы знали, что нужно использовать это имя для поиска сумки.
    2. host="localhost":здесь Скажи грабберу, где сумка.。"localhost"скажи компьютеру,Эта сумка находится на текущем компьютере, а не на другом компьютере.
    3. port="19530":здесь Расскажите захватчику, как открыть сумку.。“19530”как пароль или ключ,У вас должен быть правильный «номер порта», чтобы войти в сумку и прикоснуться к волшебному шару прибытия.

`

3.3.2 Создайте коллекцию:
Язык кода:javascript
копировать
fields = [
    FieldSchema(, dtype=DataType.INT64, is_primary=True, auto_id=False),
    FieldSchema(, dtype=DataType.DOUBLE),
    FieldSchema(, dtype=DataType.FLOAT_VECTOR, dim=8)
]
schema = CollectionSchema(fields, "hello_milvus is the simplest demo to introduce the APIs")
hello_milvus = Collection("hello_milvus", schema)

Этот код в основном выполняет следующие три вещи:

  1. Определите различные свойства волшебного шара.
  2. Создайте шаблон мешочка с волшебным шаром, который будет содержать эти свойства.
  3. Создайте настоящий мешок из волшебных шаров.
  • Конкретное объяснение кода:
    1. fields = [...]:здесьнасопределение Понятномагиямячиз Каковы атрибуты,Всего атрибутов три:
      • FieldSchema(, dtype=DataType.INT64, is_primary=True, auto_id=False): определяет файл с именем “pk” Атрибут, тип данных целочисленный (INT64), этот атрибут является основным, похож на число, используемый для различения каждого магического шара. is_primary=Истина Указывает, что этот атрибут является основным атрибутом, auto_id=False. Указывает, что номер не будет генерироваться автоматически.
      • FieldSchema(, dtype=DataType.DOUBLE): определяет файл с именем “random” атрибут, тип данных — число двойной точности с плавающей запятой (DOUBLE), этот атрибут описывает некоторые характеристики волшебного шара, такие как цвет, вес и т. д.
      • FieldSchema(, dtype=DataType.FLOAT_VECTOR, dim=8): определяет файл с именем “embeddings” Атрибут, тип данных — вектор с плавающей запятой (FLOAT_VECTOR), который может содержать 8 данных с плавающей запятой. Этот атрибут может описывать многомерные характеристики магического шара, такие как форма, текстура и т. д.
    2. schema = CollectionSchema(fields, "hello_milvus is the simplest demo to introduce the APIs"): На основе только что определенных атрибутов (полей) волшебного шара мы создаем шаблон для мешочка с волшебным шаром. Заодно добавляем к этому шаблону описание: «hello_milvus is the simplest demo to introduce the APIs”。
    3. hello_milvus = Collection("hello_milvus", schema): Наконец, на основе шаблона (схемы) мешка с волшебным шаром мы создали файл с именем “hello_milvus” мешочек с волшебным шаром. Теперь в этой сумке можно хранить волшебные шары с заданными нами свойствами.

Подводя итог, этот код определяет свойства волшебного шара, создает шаблон, а затем фактически создает мешок с волшебными шарами. Теперь мы можем начать складывать волшебные шары в этот мешочек, извлекать их и распоряжаться ими в соответствии с их свойствами.

3.3.3 Вставьте векторы в коллекцию:
Язык кода:javascript
копировать
import random
entities = [
    [i for i in range(3000)],  # field pk
    [float(random.randrange(-20, -10)) for _ in range(3000)],  # field random
    [[random.random() for _ in range(8)] for _ in range(3000)],  # field embeddings
]
insert_result = hello_milvus.insert(entities)
# After final entity is inserted, it is best to call flush to have no growing segments left in memory
hello_milvus.flush()

Этот код в основном выполняет следующие три вещи:

  1. импортировать модуль случайных чисел;
  2. Создайте 3000 объектов волшебного шара, каждый объект содержит три значения атрибута;
  3. к тому, который мы создали ранее hello_milvus Мешок с волшебным шаром вставляется в эти объекты, и данные сбрасываются в память.
  • Конкретное объяснение заключается в следующем:
    1. import random:эта строка кодаимпортировать ПонятноPythonиз random Модуль генерации случайных чисел.
    2. entities = [...]:здесьнассоздавать Понятноимядля entities переменная, которая представляет собой переменную, содержащую 3000 Список объектов магического шара. Каждая сущность имеет три значения атрибута:
    3. [i for i in range(3000)]:Создайте файл,содержащий 3000 список целых чисел как сущностей “pk” значение атрибута.здесь,целое число от 0 приезжать 2999。
    4. [float(random.randrange(-20, -10)) for _ in range(3000)]: Создайте файл, содержащий 3000 список случайных чисел с плавающей запятой, которые будут использоваться в качестве объектов “random” значение атрибута. Эти числа с плавающей запятой находятся между -20 и -10 между.
    5. [[random.random() for _ in range(8)] for _ in range(3000)]: Создайте файл, содержащий 3000 список векторов с плавающей запятой как объектов “embeddings” значение атрибута. Каждый вектор содержит 8 случайное число с плавающей запятой в диапазоне от 0 приезжать 1 между.
    6. insert_result = hello_milvus.insert(entities): Эта строка кода вставляет сущность «Магический шар создательблагодизма» в приезжатьнашего предыдущего создателя. hello_milvus Волшебный шар в мешочке. вставлять() Функция возвращает объект результата вставки.
    7. hello_milvus.flush():эта строка кодавызов flush() функция, будет hello_milvus сумка с волшебным данные шаром освежить память приезда. Преимущество этого заключается в том, что данные вставленного объекта сохраняются в памяти, чтобы мы могли выполнять последующие запросы, поиск и другие операции.

Подводя итог, этот код вставляет 3000 объектов магического шара со случайными значениями атрибутов в наш мешок с магическими шарами и сбрасывает данные в память. Таким образом, у нас есть некоторые данные, позволяющие убедиться, что функциональность мешка с волшебным шаром, которую мы создали ранее, работает правильно.

3.3.4 Создайте индекс для сущности:
Язык кода:javascript
копировать
index = {
    "index_type": "IVF_FLAT",
    "metric_type": "L2",
    "params": {"nlist": 128},
}
hello_milvus.create_index("embeddings", index)

Этот код в основном выполняет следующие две вещи:

  1. Определить параметры индекса;
  2. для embeddings Индекс создания недвижимости.
  • Конкретное объяснение заключается в следующем:
    1. index = {...}:насопределяет файл с именем index Переменная словаря, содержащая соответствующие параметры индекса.
    2. "index_type": «IVF_FLAT»: установите тип индекса для “IVF_FLAT”。 Это тип индекса, основанный на инвертированном файле (IVF), который использует плоское сканирование (FLAT) для достижения точного расчета расстояния. Этот тип индекса подходит для наборов данных среднего размера.
    3. "metric_type": "L2":Установить метод измерения расстояниядля Евклидово расстояние(L2расстояние)。Это обычно используемыйиз Измерение сходства векторовизметод。
    4. "params": {"nlist": 128}:Установить индексизпараметр。здесьнаснастраиватьпараметр “nlist” для 128, Он представляет собой инвертированный файл, созданный в 128 инвертированный список списки). больше nlist Значения помогают улучшить скорость поиска, но увеличивают показатель потребления памяти.
    5. hello_milvus.create_index("embeddings", index):Согласно настройкамизиндекспараметр, Мы звоним create_index() Функция для hello_milvus сумка с волшебным шаром “embeddings” Индекс создания После индексации недвижимости.создавать мы можем быстро запросить объекты магического шара, расстояние которых соответствует требованиям.

Подводя итог, этот код hello_milvus сумка с волшебным шаром “embeddings” Атрибут создает индекс, с помощью которого мы можем быстрее и точнее находить объекты магического шара, расположенные близко друг к другу.

3.3.5 Загрузите коллекцию в память и выполните поиск по векторному сходству:
Язык кода:javascript
копировать
hello_milvus.load()
vectors_to_search = entities[-1][-2:]
search_params = {
    "metric_type": "L2",
    "params": {"nprobe": 10},
}
result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, output_fields=["random"])

Этот код в основном выполняет следующие пять вещей:

  1. Загрузите сумку с волшебным шаром, приезжайте в память;
  2. Выберите вектор для запроса;
  3. Установить параметры поиска;
  4. По вектору запросапараметры ипоискаруководитьпоиск;
  5. Возвращает результаты поиска.
  • Конкретное объяснение заключается в следующем:
    1. hello_milvus.load():вызов load() функция, будет hello_milvus Мешок данных с волшебным шаром загружается в память приезжающего. Прежде чем продолжить, нам необходимо убедиться, что данные из сумки загружены в память прибытия.
    2. vectors_to_search = entities[-1][-2:]:раньшесоздаватьизсущность entities в списке, Выберите последний объект из двух последних векторов, так как мы хотим запросить вектор из.
    3. search_params = {...}:здесьнасопределяет файл с именем search_params из словарной переменной, используемой для установки параметров поиска.
    4. "metric_type": "L2":Установить метод измерения расстояниядля Евклидово расстояние(L2расстояние)。
    5. "params": {"nprobe": 10}:настраиватьпоискпараметр “nprobe” для 10, Представляет поиск из инвертированного списка. 10 Выполните точные расчеты расстояний до ближайших кандидатов. больше nprobe Ценность помогает повысить точность поиска, но снижает скорость поиска.
    6. result = hello_milvus.search(...):По вектору запроса Vectors_to_search, индексный атрибут “embeddings” параметры ипоиска search_params, вызов search() Функция для осуществления поиска. В то же время установите limit=3 Чтобы ограничить количество результатов поиска и вернуть первые три ближайших объекта магического шара.
    7. output_fields=["random"] Указывает, что выходные результаты включают “random” свойство.
    8. result В переменной хранится результат поиска, Этот результат содержит три верхних объекта, наиболее близких к вектору запроса (отсортированные по евклидову расстоянию), и их “random” значение атрибута.

Подводя итог, этот код Мы предлагаем hello_milvus Метод поиска в мешке магических шаров объектов, похожих на вектор запроса. Установив соответствующие параметры поиска, мы можем найти баланс между точностью и скоростью в соответствии с реальными потребностями. Результаты поиска возвращают определенное количество объектов, наиболее близких к вектору запроса и связанным с ними атрибутам.

3.3.6 Выполните векторный запрос:
Язык кода:javascript
копировать
result = hello_milvus.query(expr="random > -14", output_fields=["random", "embeddings"])

Этот код в основном выполняет следующие две вещи:

  1. использовать query() Функция выполняет условный запрос;
  2. Возврат результатов запроса.
  • Конкретное объяснение заключается в следующем:
    1. result = hello_milvus.query(...):вызов query() Функция выполняет условный запрос. Мы устанавливаем выражение запроса в этой функции expr=“random > -14", что указывает на запрос hello_milvus Волшебный шар в мешочке “random” Атрибут больше, чем -14 сущность.
    2. output_fields=["random", "embeddings"]:настраивать Выходные результаты включают в себя “random” и “embeddings” Два свойства. Это означает, что результат запроса вернет сущности, удовлетворяющие условию из и его двум значениям. атрибута.
    3. result В переменной хранится результат запроса, который содержит результаты, удовлетворяющие условию («случайный» Атрибут больше, чем -14) субъекты и их “random” и “embeddings” значение атрибута.

Подводя итог, этот код использует query() функция, в hello_milvus Мешок с волшебным шаром заполняется согласно заданным условиям («случайно» Атрибут больше, чем -14) Выполните запрос и верните объекты, соответствующие условиям, и связанные с ними атрибуты. Задавая разные выражения запроса, мы можем гибко запрашивать данные сущности в разных условиях.

3.3.7 Выполните гибридный поиск:
Язык кода:javascript
копировать
result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, expr="random > -12", output_fields=["random"])

Этот код в основном выполняет следующие две вещи:

  1. использовать search() поиск условия выполнения функции;
  2. Возвращает результаты поиска.
  • Конкретное объяснение заключается в следующем:
    1. result = hello_milvus.search(...):По вектору запроса Vectors_to_search, индексный атрибут “embeddings” параметры ипоиска search_params,вызов search() Функция для осуществления поиска. Дополнительно установите limit=3 Чтобы ограничить количество результатов поиска и вернуть первые три объекта магического шара, ближайшие к вектору запроса.
    2. expr="random > -12":Добавьте новое условное выражение,означает толькопоиск Выполните условия(“random” Атрибут больше, чем -12) сущность. Таким образом, мы можем одновременно удовлетворить другие условия атрибутов в векторе сходства поиска.
    3. output_fields=["random"]:настраивать Вывод включает только “random” свойство. Это означает, что результат поиска вернет сущности, удовлетворяющие условию из и их свойства. “random” значение атрибута.
    4. result В переменной хранится результат поиска, Этот результат содержит три наиболее близких к вектору запроса, которые удовлетворяют условию («случайный» Атрибут больше, чем -12) субъекты и их “random” значение атрибута.

Подводя итог, этот код использует search() функция, в hello_milvus Мешок с волшебным шаром заполняется согласно заданным условиям («случайно» Атрибут больше, чем -12) Поиск и возврат объектов, соответствующих условиям и связанным с ними атрибутам. Добавляя выражения запроса, мы можем удовлетворить другие условия атрибутов при поиске похожих векторов. Таким образом, в практических приложениях можно удовлетворить более сложные требования к запросам.

3.3.8 Удалить сущность по первичному ключу:
Язык кода:javascript
копировать
expr = f"pk in [{ids[0]}, {ids[1]}]"
hello_milvus.delete(expr)

Этот код в основном выполняет следующие операции:

  1. Построить условное выражение удаления;
  2. использовать delete() Функция удаляет совпадающие условия сущности.
  • Конкретное объяснение заключается в следующем:
    1. expr = f"pk in [{ids[0]}, {ids[1]}]":здесь,насиспользовать Python из Синтаксис f-строки (форматированная строка), создает имя для expr изString переменная. Эта строка представляет собой условное выражение удаления: «Первичный ключ (pk) в заданном из двух ids "в".ids Это список, содержащий первичный ключ объекта, который мы хотим удалить. {идентификаторы[0]} и {ids[1]} Соответственно ids № из в списке 0 индивидуальный 1 элементы.
    2. hello_milvus.delete(expr):вызов delete() функция, основанная на условном выражении expr Удалить критерий соответствия. В этом примере мы удаляем сущность с заданным первичным ключом. ids[0] и ids[1] сущность.

Подводя итог, этот код удаляет условное выражение на основе expr,использовать delete() функция от hello_milvus Сущности, соответствующие критериям, удаляются из мешка с волшебным шаром. Устанавливая различные условные выражения, мы можем гибко удалять сущности в соответствии с фактическими потребностями.

3.3.9 Удалить коллекцию:
Язык кода:javascript
копировать
utility.drop_collection("hello_milvus")

Здесь мы вызываем функцию drop_collection(), чтобы удалить коллекцию с указанным именем «hello_milvus». При удалении коллекции все сущности, структуры индексов и метаданные, связанные с коллекцией, удаляются.

4. Подробное объяснение визуализации атту.

https://github.com/zilliztech/attu/blob/main/doc/zh-CN/attu_install-docker.md

Язык кода:javascript
копировать
docker run -p 8000:3000  -e MILVUS_URL={your machine IP}:19530 zilliz/attu:v2.2.6

Установите Attu с помощью Docker Compose для управления сервисом Milvus v2.2.x.

Attu — эффективный инструмент управления с открытым исходным кодом от Milvus. В этом разделе описывается, как установить Attu с помощью Docker Compose, эффективного инструмента управления с открытым исходным кодом.

  • Экологические требования
    • Докер 19.03 и выше
    • Milvus 2.1.0 или выше
  • Сопоставление версий Milvusприезжатату

Milvus Version

Recommended Attu Image Version

v2.0.x

v2.0.5

v2.1.x

v2.1.5

v2.2.x

v2.2.6

  • Запустить экземпляр Attu
Язык кода:javascript
копировать
docker run -p 8000:3000  -e MILVUS_URL={your machine IP}:19530 zilliz/attu:v2.2.6

После запуска докера посетите «http://{ваш machine IP}:8000”,Нажмите“Connect”ВходитьAttuСлужить。нас Также поддерживаетTLSсоединять,Имя пользователя и пароль.

* Подключитесь к сервису Милвус

Подключитесь к сервису Milvus, используя логин и пароль.

скачать `"milvus-standalone-docker-compose. И сохраните его как "docker-compose". Вручную или с помощью следующей команды.

Язык кода:javascript
копировать
wget https://github.com/milvus-io/milvus/releases/download/v2.2.11/milvus-standalone-docker-compose.yml -O docker-compose.yml

Отредактируйте «docker-compose». Используйте свой любимый текстовый редактор, чтобы добавить файл Yml, добавленный в служебный блок:

Язык кода:javascript
копировать
  attu:
    container_name: attu
    image: zilliz/attu:v2.2.6
    environment:
      MILVUS_URL: milvus-standalone:19530
    ports:
      - "8000:3000"
    depends_on:
      - "standalone"

В том же каталоге, что и файл «docker-compose». запустить Следующая команда запускает MilvusиAttu:

Язык кода:javascript
копировать
$ sudo docker-compose up -d

Если Docker установлен в вашей системе Compose V2 вместо V1 используйте ' Docker Compose 'скорее, чем' Docker - Compose '. Проверьте "$ docker compose version”Так ли это?。читатьздесьПонятно Узнать больше。

Язык кода:javascript
копировать
Creating milvus-etcd  ... done
Creating milvus-minio ... done
Creating milvus-standalone ... done
Creating attu ... done

Теперь проверьте, запущен ли контейнер и запустите.

Язык кода:javascript
копировать
$ sudo docker-compose ps

После запуска автономного сервиса Milvus будут работать три докер-контейнера, включая автономный сервис Milvus и две его зависимости.

Язык кода:javascript
копировать
      Name                     Command                  State                            Ports
--------------------------------------------------------------------------------------------------------------------
milvus-etcd         etcd -advertise-client-url ...   Up             2379/tcp, 2380/tcp
milvus-minio        /usr/bin/docker-entrypoint ...   Up (healthy)   9000/tcp
milvus-standalone   /tini -- milvus run standalone   Up             0.0.0.0:19530->19530/tcp, 0.0.0.0:9091->9091/tcp
attu                /usr/bin/docker-entrypoint ...   Up             0.0.0.0:8000->3000/tcp

В браузере посетите «http://{ваш machine IP}:8000”,Нажмите“Connect”ВходитьAttuСлужить。нас Также поддерживаетTLSсоединять,Имя пользователя и пароль.

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.