Connector SDK और Google Cloud Search API की मदद से, Cloud Search इंडेक्सिंग कतारें बनाई जा सकती हैं. इनका इस्तेमाल ये काम करने के लिए किया जाता है:
हर दस्तावेज़ की स्थिति (स्टेटस, हैश वैल्यू वगैरह) को बनाए रखें. इसका इस्तेमाल, अपने इंडेक्स को अपनी रिपॉज़िटरी के साथ सिंक करने के लिए किया जा सकता है.
इस कुकी का इस्तेमाल, उन आइटम की सूची को बनाए रखने के लिए किया जाता है जिन्हें ट्रैवर्सल प्रोसेस के दौरान खोजा गया है और इंडेक्स किया जाना है.
सामान की स्थिति के आधार पर, कतारों में मौजूद सामान को प्राथमिकता दें.
बेहतर इंटिग्रेशन के लिए, स्थिति के बारे में अतिरिक्त जानकारी बनाए रखें. जैसे, चेकपॉइंट, बदलाव का टोकन वगैरह.
कतार, इंडेक्स किए गए आइटम को असाइन किया गया लेबल होता है. जैसे, डिफ़ॉल्ट कतार के लिए "डिफ़ॉल्ट" या कतार B के लिए "B".
स्थिति और प्राथमिकता
किसी दस्तावेज़ की प्राथमिकता, उसके ItemStatus कोड के आधार पर तय की जाती है. नीचे दिए गए ItemStatus कोड, प्राथमिकता के क्रम में दिए गए हैं. इसका मतलब है कि सबसे पहले इस कोड को हैंडल किया जाएगा और सबसे आखिर में इस कोड को हैंडल किया जाएगा:
ERROR- इंडेक्सिंग की प्रोसेस के दौरान, आइटम में एसिंक्रोनस गड़बड़ी हुई है. इसलिए, इसे फिर से इंडेक्स करने की ज़रूरत है.MODIFIED- ऐसा आइटम जिसे पहले इंडेक्स किया गया था. हालांकि, पिछली बार इंडेक्स करने के बाद से, रिपॉज़िटरी में इसमें बदलाव किया गया है.NEW_ITEM- वह आइटम जिसे इंडेक्स नहीं किया गया है.ACCEPTED- ऐसा दस्तावेज़ जिसे पहले इंडेक्स किया गया था और पिछली बार इंडेक्स किए जाने के बाद से, रिपॉज़िटरी में उसमें कोई बदलाव नहीं हुआ है.
जब किसी कतार में मौजूद दो आइटम का स्टेटस एक जैसा होता है, तो उन आइटम को ज़्यादा प्राथमिकता दी जाती है जो कतार में सबसे ज़्यादा समय से मौजूद हैं.
किसी नए या बदले गए आइटम को इंडेक्स करने के लिए, इंडेक्सिंग कतारों का इस्तेमाल करने के बारे में खास जानकारी
पहली इमेज में, इंडेक्सिंग की कतार का इस्तेमाल करके, नए या बदले गए आइटम को इंडेक्स करने का तरीका दिखाया गया है. इन चरणों में, REST API कॉल दिखाए गए हैं. एसडीके के मिलते-जुलते कॉल के लिए, कतार से जुड़ी कार्रवाइयां (कनेक्टर एसडीके) पर जाएं.
कॉन्टेंट कनेक्टर, आइटम (मेटाडेटा और हैश) को इंडेक्सिंग क्यू में पुश करने के लिए
items.pushका इस्तेमाल करता है, ताकि आइटम की स्थिति (MODIFIED,NEW_ITEM,DELETED) तय की जा सके. खास तौर पर:- डेटा पुश करते समय, कनेक्टर में पुश
typeयाcontentHashशामिल होता है. - अगर कनेक्टर में
typeशामिल नहीं है, तो Cloud Search आइटम की स्थिति का पता लगाने के लिए,contentHashका इस्तेमाल अपने-आप करता है. - अगर आइटम की जानकारी नहीं है, तो आइटम का स्टेटस
NEW_ITEMपर सेट हो जाता है. - अगर आइटम मौजूद है और हैश वैल्यू मेल खाती हैं, तो स्टेटस को
ACCEPTEDके तौर पर सेट किया जाता है. - अगर आइटम मौजूद है और हैश अलग-अलग हैं, तो स्टेटस
MODIFIEDहो जाता है.
किसी आइटम की स्थिति का पता कैसे लगाया जाता है, इस बारे में ज़्यादा जानने के लिए, Cloud Search का इस्तेमाल शुरू करने से जुड़े ट्यूटोरियल में GitHub रिपॉज़िटरी को ट्रैवर्स करने के सैंपल कोड पर जाएं.
आम तौर पर, पुश की सुविधा, कनेक्टर में कॉन्टेंट ट्रैवर्सल और/या बदलाव का पता लगाने की प्रोसेस से जुड़ी होती है.
- डेटा पुश करते समय, कनेक्टर में पुश
कॉन्टेंट कनेक्टर, इंडेक्स किए जाने वाले आइटम का पता लगाने के लिए, कतार को पोल करने के लिए
items.pollका इस्तेमाल करता है. Cloud Search, कनेक्टर को बताता है कि किन आइटम को इंडेक्स करने की सबसे ज़्यादा ज़रूरत है. इन्हें सबसे पहले स्टेटस कोड के हिसाब से और फिर क्वेरी में लगने वाले समय के हिसाब से क्रम में लगाया जाता है.कनेक्टर, इन आइटम को रिपॉज़िटरी से वापस पाता है और इंडेक्स एपीआई अनुरोध बनाता है.
कनेक्टर, आइटम को इंडेक्स करने के लिए
items.indexका इस्तेमाल करता है. आइटम कोACCEPTEDस्थिति में तब ही रखा जाता है, जब Cloud Search आइटम को प्रोसेस कर लेता है.
अगर कोई आइटम अब रिपॉज़िटरी में मौजूद नहीं है, तो कनेक्टर उसे मिटा भी सकता है. इसके अलावा, अगर किसी आइटम में बदलाव नहीं किया गया है या सोर्स रिपॉज़िटरी में कोई गड़बड़ी है, तो कनेक्टर उसे फिर से पुश कर सकता है. आइटम मिटाने के बारे में जानकारी के लिए, अगला सेक्शन देखें.
किसी आइटम को मिटाने के लिए इंडेक्सिंग कतारों का इस्तेमाल करने की खास जानकारी
पूरी तरह से ट्रैवर्स करने की रणनीति, आइटम को इंडेक्स करने और आइटम हटाए जाने का पता लगाने के लिए, दो-कतार वाली प्रोसेस का इस्तेमाल करती है. दूसरी इमेज में, इंडेक्सिंग की दो कतारों का इस्तेमाल करके किसी आइटम को मिटाने का तरीका दिखाया गया है. खास तौर पर, दूसरी इमेज में फ़ुल-ट्रैवर्सल की रणनीति का इस्तेमाल करके, दूसरे ट्रैवर्सल को दिखाया गया है. इन चरणों में, REST API कॉल का इस्तेमाल किया जाता है. एसडीके कॉल के बराबर के लिए, Queue operations (Connector SDK) देखें.
शुरुआती ट्रैवर्सल पर, कॉन्टेंट कनेक्टर
items.pushका इस्तेमाल करके, आइटम (मेटाडेटा और हैश) को इंडेक्सिंग की कतार में डालता है. "कतार A" मेंNEW_ITEMके तौर पर, क्योंकि यह कतार में मौजूद नहीं है. हर आइटम को "A" लेबल असाइन किया गया है, जो "कतार A" के लिए है. कॉन्टेंट को Cloud Search में इंडेक्स किया जाता है.कॉन्टेंट कनेक्टर, इंडेक्स किए जाने वाले आइटम का पता लगाने के लिए,
items.pollका इस्तेमाल करके, क्यू ए को पोल करता है. Cloud Search, कनेक्टर को बताता है कि किन आइटम को इंडेक्स करने की सबसे ज़्यादा ज़रूरत है. इन्हें सबसे पहले स्टेटस कोड के हिसाब से और फिर क्वेरी में लगने वाले समय के हिसाब से क्रम में लगाया जाता है.कनेक्टर, इन आइटम को रिपॉज़िटरी से वापस पाता है और इंडेक्स एपीआई अनुरोध बनाता है.
कनेक्टर, आइटम को इंडेक्स करने के लिए
items.indexका इस्तेमाल करता है. आइटम कोACCEPTEDस्थिति में तब ही रखा जाता है, जब Cloud Search आइटम को प्रोसेस कर लेता है.deleteQueueItemsतरीके को "queue B" पर कॉल किया जाता है. हालांकि, किसी भी आइटम को B क्यू में नहीं भेजा गया है. इसलिए, कुछ भी नहीं मिटाया जा सकता.दूसरे फ़ुल ट्रैवर्सल में, कॉन्टेंट कनेक्टर इन चीज़ों का इस्तेमाल करता है
items.pushताकि आइटम (मेटाडेटा और हैश) को B क्यू में भेजा जा सके:- पुश करने पर, कनेक्टर में पुश
typeयाcontentHashशामिल होता है. - अगर कनेक्टर में
typeशामिल नहीं है, तो Cloud Search आइटम की स्थिति का पता लगाने के लिए,contentHashका इस्तेमाल अपने-आप करता है. - अगर आइटम की जानकारी नहीं है, तो आइटम का स्टेटस
NEW_ITEMपर सेट हो जाता है. साथ ही, कतार का लेबल बदलकर "B" हो जाता है. - अगर आइटम मौजूद है और हैश वैल्यू मेल खाती हैं, तो स्टेटस को
ACCEPTEDके तौर पर सेट किया जाता है. साथ ही, कतार के लेबल को "B" में बदल दिया जाता है. - अगर आइटम मौजूद है और हैश अलग-अलग हैं, तो स्टेटस
MODIFIEDहो जाता है. साथ ही, कतार का लेबल बदलकर "B" हो जाता है.
- पुश करने पर, कनेक्टर में पुश
कॉन्टेंट कनेक्टर, इंडेक्स किए जाने वाले आइटम का पता लगाने के लिए, कतार को पोल करने के लिए
items.pollका इस्तेमाल करता है. Cloud Search, कनेक्टर को बताता है कि किन आइटम को इंडेक्स करने की सबसे ज़्यादा ज़रूरत है. इन्हें सबसे पहले स्टेटस कोड के हिसाब से और फिर क्वेरी में लगने वाले समय के हिसाब से क्रम में लगाया जाता है.कनेक्टर, इन आइटम को रिपॉज़िटरी से वापस पाता है और इंडेक्स एपीआई अनुरोध बनाता है.
कनेक्टर, आइटम को इंडेक्स करने के लिए
items.indexका इस्तेमाल करता है. कोई आइटमACCEPTEDस्थिति में तब ही आता है, जब Cloud Search उस आइटम को प्रोसेस कर लेता है.आखिर में,
deleteQueueItemsको क्यू A पर कॉल किया जाता है, ताकि पहले से इंडेक्स किए गए उन सभी CCloud Search आइटम को मिटाया जा सके जिन पर अब भी क्यू "A" का लेबल लगा है.इसके बाद, इंडेक्स करने के लिए इस्तेमाल की जाने वाली कतार और मिटाने के लिए इस्तेमाल की जाने वाली कतार को बदल दिया जाता है.
Queue operations (Connector SDK)
Content Connector SDK, आइटम को किसी कतार में पुश करने और कतार से आइटम खींचने के लिए ऑपरेशन उपलब्ध कराता है.
किसी आइटम को पैकेज करने और उसे किसी कतार में भेजने के लिए, pushItems बिल्डर क्लास का इस्तेमाल करें.
प्रोसेसिंग के लिए, किसी कतार से आइटम निकालने के लिए आपको कुछ भी खास करने की ज़रूरत नहीं है. इसके बजाय, SDK टूल, Repository क्लास के getDoc तरीके का इस्तेमाल करके, प्राथमिकता के क्रम में, कतार से आइटम अपने-आप खींच लेता है.
कतार से जुड़े ऑपरेशन (REST API)
REST API, किसी क्यू में आइटम भेजने और उससे आइटम पाने के लिए, ये दो तरीके उपलब्ध कराता है:
- किसी आइटम को क्यू में पुश करने के लिए,
Items.pushका इस्तेमाल करें. - कतार में मौजूद आइटम को पोल करने के लिए,
Items.pollका इस्तेमाल करें.
इंडेक्सिंग के दौरान आइटम को कतार में भेजने के लिए, Items.index का भी इस्तेमाल किया जा सकता है. इंडेक्सिंग के दौरान, जिन आइटम को सूची में शामिल किया जाता है उनके लिए type की ज़रूरत नहीं होती. साथ ही, उन्हें ACCEPTED स्टेटस अपने-आप असाइन हो जाता है.
Items.push
Items.push
मेथड, आईडी को सूची में जोड़ता है. इस तरीके को किसी खास type वैल्यू के साथ कॉल किया जा सकता है. इससे पुश ऑपरेशन का नतीजा तय होता है. type वैल्यू की सूची के लिए, Items.push तरीके में item.type फ़ील्ड देखें.
नया आईडी पुश करने पर, NEW_ITEM
ItemStatus
कोड के साथ एक नई एंट्री जुड़ जाती है.
वैकल्पिक पेलोड हमेशा सेव किया जाता है. इसे ओपेक वैल्यू के तौर पर माना जाता है और Items.poll से वापस भेजा जाता है.
जब किसी आइटम के लिए पोल किया जाता है, तो उसे आरक्षित कर दिया जाता है. इसका मतलब है कि Items.poll को किसी अन्य कॉल के ज़रिए, उसे वापस नहीं किया जा सकता.
NOT_MODIFIED, REPOSITORY_ERROR या REQUEUE के तौर पर type के साथ Items.push का इस्तेमाल करने से, पोल की गई एंट्री अनरिज़र्व हो जाती हैं. आरक्षित और बिना आरक्षित की गई एंट्री के बारे में ज़्यादा जानकारी के लिए, Items.poll सेक्शन देखें.
हैश के साथ Items.push
Google Cloud Search API, Items.index अनुरोधों पर मेटाडेटा और कॉन्टेंट हैश वैल्यू तय करने की सुविधा देता है. type तय करने के बजाय, मेटाडेटा और/या कॉन्टेंट हैश वैल्यू को पुश अनुरोध के साथ तय किया जा सकता है. Cloud Search इंडेक्सिंग की प्रोसेस में शामिल क्यू, दी गई हैश वैल्यू की तुलना, डेटा सोर्स में मौजूद आइटम के साथ उपलब्ध सेव की गई वैल्यू से करता है. अगर वैल्यू मेल नहीं करती है, तो उस एंट्री को MODIFIED के तौर पर मार्क किया जाता है. अगर इंडेक्स में कोई मिलता-जुलता आइटम मौजूद नहीं है, तो स्टेटस NEW_ITEM होता है.
Items.poll
Items.poll तरीके से, सबसे ज़्यादा प्राथमिकता वाली एंट्री को वापस पाया जाता है. अनुरोध की गई और दिखाई गई स्टेटस वैल्यू से, अनुरोध की गई प्राथमिकता वाली कतारों के स्टेटस या दिखाए गए आईडी के स्टेटस का पता चलता है.
डिफ़ॉल्ट रूप से, प्राथमिकता के आधार पर, किसी भी सेक्शन की एंट्री वापस की जा सकती हैं. हर वापस लाई गई एंट्री रिज़र्व होती है. साथ ही, जब तक इनमें से कोई एक शर्त पूरी नहीं हो जाती, तब तक Items.poll को किए गए अन्य कॉल से इसे वापस नहीं लाया जाता:
- बुकिंग का समय खत्म हो जाता है.
Items.indexने एंट्री को फिर से लाइन में लगा दिया है.Items.pushकोNOT_MODIFIED,REPOSITORY_ERRORयाREQUEUEकीtypeवैल्यू के साथ कॉल किया जाता है.