StructuredQuery

Kueri Firestore.

Tahapan kueri dijalankan dalam urutan berikut: 1. dari 2. di mana 3. pilih 4. orderBy + startAt + endAt 5. offset 6. limit

Representasi 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)
  }
}
Kolom
select

object (Projection)

Subkumpulan kolom opsional yang akan ditampilkan.

Hal ini bertindak sebagai DocumentMask atas dokumen yang ditampilkan dari kueri. Jika tidak ditetapkan, asumsikan bahwa pemanggil ingin semua kolom ditampilkan.

from[]

object (CollectionSelector)

Koleksi yang akan dikueri.

where

object (Filter)

Filter yang akan diterapkan.

orderBy[]

object (Order)

Urutan yang akan diterapkan ke hasil kueri.

Firestore memungkinkan pemanggil untuk menyediakan pemesanan lengkap, pemesanan parsial, atau tidak ada pemesanan sama sekali. Dalam semua kasus, Firestore menjamin pengurutan yang stabil melalui aturan berikut:

  • orderBy diperlukan untuk mereferensikan semua kolom yang digunakan dengan filter ketidaksetaraan.
  • Semua kolom yang wajib ada di orderBy, tetapi belum ada, akan ditambahkan dalam urutan leksikografis nama kolom.
  • Jika pesanan pada __name__ tidak ditentukan, pesanan tersebut akan ditambahkan secara default.

Kolom ditambahkan dengan arah pengurutan yang sama seperti urutan terakhir yang ditentukan, atau 'ASCENDING' jika tidak ada urutan yang ditentukan. Contoh:

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

object (Cursor)

Awalan potensial dari posisi dalam kumpulan hasil untuk memulai kueri.

Urutan kumpulan hasil didasarkan pada klausa ORDER BY dari kueri asli.

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

Hasil kueri ini diurutkan berdasarkan (b ASC, __name__ ASC).

Kursor dapat merujuk ke urutan lengkap atau awalan lokasi, meskipun tidak dapat merujuk lebih banyak kolom daripada yang ada di ORDER BY yang disediakan.

Melanjutkan contoh di atas, melampirkan kursor awal berikut akan memiliki dampak yang berbeda:

  • START BEFORE (2, /k/123): mulai kueri tepat sebelum a = 1 AND b > 2 AND __name__ > /k/123.
  • START AFTER (10): mulai kueri tepat setelah a = 1 AND b > 10.

Tidak seperti OFFSET yang mengharuskan pemindaian hasil N pertama untuk dilewati, kursor awal memungkinkan kueri dimulai pada posisi logis. Posisi ini tidak harus sesuai dengan hasil sebenarnya, karena akan memindai maju dari posisi ini untuk menemukan dokumen berikutnya.

Memerlukan:

  • Jumlah nilai tidak boleh lebih besar dari jumlah kolom yang ditentukan dalam klausa ORDER BY.
endAt

object (Cursor)

Awalan potensial dari posisi dalam hasil yang ditetapkan untuk mengakhiri kueri.

Ini mirip dengan START_AT tetapi dengan fungsi ini mengontrol posisi akhir, bukan posisi awal.

Memerlukan:

  • Jumlah nilai tidak boleh lebih besar dari jumlah kolom yang ditentukan dalam klausa ORDER BY.
offset

integer

Jumlah dokumen yang harus dilewati sebelum menampilkan hasil pertama.

Ini berlaku setelah batasan yang ditentukan oleh WHERE, START AT & END AT tetapi sebelum klausa LIMIT.

Memerlukan:

  • Nilai harus lebih besar atau sama dengan nol jika ditentukan.
limit

integer

Jumlah hasil maksimum yang akan ditampilkan.

Berlaku setelah semua batasan lainnya.

Memerlukan:

  • Nilai harus lebih besar atau sama dengan nol jika ditentukan.
findNearest

object (FindNearest)

Opsional. Penelusuran Tetangga Terdekat potensial.

Berlaku setelah semua filter dan pengurutan lainnya.

Menemukan embedding vektor terdekat ke vektor kueri yang ditentukan.

