StructuredQuery

Truy vấn trên Firestore.

Các giai đoạn truy vấn được thực thi theo thứ tự sau: 1. từ 2. trong đó 3. chọn 4. orderBy + startAt + endAt 5. offset 6. limit

Biểu diễn dưới dạng 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)
  }
}
Trường
select

object (Projection)

Tập hợp con không bắt buộc của các trường cần trả về.

Mã này đóng vai trò là DocumentMask trên các tài liệu được trả về từ truy vấn. Khi không được đặt, giả định rằng phương thức gọi muốn trả về tất cả các trường.

from[]

object (CollectionSelector)

Các tập hợp cần truy vấn.

where

object (Filter)

Bộ lọc muốn áp dụng.

orderBy[]

object (Order)

Thứ tự áp dụng cho các kết quả truy vấn.

Firestore cho phép người gọi cung cấp dịch vụ đặt hàng đầy đủ, đặt hàng một phần hoặc không đặt hàng. Trong mọi trường hợp, Firestore đảm bảo thứ tự ổn định thông qua các quy tắc sau:

  • orderBy là bắt buộc để tham chiếu tất cả các trường dùng với bộ lọc bất đẳng thức.
  • Tất cả các trường bắt buộc phải có trong orderBy nhưng chưa xuất hiện đều được thêm vào theo thứ tự từ vựng của tên trường.
  • Nếu đơn đặt hàng trên __name__ không được chỉ định, thì đơn đặt hàng sẽ được thêm vào theo mặc định.

Các trường được nối với cùng một hướng sắp xếp với thứ tự gần đây nhất được chỉ định hoặc "ASCENDING" nếu không có thứ tự nào được chỉ định. Ví dụ:

  • ORDER BY a trở thành ORDER BY a ASC, __name__ ASC
  • ORDER BY a DESC trở thành ORDER BY a DESC, __name__ DESC
  • WHERE a > 1 trở thành WHERE a > 1 ORDER BY a ASC, __name__ ASC
  • WHERE __name__ > ... AND a > 1 trở thành WHERE __name__ > ... AND a > 1 ORDER BY a ASC, __name__ ASC
startAt

object (Cursor)

Tiền tố tiềm năng của một vị trí trong kết quả được đặt để bắt đầu truy vấn.

Thứ tự của tập hợp kết quả dựa trên mệnh đề ORDER BY của truy vấn ban đầu.

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

Kết quả của truy vấn này được sắp xếp theo (b ASC, __name__ ASC).

Con trỏ có thể tham chiếu đến toàn bộ thứ tự hoặc một tiền tố của vị trí, mặc dù vị trí đó không thể tham chiếu đến nhiều trường hơn trường có trong ORDER BY được cung cấp.

Tiếp tục ví dụ trên, việc đính kèm các con trỏ bắt đầu sau đây sẽ có tác động khác nhau:

  • START BEFORE (2, /k/123): bắt đầu truy vấn ngay trước a = 1 AND b > 2 AND __name__ > /k/123.
  • START AFTER (10): bắt đầu truy vấn ngay sau a = 1 AND b > 10.

Không giống như OFFSET yêu cầu quét qua N kết quả đầu tiên để bỏ qua, con trỏ bắt đầu cho phép truy vấn bắt đầu tại vị trí logic. Vị trí này không bắt buộc phải khớp với kết quả thực tế, vị trí này sẽ quét tiến từ vị trí này để tìm tài liệu tiếp theo.

Yêu cầu:

  • Số lượng giá trị không được lớn hơn số lượng trường được chỉ định trong mệnh đề ORDER BY.
endAt

object (Cursor)

Tiền tố tiềm năng của một vị trí trong kết quả được đặt để kết thúc truy vấn tại.

Hàm này tương tự như START_AT nhưng kiểm soát vị trí kết thúc thay vì vị trí bắt đầu.

Yêu cầu:

  • Số lượng giá trị không được lớn hơn số lượng trường được chỉ định trong mệnh đề ORDER BY.
offset

integer

Số tài liệu cần bỏ qua trước khi trả về kết quả đầu tiên.

Điều này áp dụng sau các điều kiện ràng buộc do WHERE, START ATEND AT chỉ định nhưng trước mệnh đề LIMIT.

Yêu cầu:

  • Giá trị phải lớn hơn hoặc bằng 0 nếu được chỉ định.
limit

integer

Số lượng kết quả tối đa cần trả về.

Áp dụng sau tất cả các quy tắc ràng buộc khác.

Yêu cầu:

  • Giá trị phải lớn hơn hoặc bằng 0 nếu được chỉ định.
