StructuredQuery

Zapytanie Firestore.

Etapy zapytania są wykonywane w następującej 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 element DocumentMask nad dokumentami zwróconymi w wyniku zapytania. Gdy zasada jest nieskonfigurowana, zakładamy, że 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ść, która ma być stosowana do wyników zapytania.

Firestore umożliwia wywołującym użytkownikom określenie pełnego sortowania, częściowego sortowania lub całkowity brak zamówień. We wszystkich przypadkach Firestore gwarantuje stabilną kolejność na podstawie tych reguł:

  • Pole orderBy jest wymagane, aby odwoływać się do wszystkich pól używanych z filtrem nierówności.
  • Wszystkie pola, które muszą znajdować się w elemencie orderBy, ale jeszcze go nie występują, są objęte leksykograficzną kolejnością nazw pól.
  • Jeśli zamówienie z __name__ nie jest określone, jest dołączane domyślnie.

Pola są dodawane z tym samym kierunkiem sortowania co w przypadku ostatniego określonego porządku, czyli „ASCENDING” jeśli nie określono zamówienia. 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 ma się rozpoczynać zapytanie.

Kolejność w zbiorze wyników jest określana na podstawie klauzuli 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: (b ASC, __name__ ASC).

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

Wracając do powyższego przykładu, umieszczenie następujących kursorów początkowych będzie miało 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): rozpocznij zapytanie po a = 1 AND b > 10.

W przeciwieństwie do funkcji OFFSET, która wymaga skanowania pierwszych N wyników do pominięcia, kursor początkowy umożliwia rozpoczęcie zapytania w pozycji logicznej. To położenie nie musi odpowiadać rzeczywistemu wynikowi. Urządzenie przeskanuje od tej pozycji w celu znalezienia następnego dokumentu.

Wymagane:

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

object (Cursor)

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

Jest to podobne do funkcji START_AT, ale kontroluje pozycję końcową, a nie pozycję początkową.

Wymagane:

  • Liczba wartości nie może być większa niż liczba pól określonych 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:

  • Wartość musi być większa niż lub równa 0, jeśli została określona.
limit

integer

Maksymalna liczba wyników do zwrócenia.

Ma zastosowanie po wszystkich innych ograniczeniach.

Wymagane:

  • Wartość musi być większa niż lub równa 0, jeśli została określona.
findNearest

object (FindNearest)

Opcjonalnie. Wyszukiwanie potencjalnych najbliższych sąsiadów.

Ma zastosowanie po wszystkich innych filtrach i kolejności.

Znajduje wektory dystrybucyjne najbliższe danemu wektorowi zapytania.

Odwzorowanie

Odwzorowanie pól dokumentu do zwrócenia.

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

object (FieldReference)

Pola do zwrócenia.

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

Selektor kolekcji

Wybór kolekcji, np. messages as m1.

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

string

Identyfikator kolekcji. Jeśli jest ustawiony, wybiera tylko kolekcje o tym identyfikatorze.

allDescendants

boolean

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

Filtr

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 mieć 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.

Filtr złożony

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 łączący wiele filtrów.

filters[]

object (Filter)

Lista filtrów do połączenia.

Wymagane:

  • 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 muszą spełniać warunki co najmniej 1 z połączonych filtrów.

Filtr pól

Filtr określonego 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:

  • field na pierwszym miejscu w kategorii orderBy.
LESS_THAN_OR_EQUAL

Podana wartość field jest mniejsza lub równa wartości podanej w kolumnie value.

Wymagane:

  • field na pierwszym miejscu w kategorii orderBy.
GREATER_THAN

Podana wartość field jest większa niż wartość podana w polu value.

Wymagane:

  • field na pierwszym miejscu w kategorii orderBy.
GREATER_THAN_OR_EQUAL

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

Wymagane:

  • field na pierwszym miejscu w kategorii orderBy.
EQUAL Podana wartość field jest równa wartości podanej jako value.
NOT_EQUAL

Podana wartość field nie jest równa wartości podanej w atrybucie value.

Wymagane:

  • Brak innych elementów NOT_EQUAL, NOT_IN, IS_NOT_NULL i IS_NOT_NAN.
  • To field jest na pierwszym miejscu w kategorii orderBy.
ARRAY_CONTAINS Podana wartość field jest tablicą, która zawiera podaną wartość value.
IN

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

Wymagane:

  • Pole value nie jest puste (ArrayValue) podlega limitom rozłączenia.
  • W tym samym zapytaniu nie ma filtrów NOT_IN.
ARRAY_CONTAINS_ANY

Podana tablica field jest tablicą, która zawiera dowolną z wartości w danej tablicy.

Wymagane:

  • Pole value nie jest puste (ArrayValue) podlega limitom rozłączenia.
  • W tym samym rozdzieleniu nie ma innych filtrów ARRAY_CONTAINS_ANY.
  • W tym samym zapytaniu nie ma filtrów NOT_IN.
NOT_IN

Wartości funkcji field nie ma w podanej tablicy.

Wymagane:

  • Ten element value nie jest pusty ArrayValuezawiera maksymalnie 10 wartości.
  • Brak innych elementów OR, IN, ARRAY_CONTAINS_ANY, NOT_IN, NOT_EQUAL, IS_NOT_NULL ani IS_NOT_NAN.
  • To field jest na pierwszym miejscu w kategorii orderBy.

Filtr jednoargumentowy

Filtr z jednym 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)

Jednoargumentowy operator do zastosowania.

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

object (FieldReference)

Pole, do którego ma zostać zastosowany 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:

  • Brak innych elementów NOT_EQUAL, NOT_IN, IS_NOT_NULL i IS_NOT_NAN.
  • To field jest na pierwszym miejscu w kategorii orderBy.
IS_NOT_NULL

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

Wymagane:

  • Pojedynczy element NOT_EQUAL, NOT_IN, IS_NOT_NULL lub IS_NOT_NAN.
  • To field jest na pierwszym miejscu w kategorii orderBy.

Zamówienie

Kolejność na polu.

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

object (FieldReference)

Pole, według którego ma być ustalana kolejność.

direction

enum (Direction)

Kierunek sortowania. Domyślna wartość to ASCENDING.

Kierunek

Kierunek sortowania.

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

Najbliższe

Konfiguracja wyszukiwania najbliższych sąsiadów.

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

object (FieldReference)

Wymagane. Zindeksowane pole wektora do wyszukania. Zwracane mogą być tylko dokumenty zawierające wektory, których wymiarowość pasuje do queryVector.

queryVector

object (Value)

Wymagane. Wektor zapytania, którego szukamy. Musi być wektorem o maksymalnie 2048 wymiarach.

distanceMeasure

enum (DistanceMeasure)

Wymagane. Miara odległości, której chcesz użyć, wymagany.

limit

integer

Wymagane. Liczba najbliższych sąsiadów do zwrócenia. Wartość musi być dodatnią liczbą całkowitą nie większą niż 1000.

Odległość

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

Wartości w polu enum
DISTANCE_MEASURE_UNSPECIFIED Nie należy ustawiać tego ustawienia.
EUCLIDEAN Mierzy odległość UECLIDEAN między wektorami. Więcej informacji: euklidesowa.
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 parametru DOT_PRODUCT z wektorami znormalizowanymi jednostkami zamiast odległości COSINE, co jest odpowiednikiem matematycznym o większej wydajności. Więcej informacji znajdziesz w sekcji Podobieństwo cosinusowe.
DOT_PRODUCT Podobny do cosinusa, ale ma wpływ na wielkość wektorów. Więcej informacji znajdziesz w artykule Produkt skalarny.