Поиск по первичному ключуCompatible with Milvus 2.6.9+
При проведении поиска по сходству всегда требуется предоставить один или несколько векторов запроса, даже если эти векторы уже присутствуют в целевой коллекции. Чтобы не извлекать векторы до начала поиска, можно использовать первичные ключи.
Обзор
На платформах электронной коммерции пользователи могут ввести ключевое слово, чтобы получить соответствующие ему товары. Когда пользователь просматривает страницу с подробной информацией о продукте, платформа также отображает список похожих продуктов в нижней части страницы для пользователей, которые хотят сравнить их.
Рекомендации сортируются по сходству с ключевым словом или текущим продуктом. Чтобы добиться этого, разработчикам платформы необходимо получить векторное представление ключевого слова или текущего продукта из Milvus до начала поиска сходства, что увеличивает время обхода между платформой и Milvus и приводит к передаче по сети большого количества высокоразмерных плавающих данных.
Чтобы упростить логику взаимодействия между вашими приложениями и Milvus, сократить количество обходов и избежать передачи по сети большого количества высокоразмерных значений с плавающей точкой, рассмотрите возможность использования поиска по первичному ключу.
При поиске по первичному ключу вам не нужно предоставлять векторы запросов. Вместо этого вас просят предоставить первичные ключи (ids) сущностей, которые содержат векторы запросов.
Ограничения и ограничения
Поиск с использованием первичных ключей применяется ко всем типам векторных данных, за исключением разреженных векторных полей, полученных из полей VarChar, как в функциях BM25.
Вы можете использовать первичные ключи вместо векторов запросов в фильтрующих, диапазонных и группирующих поисках, в том числе с включенной пагинацией. Однако эта возможность не распространяется на гибридный поиск и итераторы поиска.
Для поиска по сходству с использованием списков встраивания все равно необходимо получить векторы запросов, расположить их в списках встраивания и запустить поиск.
В RESTful API нельзя использовать первичные ключи вместо векторов запросов.
При использовании несуществующих первичных ключей или ключей в неправильном формате Milvus выдаст ошибку.
Первичные ключи и векторы запросов являются взаимоисключающими. Предоставление обоих вариантов также приводит к ошибкам.
Примеры
В следующих примерах предполагается, что все предоставленные идентификаторы Int64 имеются в целевой коллекции.
Первичные ключи не используются для фильтрации; они используются только для поиска векторов.
Пример 1: Базовый поиск по первичному ключу
Чтобы выполнить базовый поиск по первичному ключу, просто замените векторы запроса на первичные ключи.
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
res = client.search(
collection_name="quick_setup",
anns_field="vector",
ids=[551, 296, 43], # a list of primary keys
limit=3,
search_params={"metric_type": "IP"}
)
for hits in res:
for hit in hits:
print(hit)
// java
// node.js
// go
# restful
Пример 2: Фильтрованный поиск с использованием первичных ключей
В следующем примере предполагается, что цвет и лайк - это два определенных схемой поля в целевой коллекции.
res = client.search(
collection_name="my_collection",
ids=[551, 296, 43], #
filter='color like "red%" and likes > 50',
output_fields=["color", "likes"],
limit=3,
)
// java
// node.js
// go
# restful
Пример 3: Поиск в диапазоне с использованием первичных ключей
res = client.search(
collection_name="my_collection",
ids=[551, 296, 43],
limit=3,
search_params={
"params": {
"radius": 0.4,
"range_filter": 0.6
}
}
)
// java
// node.js
// go
# restful
Пример 4: Группировочный поиск с использованием первичных ключей
В следующем примере предполагается, что docId - это определенное схемой поле в целевой коллекции.
res = client.search(
collection_name="my_collection",
ids=[551, 296, 43],
limit=3,
group_by_field="docId",
output_fields=["docId"]
)
// java
// node.js
// go
# restful