StructuredQuery

Zapytanie Firestore.

Etapy zapytania są wykonywane w tej kolejności: 1. od 2, gdzie 3. wybierz 4. orderBy + startAt + endAt 5. przesunięcie 6. limit

Zapis JSON
{
  "select": {
    object (Projection)
  },
  "from": [
    {
      object (CollectionSelector)
    }
  ],
  "where": {
    object (Filter)
  },
  "orderBy": [
    {
      object (Order)
    }
  ],
  "startAt": {
    object (Cursor)
  },
  "endAt": {
    object (Cursor)
  },
  "offset": integer,
  "limit": integer,
  "findNearest": {
    object (FindNearest)
  }
}
Pola
select

object (Projection)

Opcjonalny podzbiór pól do zwrócenia.

Działa jako DocumentMask nad dokumentami zwróconymi w wyniku zapytania. Jeśli zasada jest nieskonfigurowana, zakładamy, że element wywołujący chce zwrócić wszystkie pola.

from[]

object (CollectionSelector)

Kolekcje, których ma dotyczyć zapytanie.

where

object (Filter)

Filtr, który ma zostać zastosowany.

orderBy[]

object (Order)

Kolejność zastosowania wyników zapytania.

Firestore umożliwia użytkownikom złożenie zamówienia w pełnej lub częściowej kolejności bądź w ogóle bez uporządkowania. We wszystkich przypadkach Firestore gwarantuje stabilne porządkowanie według tych reguł:

  • orderBy jest wymagany, aby odwoływać się do wszystkich pól używanych z filtrem nierówności.
  • Wszystkie pola, które muszą się znaleźć w polu orderBy, a które jeszcze nie istnieją, są dołączane w kolejności leksykograficznej nazw pól.
  • Jeśli zamówienie w __name__ nie zostało określone, jest dołączane domyślnie.

Pola są dołączone z tym samym kierunkiem sortowania co w ostatnim podanym porządku lub „ASCENDING”, jeśli nie określono kolejności. Na przykład:

  • ORDER BY a zmienia wartość na ORDER BY a ASC, __name__ ASC
  • ORDER BY a DESC zmienia wartość na ORDER BY a DESC, __name__ DESC
  • WHERE a > 1 zmienia wartość na WHERE a > 1 ORDER BY a ASC, __name__ ASC
  • WHERE __name__ > ... AND a > 1 zmienia wartość na WHERE __name__ > ... AND a > 1 ORDER BY a ASC, __name__ ASC
startAt

object (Cursor)

Potencjalny prefiks pozycji w zestawie wyników, od której rozpoczyna się zapytanie.

Kolejność w zestawie wyników jest zgodna z klauzulą ORDER BY w pierwotnym zapytaniu.

SELECT * FROM k WHERE a = 1 AND b > 2 ORDER BY b ASC, __name__ ASC;

Wyniki tego zapytania są uporządkowane według kolumny (b ASC, __name__ ASC).

Kursory mogą odwoływać się do pełnej kolejności lub prefiksu lokalizacji, ale nie mogą odwoływać się do większej liczby pól niż jest w tym celu podany w polu ORDER BY.

Nawiązując do powyższego przykładu, zastosowanie tych kursorów startowych może mieć różny wpływ:

  • START BEFORE (2, /k/123): rozpocznij zapytanie tuż przed a = 1 AND b > 2 AND __name__ > /k/123.
  • START AFTER (10): rozpoczęcie zapytania zaraz po a = 1 AND b > 10.

W odróżnieniu od metody OFFSET, która wymaga skanowania pierwszych N wyników do pominięcia, kursor początkowy umożliwia rozpoczęcie zapytania w pozycji logicznej. Pozycja nie jest wymagana do dopasowania do rzeczywistego wyniku. Spowoduje to skanowanie od tego miejsca do przodu, aby znaleźć następny dokument.

Wymagane:

  • Liczba wartości nie może być większa niż liczba pól określona w klauzuli ORDER BY.
endAt

object (Cursor)

Potencjalny prefiks pozycji w zestawie wyników, na której kończy się zapytanie.

Funkcja jest podobna do START_AT, ale kontroluje pozycję końcową, a nie początkową.

Wymagane:

  • Liczba wartości nie może być większa niż liczba pól określona w klauzuli ORDER BY.
offset

integer

Liczba dokumentów do pominięcia przed zwróceniem pierwszego wyniku.

Ma to zastosowanie po ograniczeniach określonych przez WHERE, START AT i END AT, ale przed klauzulą LIMIT.

Wymagane:

  • Jeśli została określona, wartość nie może być mniejsza niż 0.
limit

integer

Maksymalna liczba wyników do zwrócenia.

Ma zastosowanie po wszystkich innych ograniczeniach.

