StructuredQuery

Uma consulta do Firestore.

Os estágios da consulta são executados na seguinte ordem: 1. de 2. em que 3. selecione 4. orderBy + startAt + endAt 5. deslocamento 6. limit

Representação 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)
  }
}
Campos
select

object (Projection)

Subconjunto opcional dos campos a serem retornados.

Ele atua como um DocumentMask sobre os documentos retornados de uma consulta. Quando não definido, presume que o autor da chamada quer que todos os campos sejam retornados.

from[]

object (CollectionSelector)

As coleções a serem consultadas.

where

object (Filter)

O filtro a ser aplicado.

orderBy[]

object (Order)

A ordem a ser aplicada aos resultados da consulta.

O Firestore permite que os autores da chamada forneçam uma ordem completa, uma parcial ou nenhuma ordem. Em todos os casos, o Firestore garante uma ordem estável usando estas regras:

  • O orderBy é obrigatório para referenciar todos os campos usados com um filtro de desigualdade.
  • Todos os campos que precisam estar no orderBy, mas ainda não estão presentes, são anexados na ordem lexicográfica do nome do campo.
  • Se um pedido em __name__ não for especificado, ele será anexado por padrão.

Os campos são anexados com a mesma direção de classificação que o último pedido especificado ou 'ASCENDING' se nenhum pedido tiver sido especificado. Exemplo:

  • ORDER BY a se torna ORDER BY a ASC, __name__ ASC
  • ORDER BY a DESC se torna ORDER BY a DESC, __name__ DESC
  • WHERE a > 1 se torna WHERE a > 1 ORDER BY a ASC, __name__ ASC
  • WHERE __name__ > ... AND a > 1 se torna WHERE __name__ > ... AND a > 1 ORDER BY a ASC, __name__ ASC
startAt

object (Cursor)

Um possível prefixo de uma posição no conjunto de resultados em que a consulta será iniciada.

A ordem do conjunto de resultados é baseada na cláusula ORDER BY da consulta original.

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

Os resultados dessa consulta são ordenados por (b ASC, __name__ ASC).

Os cursores podem fazer referência à ordem completa ou a um prefixo da localização, embora não possam referenciar mais campos do que estão no ORDER BY fornecido.

Continuando com o exemplo acima, anexar os seguintes cursores iniciais terá um impacto variável:

  • START BEFORE (2, /k/123): inicia a consulta logo antes de a = 1 AND b > 2 AND __name__ > /k/123.
  • START AFTER (10): inicia a consulta logo após a = 1 AND b > 10.

Ao contrário de OFFSET, que requer a verificação dos primeiros N resultados para pular, um cursor inicial permite que a consulta comece em uma posição lógica. Esta posição não é necessária para corresponder a um resultado real; ela vai procurar o próximo documento nessa posição.

Requer:

  • O número de valores não pode ser maior que o número de campos especificado na cláusula ORDER BY.
endAt

object (Cursor)

Um possível prefixo de uma posição no conjunto de resultados em que a consulta será encerrada.

Isso é semelhante ao START_AT, mas controla a posição final, em vez da posição inicial.

Requer:

  • O número de valores não pode ser maior que o número de campos especificado na cláusula ORDER BY.
offset

integer

O número de documentos a serem pulados antes de retornar o primeiro resultado.

Isso se aplica após as restrições especificadas por WHERE, START AT e END AT, mas antes da cláusula LIMIT.

Requer:

  • O valor precisa ser maior ou igual a zero, se especificado.
limit

integer

O número máximo de resultados a serem retornados.

Aplica-se depois de todas as outras restrições.

Requer:

  • O valor precisa ser maior ou igual a zero, se especificado.
findNearest

object (FindNearest)

Opcional. Uma potencial Pesquisa de vizinhos mais próximos.

Aplica-se depois de todos os outros filtros e ordens.

Encontra os embeddings vetoriais mais próximos ao vetor de consulta especificado.

Projeção

A projeção dos campos do documento a serem retornados.

Representação JSON
{
  "fields": [
    {
      object (FieldReference)
    }
  ]
}
Campos
fields[]

object (FieldReference)

Os campos a serem retornados.

Se estiver vazio, todos os campos serão retornados. Para retornar apenas o nome do documento, use ['__name__'].

CollectionSelector

Uma seleção de uma coleção, como messages as m1.

Representação JSON
{
  "collectionId": string,
  "allDescendants": boolean
}
Campos
collectionId

string

O ID da coleção. Quando definido, seleciona apenas as coleções com esse ID.

allDescendants

boolean

Quando definido como falso, seleciona apenas coleções que são filhas imediatas do parent especificado no RunQueryRequest contido. Quando verdadeiro, seleciona todas as coleções descendentes.

Filtrar

Um filtro.

Representação 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.
}
Campos
Campo de união filter_type. O tipo de filtro. filter_type pode ser apenas de um dos tipos a seguir:
compositeFilter

object (CompositeFilter)

Um filtro composto.

fieldFilter

object (FieldFilter)

Um filtro em um campo do documento.

unaryFilter

object (UnaryFilter)

Um filtro que usa exatamente um argumento.

CompositeFilter

Um filtro que mescla vários outros filtros usando o operador fornecido.

Representação JSON
{
  "op": enum (Operator),
  "filters": [
    {
      object (Filter)
    }
  ]
}
Campos
op

enum (Operator)

Operador para combinar vários filtros.

filters[]

object (Filter)

Lista de filtros a serem combinados.

Requer:

  • Pelo menos um filtro está presente.

Operador

Um operador de filtro composto.

Enums
OPERATOR_UNSPECIFIED Não especificado. Esse valor não pode ser usado.
AND Os documentos precisam atender a todos os filtros combinados.
OR Os documentos precisam atender a pelo menos um dos filtros combinados.

