StructuredQuery

استعلام عن Firestore.

يتم تنفيذ مراحل الاستعلام بالترتيب التالي: 1. من 2. حيث 3. حدد 4. orderBy + startAt + endAt 5. إزاحة 6. الحد

تمثيل 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)
  }
}
الحقول
select

object (Projection)

مجموعة فرعية اختيارية من الحقول المطلوب عرضها.

ويكون هذا الإجراء بمثابة DocumentMask على المستندات التي يتم عرضها من طلب البحث. عند عدم ضبطها، تفترض أنّ المتصل يريد عرض جميع الحقول.

from[]

object (CollectionSelector)

المجموعات المطلوب البحث عنها.

where

object (Filter)

الفلتر المطلوب تطبيقه.

orderBy[]

object (Order)

الترتيب الذي سيتم تطبيقه على نتائج الاستعلام.

تسمح Firestore للمتصلين بتقديم طلب كامل أو طلب جزئي أو عدم تقديم أي طلب على الإطلاق. في جميع الحالات، تضمن Firestore ترتيبًا مستقرًا من خلال القواعد التالية:

  • يجب توفير السمة orderBy للإشارة إلى جميع الحقول المستخدَمة في فلتر عدم المساواة.
  • يتم إلحاق جميع الحقول المطلوبة في orderBy ولكنها غير متوفّرة حاليًا بترتيب قاموسي لاسم الحقل.
  • إذا لم يتم تحديد طلب في __name__، يتم إلحاقه تلقائيًا.

يتم إلحاق الحقول بنفس اتجاه الترتيب المستخدَم في الترتيب الأخير المحدَّد، أو بالحقل "ASCENDING" إذا لم يتم تحديد ترتيب. مثال:

  • ORDER BY a يصبح ORDER BY a ASC, __name__ ASC
  • ORDER BY a DESC يصبح ORDER BY a DESC, __name__ DESC
  • WHERE a > 1 يصبح WHERE a > 1 ORDER BY a ASC, __name__ ASC
  • WHERE __name__ > ... AND a > 1 يصبح WHERE __name__ > ... AND a > 1 ORDER BY a ASC, __name__ ASC
startAt

object (Cursor)

بادئة محتملة لموضع معين في مجموعة النتائج لبدء طلب البحث.

يستند ترتيب مجموعة النتائج إلى عبارة ORDER BY في الاستعلام الأصلي.

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

تم ترتيب نتائج طلب البحث هذا حسب (b ASC, __name__ ASC).

ويمكن أن تشير المؤشرات إلى الترتيب الكامل أو بادئة الموقع الجغرافي، ولكنّها لا يمكن أن تشير إلى حقول أكثر من الحقول المتوفّرة في ORDER BY المقدَّمة.

استمرارًا للمثال أعلاه، سيكون لإرفاق مؤشرات البدء التالية تأثير متفاوت:

  • START BEFORE (2, /k/123): ابدأ الاستعلام قبل a = 1 AND b > 2 AND __name__ > /k/123 مباشرةً.
  • START AFTER (10): بدء الاستعلام بعد a = 1 AND b > 10 مباشرةً

على عكس OFFSET الذي يتطلب فحص أول N نتيجة لتخطيها، يسمح مؤشر البدء ببدء الاستعلام في موضع منطقي. هذا الموضع ليس مطلوبًا لمطابقة نتيجة فعلية، سيتم مسحه للأمام من هذا الموضع للعثور على المستند التالي.

المتطلبات:

  • لا يمكن أن يكون عدد القيم أكبر من عدد الحقول المحدّدة في عبارة ORDER BY.
endAt

object (Cursor)

بادئة محتملة لموضع معين في النتيجة التي يتم تعيينها لإنهاء طلب البحث في.

يشبه هذا العمود START_AT ولكن من خلاله يتحكّم في موضع النهاية بدلاً من موضع البدء.

المتطلبات:

  • لا يمكن أن يكون عدد القيم أكبر من عدد الحقول المحدّدة في عبارة ORDER BY.
offset

integer

عدد المستندات المطلوب تخطيها قبل عرض النتيجة الأولى.

ينطبق ذلك بعد القيود المحدَّدة في WHERE وSTART AT وEND AT، ولكن قبل عبارة LIMIT.

المتطلبات:

  • يجب أن تكون القيمة أكبر من صفر أو مساوية له في حال تحديدها.
limit

integer

تمثّل هذه السمة الحد الأقصى لعدد النتائج المطلوب عرضها.

ينطبق هذا الإعداد بعد جميع القيود الأخرى.

المتطلبات:

  • يجب أن تكون القيمة أكبر من صفر أو مساوية له في حال تحديدها.
findNearest

object (FindNearest)

اختياريّ. بحث محتمل عن الجيران الأقرب.

ينطبق بعد جميع الفلاتر والطلبات الأخرى.

