फ़िल्टर सिंटैक्स और उसके इस्तेमाल की सूची बनाना

इस गाइड में सूची फ़िल्टर सिंटैक्स और अलग-अलग तरह के संसाधनों को फ़िल्टर करने के तरीके के बारे में बताया गया है.

एपीआई के कुछ तरीके, रिस्पॉन्स में दिखाए गए रिसॉर्स को सीमित करने के लिए, फ़िल्टर को स्वीकार कर सकते हैं.

खास जानकारी

इस सेक्शन में, सूची फ़िल्टर के सिंटैक्स के बारे में खास जानकारी दी गई है.

  • फ़िल्टर, expression वाली स्ट्रिंग होती है. expression, तुलनाओं का बूलियन कॉम्बिनेशन होता है:

    expression = ["NOT"] comparison { ("AND" | "OR") ["NOT"] comparison }
    expression = ( expression )
    
  • comparison, वैल्यू वाले रिसॉर्स फ़ील्ड से मैच करता है. आप सभी आम कंपैरिज़न ऑपरेटर इस्तेमाल कर सकते हैं.

    comparison = name OP value
    OP = "<=" | "<" | ">=" | ">"  | "!=" | "=" | ":"
    

    has ऑपरेटर, कोलन (:) का इस्तेमाल स्ट्रिंग और दोहराए गए फ़ील्ड पर किया जा सकता है. जानकारी के लिए ऑपरेटर है सेक्शन देखें.

  • फ़िल्टर में, इस तरह की वैल्यू का इस्तेमाल किया जा सकता है:

    • संख्याएं
    • स्ट्रिंग
    • ब्रैकेट में रखे गए एक्सप्रेशन
    value = number| string | "*" | "(" expression ")"
    
  • स्ट्रिंग ये चीज़ें दिखा सकती हैं:

    • आर्बिट्रेरी टेक्स्ट
    • बूलियन
    • Enum की वैल्यू
    • टाइमस्टैंप वाले हिस्सों में

बूलियन एक्सप्रेशन

expression = ["NOT"|"-"] comparison {["AND" | "OR"] ["NOT"|"-"] comparison}

कार्रवाइयां नीचे दिए गए क्रम में की जाती हैं:

  1. NOT
  2. OR
  3. AND

उदाहरण के लिए, ये एक्सप्रेशन एक जैसे हैं:

a OR NOT b AND NOT c OR d
(a OR (NOT b)) AND ((NOT c) OR d)

तुलनाओं के बीच AND ऑपरेटर को हटाया जा सकता है. उदाहरण के लिए, नीचे दिए गए फ़िल्टर एक जैसे हैं:

c=d AND e=f
c=d e=f

NOT की जगह, हाइफ़न (-) का इस्तेमाल किया जा सकता है. हाइफ़न (-) और नीचे दी गई तुलना के बीच खाली जगह नहीं होनी चाहिए. उदाहरण के लिए, नीचे दिए गए फ़िल्टर एक जैसे हैं:

NOT e=f
-e=f

तुलना

इस सेक्शन में, "name OP value" तुलनाओं के बारे में कुछ इस तरह बताया गया है:

comparison = name OP value

जहां

OP = "<=" | "<" | ">=" | ">" | "!=" | "=" | ":"
name = identifier { "." identifier }
identifier = unquoted_text
value = number | string | "*" | "(" expression ")"

तुलना की बाईं ओर, एपीआई के संसाधन फ़ील्ड के पाथ का नाम होता है. नाम में संसाधन आइडेंटिफ़ायर की एक सीरीज़ होती है, जिन्हें पीरियड (.) के ज़रिए कनेक्ट किया जाता है. हर फ़ील्ड आइडेंटिफ़ायर के बाद, उस फ़ील्ड के नाम का अगला लेवल होता है. उदाहरण के लिए, एक ऐसे रिसॉर्स पर विचार करें जिसमें एक कॉम्प्लेक्स फ़ील्ड item हो, जिसमें एक और कॉम्प्लेक्स फ़ील्ड tool हो. साथ ही, फ़ील्ड का नाम shape हो. इस संसाधन के लिए फ़िल्टर में, आपको item.tool.shape नाम का आकार दिखेगा.

आम तौर पर, दाईं ओर एक अदिश वैल्यू होती है, जिसे फ़ील्ड के टाइप में बदल दिया जाता है और उसकी तुलना की जाती है. ज़्यादा जानकारी के लिए, वैल्यू लिटरल टाइप सेक्शन देखें.