Proyeksi

Proyeksi kolom dokumen yang akan ditampilkan.

Representasi JSON
{
  "fields": [
    {
      object (FieldReference)
    }
  ]
}
Kolom
fields[]

object (FieldReference)

Kolom yang akan ditampilkan.

Jika kosong, semua kolom akan ditampilkan. Untuk menampilkan nama dokumen saja, gunakan ['__name__'].

CollectionSelector

Pilihan koleksi, seperti messages as m1.

Representasi JSON
{
  "collectionId": string,
  "allDescendants": boolean
}
Kolom
collectionId

string

ID koleksi. Jika ditetapkan, hanya akan memilih koleksi dengan ID ini.

allDescendants

boolean

Jika salah, hanya memilih koleksi yang merupakan turunan langsung dari parent yang ditentukan dalam RunQueryRequest yang memuatnya. Jika true (benar), akan memilih semua koleksi turunan.

Filter

Sebuah filter.

Representasi 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.
}
Kolom
Kolom union filter_type. Jenis filter. filter_type hanya ada berupa salah satu diantara berikut:
compositeFilter

object (CompositeFilter)

Filter gabungan.

fieldFilter

object (FieldFilter)

Filter di kolom dokumen.

unaryFilter

object (UnaryFilter)

Filter yang mengambil tepat satu argumen.

CompositeFilter

Filter yang menggabungkan beberapa filter lain menggunakan operator yang diberikan.

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

enum (Operator)

Operator untuk menggabungkan beberapa filter.

filters[]

object (Filter)

Daftar filter untuk digabungkan.

Memerlukan:

  • Setidaknya satu filter tersedia.

Operator

Operator filter gabungan.

Enum
OPERATOR_UNSPECIFIED Tidak ditentukan. Nilai ini tidak boleh digunakan.
AND Dokumen diperlukan untuk memenuhi semua filter gabungan.
OR Dokumen diperlukan untuk memenuhi setidaknya salah satu filter gabungan.

FieldFilter

Filter pada kolom tertentu.

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

object (FieldReference)

Kolom yang akan digunakan untuk memfilter.

op

enum (Operator)

Operator yang akan digunakan untuk memfilter.

value

object (Value)

Nilai yang akan dibandingkan.

Operator

Operator filter kolom.

Enum
OPERATOR_UNSPECIFIED Tidak ditentukan. Nilai ini tidak boleh digunakan.
LESS_THAN

field yang diberikan lebih kecil dari value yang diberikan.

Memerlukan:

  • field itu muncul di urutan pertama di orderBy.
LESS_THAN_OR_EQUAL

field yang ditentukan lebih kecil dari atau sama dengan value yang diberikan.

Memerlukan:

  • field itu muncul di urutan pertama di orderBy.
GREATER_THAN

field yang diberikan lebih besar dari value yang diberikan.

Memerlukan:

  • field itu muncul di urutan pertama di orderBy.
GREATER_THAN_OR_EQUAL

field yang ditentukan lebih besar dari atau sama dengan value yang diberikan.

Memerlukan:

  • field itu muncul di urutan pertama di orderBy.
EQUAL field yang diberikan sama dengan value yang ditentukan.
NOT_EQUAL

field yang diberikan tidak sama dengan value yang diberikan.

Memerlukan:

  • Tidak ada NOT_EQUAL, NOT_IN, IS_NOT_NULL, atau IS_NOT_NAN lainnya.
  • field tersebut muncul di urutan pertama di orderBy.
ARRAY_CONTAINS field yang diberikan adalah array yang berisi value yang diberikan.
IN

field yang diberikan sama dengan setidaknya satu nilai dalam array yang diberikan.

Memerlukan:

  • value tersebut adalah ArrayValue yang tidak kosong, yang tunduk pada batas disjungsi.
  • Tidak ada NOT_IN filter dalam kueri yang sama.
ARRAY_CONTAINS_ANY

field yang diberikan adalah array yang berisi salah satu nilai dalam array yang diberikan.