findNearest

object (FindNearest)

Không bắt buộc. Tìm kiếm hàng xóm gần nhất tiềm năng.

Áp dụng sau tất cả các bộ lọc và thứ tự khác.

Tìm các vectơ nhúng gần nhất với vectơ truy vấn đã cho.

Dự kiến

Phép chiếu các trường cần trả về của tài liệu.

Biểu diễn dưới dạng JSON
{
  "fields": [
    {
      object (FieldReference)
    }
  ]
}
Trường
fields[]

object (FieldReference)

Các trường cần trả về.

Nếu trống, tất cả trường sẽ được trả về. Để chỉ trả về tên của tài liệu, hãy sử dụng ['__name__'].

CollectionSelector

Lựa chọn một bộ sưu tập, chẳng hạn như messages as m1.

Biểu diễn dưới dạng JSON
{
  "collectionId": string,
  "allDescendants": boolean
}
Trường
collectionId

string

Mã bộ sưu tập. Khi đặt, chỉ chọn các bộ sưu tập có mã nhận dạng này.

allDescendants

boolean

Khi giá trị là sai, chỉ chọn các tập hợp là phần tử con ngay lập tức của parent được chỉ định trong RunQueryRequest chứa. Khi đúng, hãy chọn tất cả các tập hợp con cháu.

Lọc

Bộ lọc.

Biểu diễn dưới dạng 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.
}
Trường
Trường hợp filter_type. Loại bộ lọc. filter_type chỉ có thể là một trong những trạng thái sau:
compositeFilter

object (CompositeFilter)

Bộ lọc tổng hợp.

fieldFilter

object (FieldFilter)

Bộ lọc trên một trường tài liệu.

unaryFilter

object (UnaryFilter)

Bộ lọc nhận đúng một đối số.

CompositeFilter

Bộ lọc hợp nhất nhiều bộ lọc khác bằng cách sử dụng toán tử nhất định.

Biểu diễn dưới dạng JSON
{
  "op": enum (Operator),
  "filters": [
    {
      object (Filter)
    }
  ]
}
Trường
op

enum (Operator)

Toán tử để kết hợp nhiều bộ lọc.

filters[]

object (Filter)

Danh sách bộ lọc cần kết hợp.

Yêu cầu:

  • Có ít nhất một bộ lọc.

Đơn vị tổ chức

Toán tử bộ lọc tổng hợp.

Enum
OPERATOR_UNSPECIFIED Không xác định. Không được sử dụng giá trị này.
AND Giấy tờ cần phải đáp ứng tất cả các bộ lọc kết hợp.
OR Giấy tờ cần đáp ứng ít nhất một trong các bộ lọc kết hợp.

FieldFilter

Bộ lọc về một trường cụ thể.

Biểu diễn dưới dạng JSON
{
  "field": {
    object (FieldReference)
  },
  "op": enum (Operator),
  "value": {
    object (Value)
  }
}
Trường
field

object (FieldReference)

Trường cần lọc theo.

op

enum (Operator)

Toán tử cần lọc.

value

object (Value)

Giá trị cần so sánh.

Đơn vị tổ chức

Toán tử lọc trường.

Enum
OPERATOR_UNSPECIFIED Không xác định. Không được sử dụng giá trị này.
LESS_THAN

field đã cho nhỏ hơn value đã cho.

Yêu cầu:

  • field đó là người đứng đầu trong orderBy.
LESS_THAN_OR_EQUAL

field đã cho nhỏ hơn hoặc bằng value đã cho.

Yêu cầu:

  • field đó là người đứng đầu trong orderBy.
GREATER_THAN

field đã cho lớn hơn value đã cho.

Yêu cầu:

  • field đó là người đứng đầu trong orderBy.
GREATER_THAN_OR_EQUAL

field đã cho lớn hơn hoặc bằng value đã cho.

Yêu cầu:

  • field đó là người đứng đầu trong orderBy.
EQUAL field đã cho sẽ bằng value đã cho.
NOT_EQUAL

field đã cho không bằng với value đã cho.

Yêu cầu:

  • Không có NOT_EQUAL, NOT_IN, IS_NOT_NULL hoặc IS_NOT_NAN nào khác.
  • field đó đứng đầu trong orderBy.
ARRAY_CONTAINS field đã cho là một mảng chứa value đã cho.
IN

field đã cho bằng ít nhất một giá trị trong mảng đã cho.

Yêu cầu:

  • value đó là một ArrayValue không trống và phải tuân theo giới hạn phân cách.
  • Không có bộ lọc NOT_IN nào trong cùng một truy vấn.