للعثور على أقرب تضمينات متجهة لمتجه الاستعلام المحدد.

الإسقاط

إسقاط حقول المستند للرجوع إليها

تمثيل JSON
{
  "fields": [
    {
      object (FieldReference)
    }
  ]
}
الحقول
fields[]

object (FieldReference)

الحقول المطلوب عرضها.

إذا كانت فارغة، يتم عرض جميع الحقول. لعرض اسم المستند فقط، استخدِم "['__name__']".

CollectionSelector

مجموعة من المختارات، مثل messages as m1.

تمثيل JSON
{
  "collectionId": string,
  "allDescendants": boolean
}
الحقول
collectionId

string

معرِّف المجموعة. عند ضبط السياسة، يتم اختيار المجموعات التي تحمل هذا المعرّف فقط.

allDescendants

boolean

عند اختيار قيمة "خطأ"، تختار فقط المجموعات التي تشكّل عناصر فرعية مباشرة لـ parent المحدّدة في RunQueryRequest التي تتضمّنها. عند اختيار القيمة "صواب"، يتم اختيار جميع المجموعات التابعة.

تصفية

عامل التصفية.

تمثيل 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.
}
الحقول
حقل الاتحاد filter_type نوع الفلتر. يمكن أن يكون الحقل "filter_type" واحدًا فقط مما يلي:
compositeFilter

object (CompositeFilter)

عامل تصفية مركب.

fieldFilter

object (FieldFilter)

عامل تصفية في حقل مستند.

unaryFilter

object (UnaryFilter)

يشير ذلك المصطلح إلى فلتر يستخدم وسيطة واحدة فقط.

CompositeFilter

فلتر يدمج عدة فلاتر أخرى باستخدام عامل تشغيل معين.

تمثيل JSON
{
  "op": enum (Operator),
  "filters": [
    {
      object (Filter)
    }
  ]
}
الحقول
op

enum (Operator)

العامل للجمع بين فلاتر متعددة.

filters[]

object (Filter)

قائمة الفلاتر المطلوب دمجها.

المتطلبات:

  • يتوفر فلتر واحد على الأقل.

مُشغِّل

عامل تشغيل عامل تصفية مركب.

عمليات التعداد
OPERATOR_UNSPECIFIED غير محدد يجب عدم استخدام هذه القيمة.
AND يجب توفير المستندات لاستيفاء جميع الفلاتر المجمّعة.
OR يجب أن تستوفي المستندات فلترًا واحدًا على الأقل من الفلاتر المجمّعة.

FieldFilter

فلتر على حقل معين.

تمثيل JSON
{
  "field": {
    object (FieldReference)
  },
  "op": enum (Operator),
  "value": {
    object (Value)
  }
}
الحقول
field

object (FieldReference)

الحقل المطلوب الفلترة حسبه.

op

enum (Operator)

عامل التشغيل المطلوب الفلترة حسبه.

value

object (Value)

القيمة المطلوب المقارنة بها.

مُشغِّل

عامل تشغيل لفلتر الحقول.

عمليات التعداد
OPERATOR_UNSPECIFIED غير محدد يجب عدم استخدام هذه القيمة.
LESS_THAN

قيمة field المحدّدة أقل من قيمة value المحدّدة.

المتطلبات:

  • يأتي هذا "field" في المرتبة الأولى في orderBy.
LESS_THAN_OR_EQUAL

قيمة field المحدّدة أقل من قيمة value المحدّدة أو مساوية لها.

المتطلبات:

  • يأتي هذا "field" في المرتبة الأولى في orderBy.
GREATER_THAN

قيمة field المحدّدة أكبر من value المحدّدة.

المتطلبات:

  • يأتي هذا "field" في المرتبة الأولى في orderBy.
GREATER_THAN_OR_EQUAL

قيمة field المحدّدة أكبر من value أو مساوية لها.

المتطلبات:

  • يأتي هذا "field" في المرتبة الأولى في orderBy.
EQUAL قيمة field المحدّدة تساوي value المحدّدة.
NOT_EQUAL

قيمة field المقدمة لا تساوي value المقدمة.

المتطلبات:

  • ما مِن NOT_EQUAL أو NOT_IN أو IS_NOT_NULL أو IS_NOT_NAN أخرى.
  • إنّ field هذا هو المرتبة الأولى في orderBy.
ARRAY_CONTAINS السمة field المحدّدة هي مصفوفة تتضمّن القيمة value المحدّدة.
IN

قيمة field المقدمة تساوي قيمة واحدة على الأقل في الصفيف المحدد.

المتطلبات:

  • إنّ قيمة السمة value هي حقل ArrayValue غير فارغ، وتخضع لقيود الفصل.
  • ما مِن فلاتر NOT_IN في طلب البحث نفسه.
ARRAY_CONTAINS_ANY

