Zapytanie warunkowe
Ten temat przedstawia, jak wykonywać zapytania warunkowe.
W odróżnieniu od wyszukiwań podobieństwa wektorów, zapytania warunkowe odnoszą wektory za pomocą filtrów skalarnych poprzez wyrażenia boolowskie. Milvus obsługuje zapytania dotyczące pól skalarnych i różnych wyrażeń boolowskich. Wyrażenia boolowskie mogą być używane do filtrowania pól skalarnych lub pól klucza głównego w celu pobrania wszystkich wyników spełniających warunki filtrowania.
Poniższy przykład demonstruje, jak wyszukać zbiór 2000 wierszy książek, zawierający identyfikator książki (klucz główny), liczbę słów (pole skalarnego) i wprowadzenie do książki (pole wektorowe), symulując scenariusz wyszukiwania konkretnej książki na podstawie jej identyfikatora.
Wczytaj Kolekcję
Przed przeprowadzeniem zapytania, kolekcja musi być załadowana do pamięci.
from pymilvus import Collection
kolekcja = Collection("book") # Pobierz istniejącą kolekcję.
kolekcja.load()
Wykonaj Zapytanie
Poniższy przykład filtruje wektory na podstawie określonych wartości book_id
i zwraca pole book_id
oraz pole book_intro
w wynikach.
Milvus obsługuje ustawianie poziomów spójności dla zapytań. Przykład w tym temacie ustawia poziom spójności na Strong
(Silny). Można również ustawić poziom spójności na Bounded
(Ograniczony), Session
(Sesja) lub Eventually
(Ostatecznie). Aby uzyskać więcej informacji na temat czterech poziomów spójności w Milvus, prosimy o zapoznanie się z sekcją dotyczącą Spójności.
Można również używać pól dynamicznych w wyrażeniu filtrującym i określić pola wyjściowe w żądaniu zapytania. Na przykład, patrz Dynamiczny Schemat.
res = kolekcja.query(
expr = "book_id in [2,4,6,8]",
offset = 0,
limit = 10,
output_fields = ["book_id", "book_intro"],
)
Parametr | Opis |
---|---|
expr |
Wyrażenie boolowskie używane do filtrowania właściwości. Aby uzyskać więcej szczegółów na temat zasad wyrażeń boolowskich, prosimy o zapoznanie się z Zasadami Wyrażeń Boolowskich. |
limit |
Liczba najbardziej podobnych wyników do zwrócenia. Suma tej wartości i offset powinna być mniejsza niż 16384. |
offset |
Liczba wyników do pominięcia w kolekcji. Tylko dostępne, gdy jest określone limit , a suma tej wartości i limit powinna być mniejsza niż 16384. Na przykład, jeśli chcesz wyszukać 9. i 10. najbliższych sąsiadów wektora, ustaw limit na 2 , a offset na 8 . |
output_fields (opcjonalne) |
Lista nazw pól do zwrócenia. |
partition_names (opcjonalne) |
Lista nazw partycji do zapytania. |
consistency_level (opcjonalne) |
Poziom spójności dla zapytania. |
Sprawdź zwrócone wyniki.
posortowane_res = sorted(res, key=lambda k: k['book_id'])
posortowane_res
Liczba Encji
Podczas wykonywania zapytania, można dodać count(*)
w output_fields
, aby Milvus mógł zwrócić liczbę encji w kolekcji. Jeśli chcesz policzyć liczbę encji spełniających określone warunki, użyj expr
, aby zdefiniować wyrażenie boolowskie.
Policz wszystkie encje w kolekcji:
res = kolekcja.query(
expr="",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
Policz liczbę encji spełniających określone warunki filtrowania:
res = kolekcja.query(
expr="book_id in [2,4,6,8]",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
Ograniczenia
Przy użyciu count(*)
w output_fields
, używanie parametru limit
jest zabronione.