Wymagane:

  • Jeśli została określona, wartość nie może być mniejsza niż 0.
findNearest

object (FindNearest)

Opcjonalnie. Potencjalne wyszukiwanie w pobliżu sąsiadów.

Zostanie zastosowane po wszystkich innych filtrach i kolejności.

Znajduje wektory dystrybucyjne najbliżej danego wektora zapytania.

Odwzorowanie

Odwzorowanie pól dokumentu do zwrócenia.

Zapis JSON
{
  "fields": [
    {
      object (FieldReference)
    }
  ]
}
Pola
fields[]

object (FieldReference)

Pola do zwrócenia.

Jeśli jest puste, zwracane są wszystkie pola. Aby zwrócić tylko nazwę dokumentu, użyj funkcji ['__name__'].

CollectionSelector

Wybór kolekcji, na przykład messages as m1.

Zapis JSON
{
  "collectionId": string,
  "allDescendants": boolean
}
Pola
collectionId

string

Identyfikator kolekcji. Po ustawieniu wybiera tylko kolekcje z tym identyfikatorem.

allDescendants

boolean

Jeśli zasada ma wartość Fałsz, wybiera tylko te kolekcje, które są bezpośrednimi elementami podrzędnymi w elemencie parent określonym w elemencie RunQueryRequest. Jeśli ma wartość true (prawda), wybiera wszystkie kolekcje podrzędne.

Filtruj

Filtr.

Zapis JSON
{

  // Union field filter_type can be only one of the following:
  "compositeFilter": {
    object (CompositeFilter)
  },
  "fieldFilter": {
    object (FieldFilter)
  },
  "unaryFilter": {
    object (UnaryFilter)
  }
  // End of list of possible types for union field filter_type.
}
Pola
Pole sumy filter_type. Typ filtra. filter_type może być tylko jedną z tych wartości:
compositeFilter

object (CompositeFilter)

Filtr złożony.

fieldFilter

object (FieldFilter)

Filtr w polu dokumentu.

unaryFilter

object (UnaryFilter)

Filtr, który przyjmuje dokładnie 1 argument.

CompositeFilter

filtr, który łączy wiele innych filtrów za pomocą podanego operatora;

Zapis JSON
{
  "op": enum (Operator),
  "filters": [
    {
      object (Filter)
    }
  ]
}
Pola
op

enum (Operator)

Operator służący do łączenia wielu filtrów.

filters[]

object (Filter)

Lista filtrów do połączenia.

Wymagane:

  • Dostępny jest co najmniej 1 filtr.

Operator

Operator filtra złożonego.

Wartości w polu enum
OPERATOR_UNSPECIFIED Nie określono. Tej wartości nie można używać.
AND Dokumenty są wymagane w przypadku wszystkich połączonych filtrów.
OR Dokumenty są wymagane w przypadku co najmniej jednego z połączonych filtrów.

FieldFilter

Filtr konkretnego pola.

Zapis JSON
{
  "field": {
    object (FieldReference)
  },
  "op": enum (Operator),
  "value": {
    object (Value)
  }
}
Pola
field

object (FieldReference)

Pole, według którego chcesz filtrować.

op

enum (Operator)

Operator, według którego chcesz filtrować.

value

object (Value)

Wartość do porównania.

Operator

Operator filtra pól.

Wartości w polu enum
OPERATOR_UNSPECIFIED Nie określono. Tej wartości nie można używać.
LESS_THAN

Podana wartość field jest mniejsza od podanej wartości value.

Wymagane:

  • Te field są pierwsze w kategorii orderBy.
LESS_THAN_OR_EQUAL

Podana wartość field jest mniejsza od podanej wartości value lub jej równa.

Wymagane:

  • Te field są pierwsze w kategorii orderBy.
GREATER_THAN

Podana wartość field jest większa od podanej wartości value.

Wymagane:

  • Te field są pierwsze w kategorii orderBy.
GREATER_THAN_OR_EQUAL

Podana wartość field jest większa od lub równa podanej wartości value.

Wymagane:

  • Te field są pierwsze w kategorii orderBy.
EQUAL Wartość field jest równa wartości value.
NOT_EQUAL

Wartość field nie jest równa wartości value.

Wymagane:

  • Nie ma innych elementów NOT_EQUAL, NOT_IN, IS_NOT_NULL ani IS_NOT_NAN.
  • Ten field jest pierwszy w kategorii orderBy.
ARRAY_CONTAINS Podana tablica field to tablica, która zawiera podany element value.
IN

Podana wartość field jest równa co najmniej 1 wartości w danej tablicy.

Wymagane:

  • value to pole ArrayValue, które nie jest puste. Podlega ograniczeniom dyskoncji.
  • W tym samym zapytaniu nie ma filtrów NOT_IN.