field المحدد هو صفيف يحتوي على أي من القيم في الصفيف المحدد.

المتطلبات:

  • إنّ قيمة السمة value هي حقل ArrayValue غير فارغ، وتخضع لقيود الفصل.
  • ما مِن فلاتر ARRAY_CONTAINS_ANY أخرى ضمن الفصل نفسه.
  • ما مِن فلاتر NOT_IN في طلب البحث نفسه.
NOT_IN

قيمة field ليست في الصفيف المحدد.

المتطلبات:

  • قيمة value هي قيمة ArrayValue غير فارغة وتحتوي على 10 قيم كحدّ أقصى.
  • ما مِن OR أو IN أو ARRAY_CONTAINS_ANY أو NOT_IN أو NOT_EQUAL أو IS_NOT_NULL أو IS_NOT_NAN أخرى.
  • إنّ field هذا هو المرتبة الأولى في orderBy.

UnaryFilter

فلتر يحتوي على معامل واحد.

تمثيل 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.
}
الحقول
op

enum (Operator)

عامل التشغيل الأحادي المطلوب تطبيقه.

حقل الاتحاد operand_type الوسيطة إلى عامل التصفية. يمكن أن يكون الحقل "operand_type" واحدًا فقط مما يلي:
field

object (FieldReference)

الحقل الذي سيتم تطبيق عامل التشغيل عليه.

مُشغِّل

عامل تشغيل أحادي.

عمليات التعداد
OPERATOR_UNSPECIFIED غير محدد يجب عدم استخدام هذه القيمة.
IS_NAN قيمة field المحدّدة تساوي NaN.
IS_NULL قيمة field المحدّدة تساوي NULL.
IS_NOT_NAN

قيمة field المحددة لا تساوي NaN.

المتطلبات:

  • ما مِن NOT_EQUAL أو NOT_IN أو IS_NOT_NULL أو IS_NOT_NAN أخرى.
  • إنّ field هذا هو المرتبة الأولى في orderBy.
IS_NOT_NULL

قيمة field المحددة لا تساوي NULL.

المتطلبات:

  • ملف NOT_EQUAL أو NOT_IN أو IS_NOT_NULL أو IS_NOT_NAN واحد
  • إنّ field هذا هو المرتبة الأولى في orderBy.

طلب

طلب في حقل.

تمثيل JSON
{
  "field": {
    object (FieldReference)
  },
  "direction": enum (Direction)
}
الحقول
field

object (FieldReference)

الحقل المطلوب الترتيب وفقًا له.

direction

enum (Direction)

تمثّل هذه السمة اتجاه الطلب. وتكون الإعدادات التلقائية ASCENDING.

توجيه المشاهدين لاتخاذ إجراء

اتجاه الترتيب.

عمليات التعداد
DIRECTION_UNSPECIFIED غير محدد
ASCENDING تصاعدي.
DESCENDING تنازلي.

FindNearest

إعداد البحث عن الجيران الأقرب.

تمثيل JSON
{
  "vectorField": {
    object (FieldReference)
  },
  "queryVector": {
    object (Value)
  },
  "distanceMeasure": enum (DistanceMeasure),
  "limit": integer
}
الحقول
vectorField

object (FieldReference)

مطلوبة. حقل متجه مفهرس للبحث عنه يمكن فقط عرض المستندات التي تحتوي على متجهات تطابق أبعادها مع queryVector.

queryVector

object (Value)

مطلوبة. متجه الاستعلام الذي نبحث عنه. يجب ألا يزيد حجم الخط المتجه عن 2048.

distanceMeasure

enum (DistanceMeasure)

مطلوبة. يجب توفير مقياس المسافة المطلوب استخدامه.

limit

integer

مطلوبة. عدد الجيران الأقرب المراد إرجاعهم. يجب أن يكون عددًا صحيحًا موجبًا لا يزيد عن 1000.

DistanceMeasure

يشير ذلك المصطلح إلى مقياس المسافة المطلوب استخدامه عند مقارنة المتجهات.

عمليات التعداد
DISTANCE_MEASURE_UNSPECIFIED يجب عدم ضبطها.
EUCLIDEAN تقيس مسافة EUCLIDEAN بين المتجهات. يمكنك الاطّلاع على الإقليدية لمعرفة المزيد.
COSINE تقارن المتجهات بناءً على الزاوية بينها، مما يسمح لك بقياس التشابه الذي لا يعتمد على مقدار المتجهات. نوصي باستخدام DOT_PRODUCT مع وحدة المتجهات التي تمت تسويتها بدلا من مسافة COSINE، وهي مكافئة رياضيًا مع أداء أفضل. راجِع تشابه جيب التمام لمعرفة المزيد من المعلومات.
DOT_PRODUCT تشبه جيب التمام، ولكنها تتأثر بحجم المتجهات. راجِع المنتج النقطي للاطّلاع على مزيد من المعلومات.