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.