Memerlukan:

  • value tersebut adalah ArrayValue yang tidak kosong, yang tunduk pada batas disjungsi.
  • Tidak ada filter ARRAY_CONTAINS_ANY lain dalam disjungsi yang sama.
  • Tidak ada NOT_IN filter dalam kueri yang sama.
NOT_IN

Nilai field tidak ada dalam array yang diberikan.

Memerlukan:

  • value tersebut adalah ArrayValue yang tidak kosong dengan maksimal 10 nilai.
  • Bukan OR, IN, ARRAY_CONTAINS_ANY, NOT_IN, NOT_EQUAL, IS_NOT_NULL, atau IS_NOT_NAN lainnya.
  • field tersebut muncul di urutan pertama di orderBy.

UnaryFilter

Filter dengan satu operand.

Representasi 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.
}
Kolom
op

enum (Operator)

Operator unary yang akan diterapkan.

Kolom union operand_type. Argumen untuk filter. operand_type hanya ada berupa salah satu diantara berikut:
field

object (FieldReference)

Kolom tempat operator akan diterapkan.

Operator

Operator unary.

Enum
OPERATOR_UNSPECIFIED Tidak ditentukan. Nilai ini tidak boleh digunakan.
IS_NAN field yang ditentukan sama dengan NaN.
IS_NULL field yang ditentukan sama dengan NULL.
IS_NOT_NAN

field yang ditentukan tidak sama dengan NaN.

Memerlukan:

  • Tidak ada NOT_EQUAL, NOT_IN, IS_NOT_NULL, atau IS_NOT_NAN lainnya.
  • field tersebut muncul di urutan pertama di orderBy.
IS_NOT_NULL

field yang ditentukan tidak sama dengan NULL.

Memerlukan:

  • Satu NOT_EQUAL, NOT_IN, IS_NOT_NULL, atau IS_NOT_NAN.
  • field tersebut muncul di urutan pertama di orderBy.

Pesan

Pesanan di kolom.

Representasi JSON
{
  "field": {
    object (FieldReference)
  },
  "direction": enum (Direction)
}
Kolom
field

object (FieldReference)

Kolom untuk mengurutkan.

direction

enum (Direction)

Arah pengurutan. Default-nya adalah ASCENDING.

Arah

Arah pengurutan.

Enum
DIRECTION_UNSPECIFIED Tidak ditentukan.
ASCENDING Menaik.
DESCENDING Menurun.

FindNearest

Konfigurasi penelusuran Nearest Neighbors.

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

object (FieldReference)

Wajib. Kolom vektor terindeks untuk ditelusuri. Hanya dokumen yang berisi vektor yang dimensinya cocok dengan queryVector yang dapat ditampilkan.

queryVector

object (Value)

Wajib. Vektor kueri yang kita telusuri. Harus berupa vektor tidak lebih dari 2048 dimensi.

distanceMeasure

enum (DistanceMeasure)

Wajib. Ukur Jarak yang akan digunakan, diperlukan.

limit

integer

Wajib. Jumlah tetangga terdekat yang akan kembali. Harus berupa bilangan bulat positif yang tidak lebih dari 1000.

DistanceMeasure

Ukuran jarak yang akan digunakan ketika membandingkan vektor.

Enum
DISTANCE_MEASURE_UNSPECIFIED Tidak boleh ditetapkan.
EUCLIDEAN Mengukur jarak EUCLIDEAN antarvektor. Lihat Euclidean untuk mempelajari lebih lanjut
COSINE Membandingkan berbagai vektor berdasarkan sudut antarvektor, yang memungkinkan Anda mengukur kesamaan yang tidak didasarkan pada besarnya vektor. Kami menyarankan untuk menggunakan DOT_PRODUCT dengan vektor unit yang dinormalisasi alih-alih jarak COSINE, yang secara matematis setara dengan kinerja yang lebih baik. Lihat Cosine Similarity (Kemiripan Kosinus) untuk mempelajari lebih lanjut.
DOT_PRODUCT Mirip dengan kosinus tetapi dipengaruhi oleh besarnya vektor. Lihat Produk Dot untuk mempelajari lebih lanjut.