तुलना के दाईं ओर को भी लिटरल वैल्यू और/या बूलियन एक्सप्रेशन के ब्रैकेट वाले बूलियन कॉम्बिनेशन के तौर पर दिखाया जा सकता है, जिसमें सिर्फ़ लिटरल वैल्यू होती हैं (NOT के साथ या उसके बिना). बाईं ओर का नाम और तुलना ऑपरेटर, हर वैल्यू पर लागू होता है. उदाहरण के लिए, नीचे दिए गए फ़िल्टर एक जैसे हैं:

deal.name = ("test 1" OR "test 2")
deal.name = "test 1" OR deal.name = "test 2"

यहां दो मिलते-जुलते फ़िल्टर का एक और ज़्यादा जटिल उदाहरण दिया गया है:

deal.name = ("test 1" OR "test 2" AND (NOT "test3" OR "test4"))
(deal.name = "test 1" OR deal.name = "test 2") AND ( (NOT deal.name = "test3") OR deal.name = "test4")

वैल्यू लिटरल टाइप

कंपैरिज़न ऑपरेटर की दाईं ओर मौजूद वैल्यू को नंबर और स्ट्रिंग लिटरल में रखा जा सकता है.

नंबर

इस सेक्शन में न्यूमेरिक लिटरल वैल्यू दिखाने के बारे में बताया है.

Type परिभाषा उदाहरण
डबल-साइज़ बेड ऐसी कोई भी संख्या जिसमें दशमलव बिंदु होता है और उसके बिना ("-") चिह्न होता है उसे डबल माना जाता है.
  • 1234.567
  • -789.0123
Integer ऐसी किसी भी संख्या को एक पूर्णांक माना जाता है जिसमें दशमलव चिह्न नहीं होता और बिना चिह्न ("-") होता है.
  • 1234
  • -789

String

इस सेक्शन में उन टाइप के बारे में बताया गया है जिन्हें फ़िल्टर सिंटैक्स में स्ट्रिंग लिटरल के तौर पर लिखा जा सकता है.

Type परिभाषा उदाहरण
बूलियन अक्षर के किसी भी केस में TRUE या FALSE.
  • TRUE
  • True
  • "true"
Enum इन्यूमिरेशन टाइप लिटरल का नाम. Enum केस-सेंसिटिव होते हैं. FINALIZED और Finalized एक जैसे नहीं हैं
String ऐसी कोई भी स्ट्रिंग जिसमें कोड में UTF-8 कोड या 7-बिट ASCII टेक्स्ट मौजूद हो. एम्बेड किए गए कोटेशन मार्क को बैकस्लैश से एस्केप किया जाना चाहिए. स्ट्रिंग को खाली सफ़ेद जगह से बांटने के बाद, बिना कोट वाली स्ट्रिंग को सभी शब्दों में इंप्लिसिट `AND` माना जाता है.
  • name = "test \"double quotes\""
  • name=(ABC DEF),
    name=ABC AND name=DEF के बराबर है
टाइमस्टैंप ISO8601 स्टैंडर्ड फ़ॉर्मैट में एक स्ट्रिंग. "2014-10-02T15:01:23.045Z"

कंपैरिज़न ऑपरेटर

यहां कंपैरिज़न ऑपरेटर की जानकारी दी गई है:

  • इससे कम या इसके बराबर है: "<="
  • इससे छोटी है: "<"
  • इससे बड़ा या बराबर है: ">="
  • इससे बड़ा है: ">"
  • इसके बराबर नहीं है: "!="
  • इसके बराबर: "="
  • इसमें शामिल है: ":"

ये ऑपरेटर, DoubleClick, Integer, बूलियन, Enum, और टाइमस्टैंप वैल्यू टाइप पर लागू होते हैं.

ऑपरेटर है

इन फ़ील्ड में खास कार्रवाइयों के लिए, HAS ऑपरेटर (:) का इस्तेमाल किया जा सकता है:

सबस्ट्रिंग
जब किसी स्ट्रिंग कॉलम की वैल्यू की तुलना स्ट्रिंग के तौर पर करने के लिए, HAS ऑपरेटर का इस्तेमाल किया जाता है, तो ऑपरेटर एक सबस्ट्रिंग ऑपरेशन के तौर पर काम करेगा. उदाहरण के लिए, name:"abcd" उन सभी इंस्टेंस को दिखाता है जिनमें name, "abcd" वाली स्ट्रिंग है.
मौजूदगी की जांच
जब HAS ऑपरेटर को खास वर्ण * के साथ इस्तेमाल किया जाता है, तो HAS ऑपरेटर यह जांच करता है कि वैल्यू शून्य नहीं है. उदाहरण के लिए, name:* उन सभी इंस्टेंस को दिखाता है जिनमें name शून्य, मौजूद नहीं है या तय नहीं है.
जब HAS ऑपरेटर को बिना स्ट्रिंग वाली वैल्यू के साथ इस्तेमाल किया जाता है, तो यह EQUALS (=) ऑपरेटर की तरह ही काम करता है. उदाहरण के लिए, isCompleted:true ठीक उसी तरह काम करता है जैसे isCompleted = true करता है.
दोहराए गए फ़ील्ड

दोहराए गए एपीआई के रिसॉर्स फ़ील्ड पर फ़िल्टर करने के लिए, HAS (:) ऑपरेटर का इस्तेमाल किया जा सकता है. ऐसा तब तक किया जा सकता है, जब तक यहां दी गई शर्तें सही हैं:

  1. फ़ील्ड आइडेंटिफ़ायर पाथ में सिर्फ़ एक कॉम्पोनेंट दोहराया गया है
  2. फ़ील्ड पाथ का आखिरी आइडेंटिफ़ायर, स्केलर टाइप है

नेस्ट किए गए दोहराए गए फ़ील्ड पर फ़िल्टर करने की सुविधा काम नहीं करती.

यहां एक उदाहरण दिया गया है:

item में colors फ़ील्ड है, जिसमें "red", "blue", और "yellow" जैसे स्ट्रिंग वैल्यू होती हैं.

  • item.colors:("red"), colors फ़ील्ड में वे सभी आइटम दिखाता है जिनकी वैल्यू "red" है.
  • item.colors:("red" "yellow") वे सभी आइटम दिखाता है जिनके colors फ़ील्ड में "red" और "yellow", दोनों मौजूद हैं.
  • item.colors:("red" OR "yellow") वे सभी आइटम दिखाता है जिनके colors फ़ील्ड में "red" या "yellow" होता है.

item में दोहराया गया tools फ़ील्ड भी है, जो एक स्केलर फ़ील्ड shape वाला एक जटिल ऑब्जेक्ट है. इसकी वैल्यू "square" या "round" हो सकती हैं.

  • item.tools.shape:("square"), "square" आकार के टूल वाले सभी आइटम दिखाता है.
  • item.tools.shape:("square" "round"), वे सभी आइटम दिखाता है जिनमें "square" शेप वाला टूल और "round" शेप वाला टूल, दोनों मौजूद होते हैं.
  • item.tools.shape:("square" OR "round"), वे सभी आइटम दिखाता है जिनमें "square" आकार टूल या "round" आकार का टूल होता है.

नेस्ट किए गए फ़ील्ड में जानकारी नहीं भरी गई

नेस्ट किए गए फ़ील्ड, रूट-लेवल फ़ील्ड के सब-फ़ील्ड हैं. उदाहरण के लिए, item.tools.shape में मौजूद shape, items.tools का नेस्ट किया गया फ़ील्ड है.

रूट-लेवल के फ़ील्ड डिफ़ॉल्ट रूप से 'गलत' पर सेट होते हैं. नेस्ट किए गए फ़ील्ड में जानकारी अपने-आप नहीं भरी होती.

नेस्ट किए गए फ़ील्ड वाले ऑब्जेक्ट, नेगेटिव फ़िल्टर (!=) से नहीं दिखते.

यहां एक उदाहरण दिया गया है:

item.tools में size Enum होता है, जिसकी वैल्यू "SMALL", "MEDIUM" या "LARGE" पर सेट की जा सकती है.

अगर आपके पास ये आइटम हैं:

{
  "name": "item1",
  "tools": {
    "size": "MEDIUM"
  }
},
{
  "name": "item2",
  "tools": {
    "size": "LARGE"
  }
},
{
  "name": "item3"
}

नेगेटिव फ़िल्टर "tools.size != SMALL" वाले items.list को किए जाने पर, ये नतीजे दिखते हैं:

{
  "items": [
    {
      "name": "item1",
      "tools": {
        "size": "MEDIUM"
      }
    },
    {
      "name": "item2",
      "tools": {
        "size": "LARGE"
      }
    }
  ]
}

item.tools.size को item3 के लिए सेट नहीं किया गया है, इसलिए नेगेटिव फ़िल्टर item3 ऑब्जेक्ट नहीं दिखाता.

उदाहरण

उदाहरण ब्यौरा
externalDealId = "123456789" externalDealId का, जिसकी स्ट्रिंग वैल्यू "123456789" है.
advertiserId:93641

advertiserId = 93641
advertiserId की वैल्यू 93641 है.
isSetupComplete = true

isSetupComplete:TRUE

isSetupComplete = (True)
isSetupComplete का मान TRUE के बराबर है.
updateTime > "2018-02-14T11:09:19.378Z" updateTime, 14/02/2018 11:09:19.378 UTC के बाद का है
displayName = "proposal" AND proposalRevision = 3

displayName = "proposal" proposalRevision = 3
displayName स्ट्रिंग में "proposal" का एक जैसा वैल्यू है AND beginRevision 3 के बराबर है.
displayName = "proposal" OR proposalRevision = 3 displayName में "proposal" का स्ट्रिंग वैल्यू है या प्रपोज़ल में बदलाव की वैल्यू तीन के बराबर है.
NOT displayName = "proposal"

displayName != "proposal"
displayName, "प्रस्ताव" के बराबर नहीं है.
proposalState = (PROPOSED OR BUYER_ACCEPTED)

proposalState = PROPOSED OR proposalState = BUYER_ACCEPTED
proposalState का enum मान जो या तो PROPOSED या Buyer_COMMENT के बराबर है.
proposalState = (PROPOSED AND BUYER_ACCEPTED)

proposalState = (PROPOSED BUYER_ACCEPTED)

proposalState = PROPOSED AND proposalState = BUYER_ACCEPTED

proposalState = PROPOSED proposalState = BUYER_ACCEPTED
proposalState का Enum मान PROPOSED AND Buyer_DEADLINE के बराबर है
dealName = Test Deal INVALID एक्सप्रेशन
dealName = "Test Deal" dealName का मतलब "टेस्ट डील" के बराबर है.
dealName = (Test Deal) dealName, "टेस्ट" के बराबर है और "डील" के बराबर है.
dealName = ("Test1" OR "Test2")

dealName = "Test1" OR dealName = "Test2"
dealName, "Test1" के बराबर है या "Test2" के बराबर है.
dealName:* dealName is not null.
dealName:"test"

dealName:test
dealName में "test" सबस्ट्रिंग शामिल है.
dealName:("A B")

dealName:"A B"
dealName में "A B" सबस्ट्रिंग शामिल है.
dealName:(A B)

dealName:"A" AND dealName:"B"
dealName में "A" सबस्ट्रिंग और "B" सबस्ट्रिंग है.
dealName:("A" OR "B" AND "C")

dealName:("A" OR "B" "C")

dealName:"A" OR dealName:"B" AND dealName:"C"

dealName:"A" OR dealName:"B" dealName:"C"

(dealName:"A" OR dealName:"B") AND dealName:"C"

(dealName:"A" OR dealName:"B") dealName:"C"
dealName में या तो "A" OR "B" सबस्ट्रिंग है और इसमें सबस्ट्रिंग "C" भी है
dealName:("A B" C)

dealName:"A B" AND dealName:"C"
dealName में "A B" सबस्ट्रिंग है. साथ ही, "C" सबस्ट्रिंग भी है.
dealName:("A B" OR C D) dealName में या तो "A B" या "C" सबस्ट्रिंग है और उसमें सबस्ट्रिंग "D" भी है.
dealName:(NOT "A" B)

NOT dealName:"A" AND dealName:"B"

(NOT dealName:"A") AND dealName:"B"

(NOT dealName:"A") dealName:"B"
dealName में कोई सबस्ट्रिंग "A" नहीं है. साथ ही, उसमें "B" सबस्ट्रिंग भी है.
dealName:(NOT "A" OR "B")

NOT dealName:"A" OR dealName:"B"
(NOT dealName:"A") OR dealName:"B"
dealName में कोई सबस्ट्रिंग "A" नहीं है या उसमें सबस्ट्रिंग "B" है.