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__ में किसी ऑर्डर के बारे में नहीं बताया गया है, तो उसे डिफ़ॉल्ट रूप से जोड़ दिया जाता है.

फ़ील्ड को उसी क्रम में की गई दिशा के साथ जोड़ा जाता है जैसा कि आखिरी ऑर्डर में बताया गया था. अगर कोई ऑर्डर नहीं दिया गया है, तो फ़ील्ड को क्रम में लगाने की दिशा में जोड़ा जाता है. उदाहरण के लिए:

  • 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__'] का इस्तेमाल करें.

कलेक्शन सिलेक्टर

संग्रह जैसा कोई विकल्प, जैसे कि messages as m1.

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

string

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

allDescendants

boolean

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

फ़िल्टर

एक फ़िल्टर.

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)

ऐसा फ़िल्टर जिसमें सिर्फ़ एक आर्ग्युमेंट इस्तेमाल किया जाता है.

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

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

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

enum (Operator)

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

filters[]

object (Filter)

संयोजन के लिए फ़िल्टर की सूची.

ज़रूरी है:

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

ऑपरेटर

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

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

फ़ील्डफ़िल्टर

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

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 नहीं.
  • orderBy में यह field पहले आता है.
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 नहीं.
  • orderBy में यह field पहले आता है.

यूनरीफ़िल्टर

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

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 नहीं.
  • orderBy में यह field पहले आता है.
IS_NOT_NULL

दिया गया field, NULL के बराबर नहीं है.

ज़रूरी है:

  • एक NOT_EQUAL, NOT_IN, IS_NOT_NULL या IS_NOT_NAN.
  • orderBy में यह field पहले आता है.

क्रम

फ़ील्ड में मौजूद ऑर्डर.

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

object (FieldReference)

ऑर्डर करने के लिए फ़ील्ड.

direction

enum (Direction)

ऑर्डर करने के लिए दिशा-निर्देश. डिफ़ॉल्ट तौर पर, यह ASCENDING पर सेट होती है.

दिशानिर्देश

क्रम से लगाने का तरीका.

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

Find आस-पास

आस-पास के लोगों की खोज से जुड़ा कॉन्फ़िगरेशन.

JSON के काेड में दिखाना
{
  "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 से ज़्यादा का पूर्णांक नहीं होना चाहिए.

दूरी मापने का तरीका

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

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