ARRAY_CONTAINS_ANY

Podana tablica field to tablica, która zawiera dowolną z wartości znajdujących się w danej tablicy.

Wymagane:

  • value to pole ArrayValue, które nie jest puste. Podlega ograniczeniom dyskoncji.
  • Nie ma innych filtrów ARRAY_CONTAINS_ANY w tym samym odłączeniu.
  • W tym samym zapytaniu nie ma filtrów NOT_IN.
NOT_IN

Wartości field nie ma w podanej tablicy.

Wymagane:

  • Że value to niepusty element ArrayValue, który może zawierać maksymalnie 10 wartości.
  • Nie ma innych elementów OR, IN, ARRAY_CONTAINS_ANY, NOT_IN, NOT_EQUAL, IS_NOT_NULL ani IS_NOT_NAN.
  • Ten field jest pierwszy w kategorii orderBy.

UnaryFilter

Filtr z 1 operandem.

Zapis JSON
{
  "op": enum (Operator),

  // Union field operand_type can be only one of the following:
  "field": {
    object (FieldReference)
  }
  // End of list of possible types for union field operand_type.
}
Pola
op

enum (Operator)

Operator jednoargumentowy do zastosowania.

Pole sumy operand_type. Argument filtra. operand_type może być tylko jedną z tych wartości:
field

object (FieldReference)

Pole, do którego chcesz zastosować operator.

Operator

Operator jednoargumentowy.

Wartości w polu enum
OPERATOR_UNSPECIFIED Nie określono. Tej wartości nie można używać.
IS_NAN Podana wartość field jest równa NaN.
IS_NULL Podana wartość field jest równa NULL.
IS_NOT_NAN

Podana wartość field nie jest równa NaN.

Wymagane:

  • Nie ma innych elementów NOT_EQUAL, NOT_IN, IS_NOT_NULL ani IS_NOT_NAN.
  • Ten field jest pierwszy w kategorii orderBy.
IS_NOT_NULL

Podana wartość field nie jest równa NULL.

Wymagane:

  • Pojedynczy NOT_EQUAL, NOT_IN, IS_NOT_NULL lub IS_NOT_NAN.
  • Ten field jest pierwszy w kategorii orderBy.

Zamówienie

Zamówienie na polu.

Zapis JSON
{
  "field": {
    object (FieldReference)
  },
  "direction": enum (Direction)
}
Pola
field

object (FieldReference)

Pole, według którego chcesz sortować.

direction

enum (Direction)

Kierunek, według którego należy sortować dane. Domyślna wartość to ASCENDING.

Kierunek

Kierunek sortowania.

Wartości w polu enum
DIRECTION_UNSPECIFIED Nie określono.
ASCENDING Rosnąco.
DESCENDING Malejąco.

FindNearest

Konfiguracja wyszukiwania Najbliższych sąsiadów.

Zapis JSON
{
  "vectorField": {
    object (FieldReference)
  },
  "queryVector": {
    object (Value)
  },
  "distanceMeasure": enum (DistanceMeasure),
  "limit": integer
}
Pola
vectorField

object (FieldReference)

To pole jest wymagane. Zindeksowane pole wektorów do wyszukania. Mogą zostać zwrócone tylko dokumenty zawierające wektory, których wymiary pasują do elementu queryVector.

queryVector

object (Value)

To pole jest wymagane. Wektor zapytania, którego używamy do wyszukiwania. Wartość musi być wektorem o maksymalnie 2048 wymiarach.

distanceMeasure

enum (DistanceMeasure)

To pole jest wymagane. Miara odległości do użycia, wymagana.

limit

integer

To pole jest wymagane. Liczba najbliższych sąsiadów do zwrócenia. Musi być dodatnią liczbą całkowitą nie większą niż 1000.

DistanceMeasure

Miara odległości używana przy porównywaniu wektorów.

Wartości w polu enum
DISTANCE_MEASURE_UNSPECIFIED Nie należy go ustawiać.
EUCLIDEAN Mierzy odległość UECLIDEAN między wektorami. Zobacz euklidesowy, aby dowiedzieć się więcej.
COSINE Porównuje wektory na podstawie kąta między nimi, co pozwala zmierzyć podobieństwo, które nie jest oparte na wielkości wektorów. Zalecamy używanie funkcji DOT_PRODUCT ze znormalizowanymi wektorami jednostowymi zamiast odległości COSINE, ponieważ jest to odpowiednik matematyczny z lepszą wydajnością. Więcej informacji znajdziesz w sekcji Podobieństwo cosinusowe.
DOT_PRODUCT Działa podobnie jak cosinus, ale jest zależna od wielkości wektorów. Więcej informacji znajdziesz w sekcji Iloczyn skalarny.