StructuredQuery

Kueri Firestore.

Tahapan kueri dieksekusi 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)

Sub-kumpulan opsional kolom yang akan ditampilkan.

Ini bertindak sebagai DocumentMask pada dokumen yang ditampilkan dari kueri. Jika tidak ditetapkan, mengasumsikan 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 memberikan pengurutan lengkap, pengurutan parsial, atau tanpa pengurutan 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 harus ada di orderBy, tetapi belum ada, ditambahkan dalam urutan leksikografis nama kolom.
  • Jika pesanan di __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 suatu 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 menurut (b ASC, __name__ ASC).

Kursor dapat merujuk ke pengurutan lengkap atau awalan lokasi, meskipun tidak dapat merujuk lebih banyak kolom daripada yang ada dalam ORDER BY yang diberikan.

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

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

Tidak seperti OFFSET yang memerlukan pemindaian pada N hasil pertama untuk dilewati, kursor awal memungkinkan kueri untuk dimulai pada posisi logis. Posisi ini tidak diperlukan untuk mencocokkan hasil yang sebenarnya. Posisi ini akan memindai maju dari posisi ini untuk menemukan dokumen berikutnya.

Membutuhkan:

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

object (Cursor)

Awalan potensial dari suatu posisi dalam kumpulan hasil untuk mengakhiri kueri.

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

Membutuhkan:

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

integer

Jumlah dokumen yang akan dilewati sebelum menampilkan hasil pertama.

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

Membutuhkan:

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

integer

Jumlah hasil maksimum yang akan ditampilkan.

Berlaku setelah semua batasan lainnya.

Membutuhkan:

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

object (FindNearest)

Opsional. Potensi penelusuran tetangga terdekat.

Berlaku setelah semua filter dan pengurutan lainnya.

Menemukan embedding vektor terdekat dengan vektor kueri yang diberikan.

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__'].

PemilihKoleksi

Pilihan koleksi, seperti messages as m1.

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

string

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

allDescendants

boolean

Jika salah (false), hanya koleksi yang merupakan turunan langsung dari parent yang ditentukan dalam RunQueryRequest penampung. Jika true (benar), akan memilih semua kumpulan 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 lainnya menggunakan operator yang ditentukan.

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

enum (Operator)

Operator untuk menggabungkan beberapa filter.

filters[]

object (Filter)

Daftar filter yang akan digabungkan.

Membutuhkan:

  • Terdapat setidaknya satu filter.

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.

{i>FieldFilter<i}

Filter di kolom tertentu.

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

object (FieldReference)

Kolom yang akan difilter.

op

enum (Operator)

Operator untuk memfilter.

value

object (Value)

Nilai untuk 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.

Membutuhkan:

  • field tersebut akan muncul pertama di orderBy.
LESS_THAN_OR_EQUAL

field yang diberikan kurang dari atau sama dengan value yang diberikan.

Membutuhkan:

  • field tersebut akan muncul pertama di orderBy.
GREATER_THAN

field yang diberikan lebih besar dari value yang diberikan.

Membutuhkan:

  • field tersebut akan muncul pertama di orderBy.
GREATER_THAN_OR_EQUAL

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

Membutuhkan:

  • field tersebut akan muncul pertama di orderBy.
EQUAL field yang diberikan sama dengan value yang diberikan.
NOT_EQUAL

field yang diberikan tidak sama dengan value yang diberikan.

Membutuhkan:

  • Tidak ada NOT_EQUAL, NOT_IN, IS_NOT_NULL, atau IS_NOT_NAN lain.
  • field tersebut akan muncul terlebih dahulu 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.

Membutuhkan:

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

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

Membutuhkan:

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

Nilai field tidak ada dalam array yang diberikan.

Membutuhkan:

  • value tersebut adalah ArrayValue tidak kosong dengan maksimal 10 nilai.
  • Tidak ada OR, IN, ARRAY_CONTAINS_ANY, NOT_IN, NOT_EQUAL, IS_NOT_NULL, atau IS_NOT_NAN lain.
  • field tersebut akan muncul terlebih dahulu di orderBy.

{i>UnaryFilter<i}

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 ke filter. operand_type hanya ada berupa salah satu diantara berikut:
field

object (FieldReference)

Kolom tempat Anda menerapkan operator.

Operator

Operator unary.

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

field yang diberikan tidak sama dengan NaN.

Membutuhkan:

  • Tidak ada NOT_EQUAL, NOT_IN, IS_NOT_NULL, atau IS_NOT_NAN lain.
  • field tersebut akan muncul terlebih dahulu di orderBy.
IS_NOT_NULL

field yang diberikan tidak sama dengan NULL.

Membutuhkan:

  • Satu NOT_EQUAL, NOT_IN, IS_NOT_NULL, atau IS_NOT_NAN.
  • field tersebut akan muncul terlebih dahulu 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. Nilai defaultnya adalah ASCENDING.

Arah

Arah pengurutan.

Enum
DIRECTION_UNSPECIFIED Tidak ditentukan.
ASCENDING Menaik.
DESCENDING Menurun.

Temukan Terdekat

Konfigurasi penelusuran Tetangga Terdekat.

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

object (FieldReference)

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

queryVector

object (Value)

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

distanceMeasure

enum (DistanceMeasure)

Wajib diisi. Ukuran jarak yang akan digunakan, wajib diisi.

limit

integer

Wajib diisi. Jumlah tetangga terdekat yang akan ditampilkan. Harus berupa bilangan bulat positif yang tidak lebih dari 1.000.

Mengukur Jarak

Ukuran jarak yang akan digunakan ketika membandingkan vektor.

Enum
DISTANCE_MEASURE_UNSPECIFIED Seharusnya tidak disetel.
EUCLIDEAN Mengukur jarak EUCLIDEAN antarvektor. Lihat Euclidean untuk mempelajari lebih lanjut
COSINE Membandingkan vektor berdasarkan sudut di antara mereka, yang memungkinkan Anda mengukur kesamaan yang tidak didasarkan pada besaran vektor. Sebaiknya gunakan DOT_PRODUCT dengan vektor yang dinormalisasi satuan, bukan jarak COSINE, yang secara matematis setara dengan performa yang lebih baik. Lihat Kemiripan Cosine untuk mempelajari lebih lanjut.
DOT_PRODUCT Mirip dengan kosinus tetapi dipengaruhi oleh besaran vektor. Lihat Dot Product untuk mempelajari lebih lanjut.