FieldFilter

Um filtro em um campo específico.

Representação JSON
{
  "field": {
    object (FieldReference)
  },
  "op": enum (Operator),
  "value": {
    object (Value)
  }
}
Campos
field

object (FieldReference)

O campo para filtrar.

op

enum (Operator)

O operador a ser filtrado.

value

object (Value)

O valor a ser comparado.

Operador

Um operador de filtro de campo.

Enums
OPERATOR_UNSPECIFIED Não especificado. Esse valor não pode ser usado.
LESS_THAN

O field fornecido é menor que o value especificado.

Requer:

  • Esse field vem em primeiro lugar em orderBy.
LESS_THAN_OR_EQUAL

A field especificada é menor ou igual à value especificada.

Requer:

  • Esse field vem em primeiro lugar em orderBy.
GREATER_THAN

O field fornecido é maior que o value fornecido.

Requer:

  • Esse field vem em primeiro lugar em orderBy.
GREATER_THAN_OR_EQUAL

A field especificada é maior ou igual à value especificada.

Requer:

  • Esse field vem em primeiro lugar em orderBy.
EQUAL O field fornecido é igual ao value especificado.
NOT_EQUAL

O field fornecido não é igual ao value especificado.

Requer:

  • Nenhum outro NOT_EQUAL, NOT_IN, IS_NOT_NULL ou IS_NOT_NAN.
  • Esse field vem em primeiro lugar no orderBy.
ARRAY_CONTAINS O field fornecido é uma matriz que contém o value especificado.
IN

O field fornecido é igual a pelo menos um valor na matriz especificada.

Requer:

  • Esse value é um ArrayValue não vazio, sujeito a limites de disjunção.
  • Não há filtros NOT_IN na mesma consulta.
ARRAY_CONTAINS_ANY

O field fornecido é uma matriz que contém qualquer um dos valores dela.

Requer:

  • Esse value é um ArrayValue não vazio, sujeito a limites de disjunção.
  • Não há outros filtros ARRAY_CONTAINS_ANY na mesma disjunção.
  • Não há filtros NOT_IN na mesma consulta.
NOT_IN

O valor de field não está na matriz especificada.

Requer:

  • Esse value é um ArrayValue não vazio com no máximo 10 valores.
  • Nenhuma outra OR, IN, ARRAY_CONTAINS_ANY, NOT_IN, NOT_EQUAL, IS_NOT_NULL ou IS_NOT_NAN.
  • Esse field vem em primeiro lugar no orderBy.

UnaryFilter

Um filtro com um único operando.

Representação 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.
}
Campos
op

enum (Operator)

O operador unário a ser aplicado.

Campo de união operand_type. O argumento para o filtro. operand_type pode ser apenas de um dos tipos a seguir:
field

object (FieldReference)

O campo em que o operador será aplicado.

Operador

Um operador unário.

Enums
OPERATOR_UNSPECIFIED Não especificado. Esse valor não pode ser usado.
IS_NAN O field fornecido é igual a NaN.
IS_NULL O field fornecido é igual a NULL.
IS_NOT_NAN

O field fornecido não é igual a NaN.

Requer:

  • Nenhum outro NOT_EQUAL, NOT_IN, IS_NOT_NULL ou IS_NOT_NAN.
  • Esse field vem em primeiro lugar no orderBy.
IS_NOT_NULL

O field fornecido não é igual a NULL.

Requer:

  • Uma única NOT_EQUAL, NOT_IN, IS_NOT_NULL ou IS_NOT_NAN.
  • Esse field vem em primeiro lugar no orderBy.

Pedido

Um pedido em um campo.

Representação JSON
{
  "field": {
    object (FieldReference)
  },
  "direction": enum (Direction)
}
Campos
field

object (FieldReference)

O campo pelo qual ordenar.

direction

enum (Direction)

A direção de ordenação. O valor padrão é ASCENDING.

Direção

Uma direção de classificação.

Enums
DIRECTION_UNSPECIFIED Não especificado.
ASCENDING Crescente.
DESCENDING Decrescente.

FindNearest

Configuração de pesquisa de vizinhos mais próximos.

Representação JSON
{
  "vectorField": {
    object (FieldReference)
  },
  "queryVector": {
    object (Value)
  },
  "distanceMeasure": enum (DistanceMeasure),
  "limit": integer
}
Campos
vectorField

object (FieldReference)

Obrigatório. Um campo de vetor indexado para pesquisa. Somente documentos que contêm vetores com dimensionalidade correspondente a queryVector podem ser retornados.

queryVector

object (Value)

Obrigatório. O vetor de consulta em que estamos pesquisando. Precisa ser um vetor com, no máximo, 2.048 dimensões.

distanceMeasure

enum (DistanceMeasure)

Obrigatório. A medida de distância a ser usada, obrigatória.

limit

integer

Obrigatório. O número de vizinhos mais próximos a serem retornados. Precisa ser um número inteiro positivo de até 1.000.

DistanceMeasure

A medida de distância a ser usada na comparação de vetores.

Enums
DISTANCE_MEASURE_UNSPECIFIED Não deve ser definido.
EUCLIDEAN Mede a distância EUCLIDEAN entre os vetores. Consulte Euclidiano para saber mais
COSINE Compara vetores com base no ângulo entre eles, o que permite medir a similaridade que não se baseia na magnitude dos vetores. Recomendamos o uso de DOT_PRODUCT com vetores normalizados unitários em vez da distância de COSINE, que é matematicamente equivalente com melhor desempenho. Consulte Semelhança de cossenos para saber mais.
DOT_PRODUCT Semelhante ao cosseno, mas é afetado pela magnitude dos vetores. Consulte Produto escalar para saber mais.