StructuredQuery

Firestore क्वेरी.

क्वेरी के स्टेज नीचे दिए गए क्रम में चलाए जाते हैं: 1. 2 से. जहां 3. 4 को चुनें. orderBy + startAt + endAt 5. ऑफ़सेट 6. लिमिट

जेएसओएन के काेड में दिखाना
{
  "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 के तुरंत बाद शुरू करें.

शुरुआत में N नतीजों को स्किप करने के लिए, OFFSET को स्कैन करना पड़ता है, जबकि स्टार्ट कर्सर, क्वेरी को लॉजिकल पोज़िशन से शुरू करने की अनुमति देता है. किसी असल नतीजे से मैच करने के लिए, इस पोज़िशन की ज़रूरत नहीं होती. यह अगले दस्तावेज़ को ढूंढने के लिए, इस पोज़िशन से आगे की ओर स्कैन करता है.

ज़रूरी है:

  • वैल्यू की संख्या, ORDER BY क्लॉज़ में बताई गई फ़ील्ड की संख्या से ज़्यादा नहीं हो सकती.
endAt

object (Cursor)

नतीजे में किसी पोज़िशन का संभावित प्रीफ़िक्स, जिसे क्वेरी को खत्म करने के लिए सेट किया गया है.

यह START_AT से मिलता-जुलता है. हालांकि, यह शुरुआती पोज़िशन के बजाय आखिरी पोज़िशन को कंट्रोल करता है.

ज़रूरी है:

  • वैल्यू की संख्या, ORDER BY क्लॉज़ में बताई गई फ़ील्ड की संख्या से ज़्यादा नहीं हो सकती.
offset

integer

पहला नतीजा लौटाने से पहले स्किप किए जाने वाले दस्तावेज़ों की संख्या.

यह WHERE, START AT, और END AT में तय की गई पाबंदियों के बाद, लेकिन LIMIT क्लॉज़ से पहले लागू होता है.

ज़रूरी है:

  • अगर वैल्यू तय की गई है, तो वैल्यू शून्य से ज़्यादा या उसके बराबर होनी चाहिए.
limit

integer

दिखाए जाने वाले नतीजों की ज़्यादा से ज़्यादा संख्या.

अन्य सभी पाबंदियों के बाद लागू होता है.

ज़रूरी है:

  • अगर वैल्यू तय की गई है, तो वैल्यू शून्य से ज़्यादा या उसके बराबर होनी चाहिए.
findNearest

object (FindNearest)

ज़रूरी नहीं. एक संभावित नज़दीकी पड़ोसी खोज.

दूसरे सभी फ़िल्टर और ऑर्डर करने के बाद लागू होता है.

दिए गए क्वेरी वेक्टर से सबसे नज़दीकी वेक्टर एम्बेड करता है.

अनुमान की रिपोर्ट

वापस किए जाने वाले दस्तावेज़ के फ़ील्ड का प्रोजेक्शन.

जेएसओएन के काेड में दिखाना
{
  "fields": [
    {
      object (FieldReference)
    }
  ]
}
फ़ील्ड
fields[]

object (FieldReference)

लौटाए जाने वाले फ़ील्ड.

अगर कोई फ़ील्ड खाली है, तो सभी फ़ील्ड दिखाए जाते हैं. सिर्फ़ दस्तावेज़ का नाम दिखाने के लिए, ['__name__'] का इस्तेमाल करें.

CollectionSelector

संग्रह का चुनाव, जैसे कि messages as m1.

जेएसओएन के काेड में दिखाना
{
  "collectionId": string,
  "allDescendants": boolean
}
फ़ील्ड
collectionId

string

कलेक्शन आईडी. सेट होने पर, सिर्फ़ इस आईडी वाले कलेक्शन चुने जाते हैं.

allDescendants

boolean

गलत होने पर, सिर्फ़ ऐसे कलेक्शन चुनता है जो RunQueryRequest में बताए गए parent के करीबी होते हैं. सही होने पर, सभी डिसेंडेंट कलेक्शन चुनता है.

फ़िल्टर करें

एक फ़िल्टर.

जेएसओएन के काेड में दिखाना
{

  // 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

ऐसा फ़िल्टर जो दिए गए ऑपरेटर का इस्तेमाल करके, अन्य कई फ़िल्टर को मर्ज करता है.

जेएसओएन के काेड में दिखाना
{
  "op": enum (Operator),
  "filters": [
    {
      object (Filter)
    }
  ]
}
फ़ील्ड
op

enum (Operator)

एक से ज़्यादा फ़िल्टर को मिलाने वाला ऑपरेटर.

filters[]

object (Filter)

जोड़े जाने वाले फ़िल्टर की सूची.

ज़रूरी है:

  • कम से कम एक फ़िल्टर मौजूद है.

ऑपरेटर

कंपोज़िट फ़िल्टर ऑपरेटर.

Enums
OPERATOR_UNSPECIFIED नहीं बताया गया है इस वैल्यू का इस्तेमाल नहीं किया जाना चाहिए.
AND सभी मिले-जुले फ़िल्टर के इस्तेमाल के लिए दस्तावेज़ ज़रूरी हैं.
OR दस्तावेज़, मिले-जुले कम से कम एक फ़िल्टर के हिसाब से होने चाहिए.

FieldFilter

किसी खास फ़ील्ड पर लागू फ़िल्टर.

जेएसओएन के काेड में दिखाना
{
  "field": {
    object (FieldReference)
  },
  "op": enum (Operator),
  "value": {
    object (Value)
  }
}
फ़ील्ड
field

object (FieldReference)

वह फ़ील्ड जिसके हिसाब से फ़िल्टर करना है.

op

enum (Operator)

वह ऑपरेटर जिसके हिसाब से फ़िल्टर करना है.

value

object (Value)

वह वैल्यू जिससे तुलना करनी है.

ऑपरेटर

फ़ील्ड फ़िल्टर करने वाला ऑपरेटर.

Enums
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 ज़्यादा से ज़्यादा 10 मानों वाला ArrayValue खाली नहीं है.
  • कोई अन्य OR, IN, ARRAY_CONTAINS_ANY, NOT_IN, NOT_EQUAL, IS_NOT_NULL या IS_NOT_NAN नहीं.
  • वह field orderBy में पहले आता है.

UnaryFilter

एक ऑपरैंड वाला फ़िल्टर.

जेएसओएन के काेड में दिखाना
{
  "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)

वह फ़ील्ड जिस पर ऑपरेटर लागू करना है.

ऑपरेटर

एक सिंगल ऑपरेटर.

Enums
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 में पहले आता है.

क्रम

फ़ील्ड पर मौजूद कोई ऑर्डर.

जेएसओएन के काेड में दिखाना
{
  "field": {
    object (FieldReference)
  },
  "direction": enum (Direction)
}
फ़ील्ड
field

object (FieldReference)

वह फ़ील्ड जिसके हिसाब से ऑर्डर करना है.

direction

enum (Direction)

ऑर्डर करने के लिए निर्देश. डिफ़ॉल्ट वैल्यू ASCENDING होती है.

डायरेक्शन

क्रम से लगाने की दिशा.

Enums
DIRECTION_UNSPECIFIED नहीं बताया गया है
ASCENDING बढ़ते क्रम में.
DESCENDING घटते क्रम में.

FindNearest

'सबसे नज़दीकी पड़ोसी' के लिए खोज कॉन्फ़िगरेशन.

जेएसओएन के काेड में दिखाना
{
  "vectorField": {
    object (FieldReference)
  },
  "queryVector": {
    object (Value)
  },
  "distanceMeasure": enum (DistanceMeasure),
  "limit": integer
}
फ़ील्ड
vectorField

object (FieldReference)

ज़रूरी है. खोज करने के लिए, इंडेक्स किया गया वेक्टर फ़ील्ड. सिर्फ़ वे दस्तावेज़ वापस किए जा सकते हैं जिनमें वेक्टर वाले ऐसे वेक्टर दिखाए गए हों जिनकी डाइमेंशन, क्वेरीवेक्टर से मेल खाता हो.

queryVector

object (Value)

ज़रूरी है. वह क्वेरी वेक्टर जिस पर हम खोज कर रहे हैं. 2048 से ज़्यादा डाइमेंशन का वेक्टर नहीं होना चाहिए.

distanceMeasure

enum (DistanceMeasure)

ज़रूरी है. इस्तेमाल की जाने वाली दूरी की माप ज़रूरी है.

limit

integer

ज़रूरी है. वापस आने वाले पड़ोसियों की संख्या. 1,000 से ज़्यादा का पॉज़िटिव पूर्णांक होना चाहिए.

DistanceMeasure

वेक्टर की तुलना करते समय इस्तेमाल की जाने वाली दूरी की माप.

Enums
DISTANCE_MEASURE_UNSPECIFIED सेट नहीं होना चाहिए.
EUCLIDEAN वेक्टर के बीच EUCLIDEAN की दूरी को मापता है. ज़्यादा जानने के लिए यूक्लिडियन देखें
COSINE सदिशों के बीच के कोण के आधार पर सदिशों की तुलना करता है. इससे आपको उन समानता को मापने की सुविधा मिलती है जो सदिशों के परिमाण पर आधारित नहीं होती. हमारा सुझाव है कि आप COSINE दूरी के बजाय, इकाई नॉर्मलाइज़ किए गए वेक्टर के साथ DOT_PRODUCT का इस्तेमाल करें. यह गणित के हिसाब से, बेहतर परफ़ॉर्मेंस के बराबर है. ज़्यादा जानने के लिए Cosine समानता देखें.
DOT_PRODUCT कोसाइन के समान है लेकिन यह सदिशों के परिमाण से प्रभावित है. ज़्यादा जानने के लिए, Dot Product देखें.