ARRAY_CONTAINS_ANY

field đã cho là một mảng chứa bất kỳ giá trị nào trong mảng đã cho.

Yêu cầu:

  • value đó là một ArrayValue không trống và phải tuân theo giới hạn phân cách.
  • Không có bộ lọc ARRAY_CONTAINS_ANY nào khác trong cùng một phân biệt.
  • Không có bộ lọc NOT_IN nào trong cùng một truy vấn.
NOT_IN

Giá trị của field không nằm trong mảng đã cho.

Yêu cầu:

  • value đó là một ArrayValue không trống có tối đa 10 giá trị.
  • Không có OR, IN, ARRAY_CONTAINS_ANY, NOT_IN, NOT_EQUAL, IS_NOT_NULL hoặc IS_NOT_NAN nào khác.
  • field đó đứng đầu trong orderBy.

UnaryFilter

Bộ lọc có một toán hạng duy nhất.

Biểu diễn dưới dạng 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.
}
Trường
op

enum (Operator)

Toán tử đơn nguyên sẽ áp dụng.

Trường hợp operand_type. Đối số cho bộ lọc. operand_type chỉ có thể là một trong những trạng thái sau:
field

object (FieldReference)

Trường sẽ áp dụng toán tử.

Đơn vị tổ chức

Toán tử đơn phân.

Enum
OPERATOR_UNSPECIFIED Không xác định. Không được sử dụng giá trị này.
IS_NAN field đã cho sẽ bằng NaN.
IS_NULL field đã cho sẽ bằng NULL.
IS_NOT_NAN

field đã cho không bằng NaN.

Yêu cầu:

  • Không có NOT_EQUAL, NOT_IN, IS_NOT_NULL hoặc IS_NOT_NAN nào khác.
  • field đó đứng đầu trong orderBy.
IS_NOT_NULL

field đã cho không bằng NULL.

Yêu cầu:

  • Một NOT_EQUAL, NOT_IN, IS_NOT_NULL hoặc IS_NOT_NAN.
  • field đó đứng đầu trong orderBy.

Đặt

Đơn đặt hàng trên một trường.

Biểu diễn dưới dạng JSON
{
  "field": {
    object (FieldReference)
  },
  "direction": enum (Direction)
}
Trường
field

object (FieldReference)

Trường để sắp xếp theo.

direction

enum (Direction)

Hướng dẫn đặt hàng. Giá trị mặc định là ASCENDING.

Hướng

Hướng sắp xếp.

Enum
DIRECTION_UNSPECIFIED Không xác định.
ASCENDING Tăng dần.
DESCENDING Giảm dần.

FindNearest

Cấu hình tìm kiếm của láng giềng gần nhất.

Biểu diễn dưới dạng JSON
{
  "vectorField": {
    object (FieldReference)
  },
  "queryVector": {
    object (Value)
  },
  "distanceMeasure": enum (DistanceMeasure),
  "limit": integer
}
Trường
vectorField

object (FieldReference)

Bắt buộc. Một trường vectơ được lập chỉ mục để tìm kiếm. Chỉ những tài liệu chứa vectơ có chiều phù hợp với queryVector mới có thể được trả về.

queryVector

object (Value)

Bắt buộc. Vectơ truy vấn mà chúng ta đang tìm kiếm. Phải là một vectơ không quá 2048 chiều.

distanceMeasure

enum (DistanceMeasure)

Bắt buộc. Bắt buộc phải đo khoảng cách để sử dụng.

limit

integer

Bắt buộc. Số hàng xóm gần nhất cần trả về. Phải là số nguyên dương không quá 1000.

DistanceMeasure

Số đo khoảng cách cần sử dụng khi so sánh các vectơ.

Enum
DISTANCE_MEASURE_UNSPECIFIED Không nên đặt.
EUCLIDEAN Đo khoảng cách EUCLIDEAN giữa các vectơ. Xem Euclidean để tìm hiểu thêm
COSINE So sánh vectơ dựa trên góc giữa chúng, cho phép bạn đo độ tương đồng không dựa trên độ lớn vectơ. Bạn nên sử dụng DOT_PRODUCT với vectơ chuẩn hoá đơn vị thay vì khoảng cách cosINE, tương đương về mặt toán học với hiệu suất tốt hơn. Xem nội dung Sự tương đồng về Cosine để tìm hiểu thêm.
DOT_PRODUCT Tương tự như cosin nhưng bị ảnh hưởng bởi độ lớn của vectơ. Xem Sản phẩm Dot để tìm hiểu thêm.