कॉन्टेंट कनेक्टर बनाना

कॉन्टेंट कनेक्टर एक ऐसा सॉफ़्टवेयर प्रोग्राम है जिसका इस्तेमाल एंटरप्राइज़ के रिपॉज़िटरी को मैनेज कर सकता है और डेटा सोर्स को पॉप्युलेट कर सकता है. Google ये सुविधाएं देता है कॉन्टेंट कनेक्टर डेवलप करने के विकल्प:

  • कॉन्टेंट कनेक्टर का SDK टूल. अगर आपको प्रोग्रामिंग करना है, तो यह एक अच्छा विकल्प है जावा में. Content Connector SDK टूल एक रैपर है REST API, जिससे आपको तेज़ी से कनेक्टर बनाने की सुविधा मिलती है. कॉन्टेंट बनाने के लिए SDK टूल का इस्तेमाल करने वाले कनेक्टर के बारे में जानने के लिए, Content Connector SDK टूल का इस्तेमाल करके कॉन्टेंट कनेक्टर बनाएं.

  • कम लेवल का REST API या एपीआई लाइब्रेरी. इन विकल्पों का इस्तेमाल करें, अगर आपको या आपका कोड बेस REST API या लाइब्रेरी. REST API का इस्तेमाल करके कॉन्टेंट कनेक्टर बनाने के लिए, यहां जाएं: से REST API का इस्तेमाल करके कॉन्टेंट कनेक्टर बनाएं.

किसी सामान्य कॉन्टेंट कनेक्टर में ये काम किए जाते हैं:

  1. कॉन्फ़िगरेशन पैरामीटर को पढ़ता और उन्हें प्रोसेस करता है.
  2. यह इंडेक्स करने लायक डेटा के अलग-अलग हिस्सों को दिखाता है, जिन्हें "items" कहा जाता है. तीसरे पक्ष की ओर से डेटा स्टोर करने की जगह.
  3. यह ACL, मेटाडेटा, और कॉन्टेंट डेटा को इंडेक्स किए जा सकने वाले आइटम में जोड़ता है.
  4. आइटम को Cloud Search डेटा सोर्स में इंडेक्स करता है.
  5. (ज़रूरी नहीं) तीसरे पक्ष के कॉन्टेंट की सूचनाओं में बदलाव करने के लिए सुनता है डेटा स्टोर करने की जगह. बदलाव की सूचनाओं को इंडेक्स करने के अनुरोधों में बदल दिया जाता है, ताकि Cloud Search के डेटा सोर्स को तीसरे पक्ष की, डेटा स्टोर करने की जगह के साथ सिंक करना होगा. कॉन्टेंट बनाने कनेक्टर यह टास्क सिर्फ़ तब करता है, जब रिपॉज़िटरी में बदलाव का पता लगाने की सुविधा काम करती हो.

Content Connector SDK टूल का इस्तेमाल करके कॉन्टेंट कनेक्टर बनाएं

नीचे दिए गए सेक्शन में, कॉन्टेंट कनेक्टर SDK टूल.

डिपेंडेंसी सेट अप करें

SDK टूल का इस्तेमाल करने के लिए, आपको अपनी बिल्ड फ़ाइल में कुछ डिपेंडेंसी शामिल करनी होंगी. क्लिक करें अपने बिल्ड एनवायरमेंट की डिपेंडेंसी देखने के लिए, नीचे दिए गए टैब पर क्लिक करें:

Maven

<dependency>
<groupId>com.google.enterprise.cloudsearch</groupId>
<artifactId>google-cloudsearch-indexing-connector-sdk</artifactId>
<version>v1-0.0.3</version>
</dependency>

ग्रेडल

compile group: 'com.google.enterprise.cloudsearch',
        name: 'google-cloudsearch-indexing-connector-sdk',
        version: 'v1-0.0.3'

अपना कनेक्टर कॉन्फ़िगरेशन बनाएं

हर कनेक्टर की एक कॉन्फ़िगरेशन फ़ाइल होती है, जिसमें वे पैरामीटर होते हैं जिनका इस्तेमाल कनेक्टर का इस्तेमाल करें, जैसे कि रिपॉज़िटरी का आईडी. पैरामीटर इस तरह परिभाषित किए गए हैं की-वैल्यू पेयर, जैसे कि api.sourceId=1234567890abcdef.

Google Cloud Search SDK टूल में, Google से दिए गए कई कॉन्फ़िगरेशन शामिल हैं सभी कनेक्टर में इस्तेमाल होने वाले पैरामीटर. आपको नीचे दी गई जानकारी का एलान करना होगा आपकी कॉन्फ़िगरेशन फ़ाइल में Google से दिए गए पैरामीटर:

  • कॉन्टेंट कनेक्टर के लिए, आपको api.sourceId का एलान करना होगा और api.serviceAccountPrivateKeyFile, क्योंकि ये पैरामीटर जगह की पहचान करते हैं आपके रिपॉज़िटरी (डेटा स्टोर करने की जगह) को ऐक्सेस करने के लिए ज़रूरी है.
  • आइडेंटिटी कनेक्टर के लिए, आपको api.identitySourceId का एलान करना होगा पैरामीटर आपके बाहरी आइडेंटिटी सोर्स की जगह की पहचान करता है. अगर आप उपयोगकर्ताओं को सिंक करते समय, आपको api.customerId के लिए यूनीक आईडी के तौर पर भी एलान करना होगा आपके एंटरप्राइज़ के Google Workspace खाते से साइन इन करें.

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

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

कॉन्फ़िगरेशन फ़ाइल को कनेक्टर में पास करें

कॉन्फ़िगरेशन फ़ाइल को अपनेconfig कनेक्टर. शुरू करते समय, -D आर्ग्युमेंट का इस्तेमाल करके प्रॉपर्टी को सेट किया जा सकता है कनेक्टर. उदाहरण के लिए, नीचे दिया गया निर्देश कनेक्टर को शुरू करता है MyConfig.properties कॉन्फ़िगरेशन फ़ाइल के साथ:

java -classpath myconnector.jar;... -Dconfig=MyConfig.properties MyConnector

अगर यह आर्ग्युमेंट मौजूद नहीं है, तो SDK टूल, डिफ़ॉल्ट कॉन्फ़िगरेशन को ऐक्सेस करने की कोशिश करता है connector-config.properties नाम वाली फ़ाइल.

अपनी ट्रैवर्सल रणनीति तय करें

कॉन्टेंट कनेक्टर का मुख्य काम, रिपॉज़िटरी और अपना डेटा इंडेक्स करता है. आपको इनके आधार पर एक ट्रैवर्सल रणनीति लागू करनी होगी: आपकी रिपॉज़िटरी में डेटा का लेआउट. अपने हिसाब से रणनीति बनाई जा सकती है या नीचे दी गई रणनीतियों का इस्तेमाल किया जा सकता है:

पूरी ट्रैवर्सल रणनीति

एक पूरी ट्रैवर्सल रणनीति, डेटा स्टोर करने की पूरी जगह को स्कैन करती है और किसी चीज़ को ब्लाइंड करके इंडेक्स करती है हर आइटम. इस रणनीति का इस्तेमाल आम तौर पर तब किया जाता है, जब आपके पास डेटा स्टोर करने की जगह कम होती है और हर बार इंडेक्स करने पर पूरा ट्रैवर्सल करने का खर्च वहन कर सकते हैं.

यह ट्रैवर्सल रणनीति उन छोटे डेटा स्टोर करने की जगहों के लिए सही है जहां ज़्यादातर स्टैटिक, गैर-पदानुक्रमिक, डेटा. आप इस ट्रैवर्सल रणनीति का भी इस्तेमाल कर सकते हैं जब बदलाव का पता लगाना मुश्किल हो या डेटा स्टोर करने की जगह के साथ काम न करता हो.

लिस्ट ट्रैवर्सल रणनीति

लिस्ट ट्रैवर्सल रणनीति की मदद से, डेटा स्टोर करने की पूरी जगह को स्कैन किया जाता है. इसमें, सभी चाइल्ड भी शामिल होते हैं नोड से हर आइटम की स्थिति तय की जा सकती है. इसके बाद, कनेक्टर एक सेकंड पास करें और सिर्फ़ उन आइटम को इंडेक्स करता है जो नए हैं या पिछले इंडेक्स करना. आम तौर पर, इस रणनीति का इस्तेमाल कन्वर्ज़न बढ़ाने के लिए किया जाता है मौजूदा इंडेक्स में अपडेट करता है (हर बार पूरा ट्रैवर्सल करने के बजाय इंडेक्स को अपडेट करने का समय तय करता है).

यह ट्रैवर्सल रणनीति तब काम आती है, जब बदलाव का पता लगाना मुश्किल हो या डेटा स्टोर करने की जगह के साथ काम नहीं करता, आपके पास बिना हैरारकी वाला डेटा है, और बहुत बड़े डेटा सेट पर काम करते हैं.

ग्राफ़ ट्रैवर्सल

ग्राफ़ ट्रैवर्सल रणनीति, उस पूरे पैरंट नोड को स्कैन करती है जो तय करता है कि हर आइटम की स्थिति. इसके बाद, कनेक्टर दूसरा पास लेता है और सिर्फ़ रूट नोड में मौजूद आइटम नए हैं या उन्हें पिछली बार इंडेक्स होने के बाद अपडेट किया गया है. आखिर में, कनेक्टर कोई भी चाइल्ड आईडी पास करता है और फिर चाइल्ड नोड में आइटम इंडेक्स करता है जो नई हैं या जिन्हें अपडेट किया गया है. यह कनेक्टर इसके ज़रिए बार-बार चलता रहता है सभी चाइल्ड नोड तब तक उपलब्ध होंगे, जब तक सभी आइटम का पता नहीं चल जाता. आम तौर पर, ऐसा ट्रैवर्सल का इस्तेमाल, हैरारकी के हिसाब से स्टोर करने की ऐसी जगहों के लिए किया जाता है जहां सभी आईडी की लिस्टिंग व्यावहारिक.

यह रणनीति तब काम आती है, जब आपके पास हैरारकी के हिसाब से डेटा हो जिसे जैसे, डायरेक्ट्री या वेब पेजों की सीरीज़.

इनमें से हर ट्रैवर्सल रणनीति को एक टेंप्लेट कनेक्टर लागू करता है क्लास का इस्तेमाल किया जा सकता है. हालांकि, अपनी ट्रैवर्सल रणनीति को खुद लागू किया जा सकता है, लेकिन ये टेंप्लेट से आपके कनेक्टर के डेवलपमेंट में तेज़ी आती है. यहां की यात्रा पर हूं एक टेंप्लेट का इस्तेमाल करके कनेक्टर बनाएं, जिसे आपकी ट्रैवर्सल रणनीति:

टेंप्लेट क्लास का इस्तेमाल करके पूरा ट्रेवर्सल कनेक्टर बनाएं

दस्तावेज़ों का यह अनुभाग FullTraversalSample का उदाहरण.

कनेक्टर का एंट्री पॉइंट लागू करें

कनेक्टर का एंट्री पॉइंट main() तरीका. इस तरीके का मुख्य टास्क, Application क्लास और इसके शुरू start() का तरीका बताया गया है.

कॉल करने से पहले application.start() का इस्तेमाल करें IndexingApplication.Builder इंस्टैंशिएट करने के लिए क्लास FullTraversalConnector टेम्प्लेट. कॉन्टेंट बनाने FullTraversalConnector स्वीकार करता है Repository ऑब्जेक्ट है, जिसकी विधियों को आपने लागू किया है. नीचे दिया गया कोड स्निपेट दिखाता है कि main() तरीका लागू करने के लिए:

FullTraversalSample.java
/**
 * This sample connector uses the Cloud Search SDK template class for a full
 * traversal connector.
 *
 * @param args program command line arguments
 * @throws InterruptedException thrown if an abort is issued during initialization
 */
public static void main(String[] args) throws InterruptedException {
  Repository repository = new SampleRepository();
  IndexingConnector connector = new FullTraversalConnector(repository);
  IndexingApplication application = new IndexingApplication.Builder(connector, args).build();
  application.start();
}

पर्दे के पीछे, SDK टूल initConfig() आपके कनेक्टर के main() तरीके से किए गए कॉल के बाद Application.build. कॉन्टेंट बनाने initConfig() तरीका ये काम करता है:

  1. Configuation.isInitialized() कैसे पक्का किया जा सकता है कि Configuration शुरू नहीं किया गया है.
  2. Google से दिए गए मुख्य-वैल्यू के साथ Configuration ऑब्जेक्ट को शुरू करता है पेयर. हर की-वैल्यू पेयर, ConfigValue ऑब्जेक्ट को Configuration ऑब्जेक्ट में डालें.

Repository इंटरफ़ेस को लागू करना

Repository ऑब्जेक्ट का एकमात्र मकसद ट्रैवर्सल करना और डेटा स्टोर करने की जगह के आइटम को इंडेक्स करना. इसका इस्तेमाल करते समय टेंप्लेट इस्तेमाल किया है, तो आपको Repository में सिर्फ़ कुछ तरीकों को बदलना होगा इंटरफ़ेस पर क्लिक करें. आप जिन तरीकों को ओवरराइड करते हैं वे का इस्तेमाल करें. FullTraversalConnector की जानकारी का इस्तेमाल करके, इन तरीकों को ओवरराइड करें:

  • कॉन्टेंट बनाने init() तरीका. डेटा रिपॉज़िटरी (डेटा स्टोर की जगह) को सेट-अप करने और शुरू करने के लिए, init() तरीका.

  • कॉन्टेंट बनाने getAllDocs() तरीका. डेटा रिपॉज़िटरी में मौजूद सभी आइटम को देखने और इंडेक्स करने के लिए, getAllDocs() तरीका. शेड्यूल किए गए हर ट्रैवर्सल के लिए इस तरीके को एक बार कॉल किया जाता है (जैसा कि आपके कॉन्फ़िगरेशन में बताया गया है).

  • (ज़रूरी नहीं) getChanges() तरीका. अगर आपकी रिपॉज़िटरी में बदलाव का पता लगाने की सुविधा काम करती है, तो getChanges() तरीका. शेड्यूल की गई हर बढ़ोतरी के लिए, इस तरीके को एक बार कॉल किया जाता है ट्रैवर्सल (जैसा कि आपके कॉन्फ़िगरेशन में बताया गया है) और बदलाव किए गए आइटम वापस पाने के लिए उन्हें इंडेक्स न करें.

  • (ज़रूरी नहीं) close() तरीका. अगर आपको रिपॉज़िटरी (डेटा स्टोर की जगह) में क्लीनअप करना है, तो close() को बदलें तरीका. कनेक्टर के बंद होने के दौरान, इस तरीके को एक बार कॉल किया जाता है.

हर तरीके के लिए Repository ऑब्जेक्ट कुछ ऐसा दिखाता है ApiOperation ऑब्जेक्ट है. ApiOperation ऑब्जेक्ट, सिंगल या शायद एक से ज़्यादा, IndexingService.indexItem() कॉल करता है.

कस्टम कॉन्फ़िगरेशन पैरामीटर पाएं

अपने कनेक्टर के कॉन्फ़िगरेशन को मैनेज करने के लिए, आपको कस्टम पैरामीटर Configuration ऑब्जेक्ट है. यह टास्क आम तौर पर इसमें किया जाता है Repository क्लास का init() तरीका.

Configuration क्लास में अलग-अलग तरह का डेटा पाने के कई तरीके हैं . हर तरीका, ConfigValue ऑब्जेक्ट दिखाता है. इसके बाद, आपको ConfigValue ऑब्जेक्ट का इस्तेमाल करें get() पाने का तरीका बताया गया है. यहां दिया गया स्निपेट: FullTraversalSample को वापस लाने का तरीका दिखाता है Configuration ऑब्जेक्ट से मिला, कस्टम पूर्णांक की वैल्यू:

FullTraversalSample.java
@Override
public void init(RepositoryContext context) {
  log.info("Initializing repository");
  numberOfDocuments = Configuration.getInteger("sample.documentCount", 10).get();
}

कई वैल्यू वाला पैरामीटर पाने और पार्स करने के लिए, इनमें से किसी एक वैल्यू का इस्तेमाल करें डेटा को अलग-अलग हिस्सों में पार्स करने के लिए, Configuration क्लास के टाइप पार्सर. ट्यूटोरियल कनेक्टर में नीचे दिया गया स्निपेट getMultiValue GitHub रिपॉज़िटरी के नामों की सूची पाने का तरीका:

GithubRepository.java
ConfigValue<List<String>> repos = Configuration.getMultiValue(
    "github.repos",
    Collections.emptyList(),
    Configuration.STRING_PARSER);

पूरा ट्रैवर्सल परफ़ॉर्म करें

सेटिंग में एडमिन के किए गए बदलाव getAllDocs() का इस्तेमाल करें. getAllDocs() तरीका, एक चेकपॉइंट स्वीकार करता है. Checkpoint का इस्तेमाल करके, किसी आइटम को प्रोसेस करने में रुकावट आनी चाहिए. आपके रिपॉज़िटरी में, यह तरीका अपनाएं getAllDocs():

  1. अनुमतियां सेट करें.
  2. उस आइटम के लिए मेटाडेटा सेट करें जिसे इंडेक्स किया जा रहा है.
  3. मेटाडेटा और आइटम को मिलाकर एक इंडेक्स करने की सुविधा बनाएं RepositoryDoc.
  4. इंडेक्स किए जा सकने वाले हर आइटम को, getAllDocs() से मिले इटरेटर में पैकेज करें तरीका. ध्यान दें कि getAllDocs() वास्तव में CheckpointCloseableIterable इसका बार-बार इस्तेमाल किया जा सकता है ApiOperation ऑब्जेक्ट हैं, जो एपीआई अनुरोध को दिखाने के लिए हर ऑब्जेक्ट को RepositoryDoc, जैसे कि इसे इंडेक्स करना.

अगर आइटम का सेट बहुत बड़ा है, तो एक कॉल में प्रोसेस नहीं किया जा सकता, तो CANNOT TRANSLATE hasMore(true) का इस्तेमाल करें.

किसी आइटम के लिए अनुमतियां सेट करना

उपयोगकर्ताओं की पहचान करने के लिए, आपका रिपॉज़िटरी (डेटा स्टोर करने की जगह) ऐक्सेस कंट्रोल लिस्ट (ACL) का इस्तेमाल करता है या वे ग्रुप जिनके पास किसी आइटम का ऐक्सेस है. एसीएल, ग्रुप या उपयोगकर्ताओं के लिए आईडी की सूची होती है जो आइटम को ऐक्सेस कर सकते हैं.

आपको डेटा स्टोर करने की जगह में इस्तेमाल किए जाने वाले ACL का डुप्लीकेट बनाना होगा, ताकि यह पक्का किया जा सके कि सिर्फ़ वे उपयोगकर्ता ही इस्तेमाल किए जा रहे हैं अगर आपके पास किसी आइटम का ऐक्सेस है, तो वह खोज के नतीजे में उस आइटम को देख सकता है. कॉन्टेंट बनाने किसी आइटम को इंडेक्स करते समय उसके लिए ACL को शामिल करना ज़रूरी है, ताकि Google Cloud Search के पास सही लेवल का ऐक्सेस देने के लिए ज़रूरी जानकारी हो आइटम.

Content Connector SDK टूल की मदद से, एसीएल क्लास और तरीकों का एक बेहतर सेट उपलब्ध कराया जाता है ज़्यादातर डेटा स्टोर करने की जगहों के ACL का मॉडल बनाते हैं. आपको इसमें हर आइटम के लिए ACL का विश्लेषण करना होगा और Google Cloud Search के लिए संबंधित ACL बनाएं. आइटम को इंडेक्स करें. अगर डेटा स्टोर करने की जगह का ACL, ACL जैसे सिद्धांतों का इस्तेमाल करता है हो सकता है कि ACL पेचीदा हो जाए. Google पर ज़्यादा जानकारी पाने के लिए, Cloud Search ACL, इसे देखें Google Cloud Search ACL.

ध्यान दें: Cloud Search इंडेक्स करने वाला एपीआई, सिंगल-डोमेन ACL काम करता है. इस पर काम नहीं होता का इस्तेमाल करने के लिए किया जा सकता है. इसका इस्तेमाल करें Acl.Builder क्लास का इस्तेमाल करें. यहां दिया गया कोड स्निपेट, पूरे ट्रैवर्सल सैंपल से, इसकी अनुमति देता है सभी उपयोगकर्ता या “प्रिंसिपल” (getCustomerPrincipal()) सभी आइटम के “पाठक” होने के लिए (.setReaders()) ध्यान दें.

FullTraversalSample.java
// Make the document publicly readable within the domain
Acl acl = new Acl.Builder()
    .setReaders(Collections.singletonList(Acl.getCustomerPrincipal()))
    .build();

डेटा स्टोर करने की जगह के लिए ACL को ठीक से मॉडल करने के लिए आपको ACL को समझना होगा. इसके लिए उदाहरण के लिए, हो सकता है कि आप किसी फ़ाइल सिस्टम में मौजूद फ़ाइलों को इंडेक्स कर रहे हों किसी तरह के इनहेरिटेंस मॉडल का इस्तेमाल करता है, जिसमें चाइल्ड फ़ोल्डर अनुमतियां इनहेरिट करता है . मॉडलिंग ACL इनहेरिटेंस के लिए अतिरिक्त जानकारी की आवश्यकता होती है इसमें शामिल किया गया Google Cloud Search एसीएल

किसी आइटम के लिए मेटाडेटा सेट करना

मेटाडेटा को Item ऑब्जेक्ट में सेव किया जाता है. Item बनाने के लिए, आपको इसकी ज़रूरत होगी कम से कम यूनीक स्ट्रिंग आईडी, आइटम टाइप, एसीएल, यूआरएल, और आइटम का वर्शन होना चाहिए. नीचे दिया गया कोड स्निपेट यह दिखाता है किItem IndexingItemBuilder हेल्पर क्लास

FullTraversalSample.java
// Url is required. Use google.com as a placeholder for this sample.
String viewUrl = "https://www.google.com";

// Version is required, set to current timestamp.
byte[] version = Longs.toByteArray(System.currentTimeMillis());

// Using the SDK item builder class to create the document with appropriate attributes
// (this can be expanded to include metadata fields etc.)
Item item = IndexingItemBuilder.fromConfiguration(Integer.toString(id))
    .setItemType(IndexingItemBuilder.ItemType.CONTENT_ITEM)
    .setAcl(acl)
    .setSourceRepositoryUrl(IndexingItemBuilder.FieldOrValue.withValue(viewUrl))
    .setVersion(version)
    .build();

इंडेक्स किया जा सकने वाला आइटम बनाना

आइटम के लिए मेटाडेटा सेट करने के बाद, आप वास्तविक इंडेक्स करने योग्य बना सकते हैं आइटम को RepositoryDoc.Builder क्लास. नीचे दिए गए उदाहरण में, इंडेक्स किया जा सकने वाला एक आइटम बनाने का तरीका बताया गया है.

FullTraversalSample.java
// For this sample, content is just plain text
String content = String.format("Hello world from sample doc %d", id);
ByteArrayContent byteContent = ByteArrayContent.fromString("text/plain", content);

// Create the fully formed document
RepositoryDoc doc = new RepositoryDoc.Builder()
    .setItem(item)
    .setContent(byteContent, IndexingService.ContentFormat.TEXT)
    .build();

RepositoryDoc एक तरह का ApiOperation है, जो IndexingService.indexItem() अनुरोध.

Google आपके यूआरएल पैरामीटर को कैसे इस्तेमाल करेगा, यह तय करने के लिए setRequestMode() तरीका RepositoryDoc.Builder क्लास का इस्तेमाल करें, ताकि इंडेक्स करने के अनुरोध की पहचान ASYNCHRONOUS या SYNCHRONOUS के तौर पर की जा सके:

ASYNCHRONOUS
एसिंक्रोनस मोड का इस्तेमाल करने पर, पेज को इंडेक्स करने में ज़्यादा समय लगता है और यह इंडेक्स करने के अनुरोधों के लिए, बड़े पैमाने पर डेटा इकट्ठा करने की सुविधा देता है. एसिंक्रोनस मोड है इसका सुझाव, पूरे डेटा स्टोर करने की जगह के शुरुआती इंडेक्स (बैकफ़िल) के लिए दिया जाता है.
SYNCHRONOUS
सिंक्रोनस मोड से, इंडेक्स करने के दौरान विज्ञापन दिखने में कम समय लगता है और सीमित थ्रूपुट कोटा को पूरा करता है. सिंक्रोनस मोड है अपडेट को इंडेक्स करने और रिपॉज़िटरी में बदलावों का सुझाव दिया जाता है. अगर आपने कोई जानकारी नहीं है, तो अनुरोध मोड डिफ़ॉल्ट रूप से SYNCHRONOUS में सेट हो जाता है.

इंडेक्स हो सकने वाले हर आइटम को इटरेटर में पैकेज करें

getAllDocs() तरीका, Iterator दिखाता है, खास तौर पर CheckpointCloseableIterable, में से RepositoryDoc ऑब्जेक्ट हैं. Google आपके यूआरएल पैरामीटर को कैसे इस्तेमाल करेगा, यह तय करने के लिए CheckpointClosableIterableImpl.Builder क्लास का इस्तेमाल करें. नीचे दिया गया कोड स्निपेट दिखाता है कि का इस्तेमाल करें.

FullTraversalSample.java
CheckpointCloseableIterable<ApiOperation> iterator =
  new CheckpointCloseableIterableImpl.Builder<>(allDocs).build();

एसडीके, इटरेटर के अंदर मौजूद हर इंडेक्स कॉल को एक्ज़ीक्यूट करता है.

अगले चरण

यहां दिए गए कुछ तरीके आज़माएं:

टेंप्लेट क्लास का इस्तेमाल करके सूची ट्रैवर्सल कनेक्टर बनाएं

Cloud Search इंडेक्स करने वाली सूची का इस्तेमाल, आईडी और हैश को होल्ड करने के लिए किया जाता है डेटा स्टोर करने की जगह में हर आइटम के लिए वैल्यू. लिस्ट ट्रैवर्सल कनेक्टर पुश करता है आइटम आईडी को Google Cloud Search इंडेक्स करने की सूची में जोड़ दिया जाता है और उन्हें एक बार में एक इंडेक्स करने में कितना समय लगेगा. Google Cloud Search, सूची बनाकर रखता है और आइटम की स्थिति तय करने के लिए, सूची में शामिल कॉन्टेंट की तुलना करें. जैसे, किसी आइटम के को डेटा स्टोर करने की जगह से मिटा दिया गया है. Cloud Search के बारे में ज़्यादा जानकारी पाने के लिए सूची को इंडेक्स करने के बारे में जानकारी, इसे देखें Cloud Search इंडेक्स करने की सूची.

दस्तावेज़ों का यह अनुभाग ListTraversalSample उदाहरण के लिए.

कनेक्टर का एंट्री पॉइंट लागू करें

कनेक्टर का एंट्री पॉइंट main() तरीका. इस तरीके का मुख्य टास्क, Application क्लास और इसके शुरू start() का तरीका बताया गया है.

कॉल करने से पहले application.start() का इस्तेमाल करें IndexingApplication.Builder इंस्टैंशिएट करने के लिए क्लास ListingConnector टेम्प्लेट. ListingConnector Repository ऑब्जेक्ट है, जिसकी विधियों को आपने लागू किया है. नीचे दिए गए स्निपेट में, ListingConnector और उससे जुड़े Repository को इंस्टैंशिएट करें:

ListTraversalSample.java
/**
 * This sample connector uses the Cloud Search SDK template class for a
 * list traversal connector.
 *
 * @param args program command line arguments
 * @throws InterruptedException thrown if an abort is issued during initialization
 */
public static void main(String[] args) throws InterruptedException {
  Repository repository = new SampleRepository();
  IndexingConnector connector = new ListingConnector(repository);
  IndexingApplication application = new IndexingApplication.Builder(connector, args).build();
  application.start();
}

पर्दे के पीछे, SDK टूल initConfig() आपके कनेक्टर के main() तरीके से किए गए कॉल के बाद Application.build. initConfig() तरीका:

  1. Configuation.isInitialized() कैसे पक्का किया जा सकता है कि Configuration शुरू नहीं किया गया है.
  2. Google से दिए गए मुख्य-वैल्यू के साथ Configuration ऑब्जेक्ट को शुरू करता है पेयर. हर की-वैल्यू पेयर, ConfigValue ऑब्जेक्ट को Configuration ऑब्जेक्ट में डालें.

Repository इंटरफ़ेस को लागू करना

Repository ऑब्जेक्ट का एकमात्र मकसद ट्रैवर्सल करना और डेटा स्टोर करने की जगह के आइटम को इंडेक्स करना. टेंप्लेट का इस्तेमाल करते समय, आपको सिर्फ़ इस बदलाव की ज़रूरत होगी कॉन्टेंट कनेक्टर बनाने के लिए Repository इंटरफ़ेस में कुछ खास तरीकों का इस्तेमाल करें. आप जिन तरीकों को ओवरराइड करते हैं वे आपकी इस्तेमाल की जाने वाली टेंप्लेट और ट्रैवर्सल रणनीति पर निर्भर करते हैं. ListingConnector इन तरीकों को बदलें:

  • कॉन्टेंट बनाने init() तरीका. डेटा रिपॉज़िटरी (डेटा स्टोर की जगह) को सेट-अप करने और शुरू करने के लिए, init() तरीका.

  • getIds() तरीका. डेटा स्टोर करने की जगह में सभी रिकॉर्ड के लिए, आईडी और हैश वैल्यू पाने के लिए, getIds() तरीके को बदलें.

  • getDoc() तरीका. इंडेक्स से नया आइटम जोड़ने, अपडेट करने, उसमें बदलाव करने या उसे मिटाने के लिए, getDoc() तरीका.

  • (ज़रूरी नहीं) getChanges() तरीका. अगर आपकी रिपॉज़िटरी में बदलाव का पता लगाने की सुविधा काम करती है, तो getChanges() तरीका. शेड्यूल की गई हर बढ़ोतरी के लिए, इस तरीके को एक बार कॉल किया जाता है ट्रैवर्सल (जैसा कि आपके कॉन्फ़िगरेशन में बताया गया है) और बदलाव किए गए आइटम वापस पाने के लिए उन्हें इंडेक्स न करें.

  • (ज़रूरी नहीं) close() तरीका. अगर आपको रिपॉज़िटरी (डेटा स्टोर की जगह) में क्लीनअप करना है, तो close() को बदलें तरीका. कनेक्टर के बंद होने के दौरान, इस तरीके को एक बार कॉल किया जाता है.

Repository ऑब्जेक्ट का हर तरीका कुछ ऐसा दिखाता है ApiOperation ऑब्जेक्ट है. ApiOperation ऑब्जेक्ट, सिंगल या शायद एक से ज़्यादा, IndexingService.indexItem() कॉल करता है.

कस्टम कॉन्फ़िगरेशन पैरामीटर पाएं

अपने कनेक्टर के कॉन्फ़िगरेशन को मैनेज करने के लिए, आपको कस्टम पैरामीटर Configuration ऑब्जेक्ट है. यह टास्क आम तौर पर इसमें किया जाता है Repository क्लास का init() तरीका.

Configuration क्लास में अलग-अलग तरह का डेटा पाने के कई तरीके हैं . हर तरीका, ConfigValue ऑब्जेक्ट दिखाता है. इसके बाद, आपको ConfigValue ऑब्जेक्ट का इस्तेमाल करें get() पाने का तरीका बताया गया है. यहां दिया गया स्निपेट: FullTraversalSample को वापस लाने का तरीका दिखाता है Configuration ऑब्जेक्ट से मिला, कस्टम पूर्णांक की वैल्यू:

FullTraversalSample.java
@Override
public void init(RepositoryContext context) {
  log.info("Initializing repository");
  numberOfDocuments = Configuration.getInteger("sample.documentCount", 10).get();
}

कई वैल्यू वाला पैरामीटर पाने और पार्स करने के लिए, इनमें से किसी एक वैल्यू का इस्तेमाल करें डेटा को अलग-अलग हिस्सों में पार्स करने के लिए, Configuration क्लास के टाइप पार्सर. ट्यूटोरियल कनेक्टर में नीचे दिया गया स्निपेट getMultiValue GitHub रिपॉज़िटरी के नामों की सूची पाने का तरीका:

GithubRepository.java
ConfigValue<List<String>> repos = Configuration.getMultiValue(
    "github.repos",
    Collections.emptyList(),
    Configuration.STRING_PARSER);

लिस्ट ट्रैवर्सल परफ़ॉर्म करना

सेटिंग में एडमिन के किए गए बदलाव getIds() का इस्तेमाल करें. getIds() तरीके में चेकपॉइंट स्वीकार किया जाता है. फिर से शुरू करने के लिए, चेकपॉइंट का इस्तेमाल किया गया है किसी खास आइटम को इंडेक्स करने की प्रोसेस में रुकावट आनी चाहिए.

इसके बाद, getDoc() का इस्तेमाल करें.

आइटम आईडी और हैश वैल्यू पुश करें

सेटिंग में एडमिन के किए गए बदलाव getIds() आइटम आईडी और उनसे जुड़े कॉन्टेंट की हैश वैल्यू को डेटा स्टोर करने की जगह. इसके बाद, आईडी और हैश वैल्यू पेयर को पुश ऑपरेशन में पैकेज कर दिया जाता है Cloud Search इंडेक्स करने वाली सूची के लिए अनुरोध करें. आम तौर पर, रूट या पैरंट आईडी पहले चाइल्ड आईडी के बाद पुश किया जाता है. ऐसा तब तक होता है, जब तक आइटम की पूरी हैरारकी प्रोसेस किया गया.

getIds() तरीका, ऐसे चेकपॉइंट को स्वीकार करता है जो आखिरी आइटम के लिए बनाया गया है इंडेक्स किया गया. चेकपॉइंट का इस्तेमाल करके, किसी खास सामान को इंडेक्स करने की प्रोसेस फिर से शुरू की जा सकती है तो इस प्रक्रिया में रुकावट न आए. डेटा स्टोर करने की जगह में मौजूद हर आइटम के लिए, ये काम करें getIds() तरीके में दिए गए चरण:

  • रिपॉज़िटरी से हर आइटम आईडी और उससे जुड़ी हैश वैल्यू पाएं.
  • हर आईडी और हैश वैल्यू के जोड़े को PushItems में पैकेज करें.
  • हर PushItems को इटरेटर में जोड़ें. इसके बाद, इन्हें getIds() तरीका. ध्यान दें कि getIds() वास्तव में CheckpointCloseableIterable इसका बार-बार इस्तेमाल किया जा सकता है ApiOperation ऑब्जेक्ट हैं, जो एपीआई अनुरोध को दिखाने के लिए हर ऑब्जेक्ट को RepositoryDoc , जैसे कि आइटमों को सूची में पुश करें.

नीचे दिए गए कोड स्निपेट में, हर आइटम आईडी और हैश वैल्यू पाने का तरीका बताया गया है उन्हें एक PushItems. PushItems, किसी आइटम को Cloud Search में पुश करने के लिए किया गया ApiOperation का अनुरोध होता है इंडेक्स करने की सूची.

ListTraversalSample.java
PushItems.Builder allIds = new PushItems.Builder();
for (Map.Entry<Integer, Long> entry : this.documents.entrySet()) {
  String documentId = Integer.toString(entry.getKey());
  String hash = this.calculateMetadataHash(entry.getKey());
  PushItem item = new PushItem().setMetadataHash(hash);
  log.info("Pushing " + documentId);
  allIds.addPushItem(documentId, item);
}

नीचे दिया गया कोड स्निपेट PushItems.Builder क्लास का इस्तेमाल एक पुश में आईडी और हैश वैल्यू को पैकेज करने के लिए करता है ApiOperation.

ListTraversalSample.java
ApiOperation pushOperation = allIds.build();
CheckpointCloseableIterable<ApiOperation> iterator =
  new CheckpointCloseableIterableImpl.Builder<>(
      Collections.singletonList(pushOperation))
  .build();
return iterator;

आगे की प्रोसेस के लिए, आइटम को Cloud Search की इंडेक्स करने वाली सूची में भेजा जाता है.

हर आइटम को वापस पाएं और मैनेज करें

सेटिंग में एडमिन के किए गए बदलाव getDoc(): Cloud Search की इंडेक्स करने वाली सूची में, हर आइटम को हैंडल करने के लिए. आइटम नया हो सकता है, उसमें बदलाव किया जा सकता है, उसमें कोई बदलाव नहीं किया जा सकता या अब सोर्स में मौजूद नहीं हो सकता डेटा स्टोर करने की जगह. हर उस आइटम को वापस पाएं और इंडेक्स करें जिसमें बदलाव किया गया है या जो नया है. आइटम हटाएं जो अब सोर्स रिपॉज़िटरी में मौजूद नहीं है.

getDoc() वाला तरीका, Google Cloud Search से आइटम स्वीकार करता है इंडेक्स करने की सूची. सूची में मौजूद हर आइटम के लिए, यह तरीका अपनाएं getDoc() तरीका:

  1. देखें कि Cloud Search इंडेक्स करने वाली सूची में, आइटम का आईडी मौजूद है या नहीं रिपॉज़िटरी में. अगर नहीं, तो आइटम को इंडेक्स से मिटा दें.

  2. आइटम की स्थिति के लिए इंडेक्स पोल करें. अगर आइटम में कोई बदलाव नहीं हुआ है (ACCEPTED), तो यह न करें कुछ भी करें.

  3. इंडेक्स में बदलाव किए गए या नए आइटम:

    1. अनुमतियां सेट करें.
    2. उस आइटम के लिए मेटाडेटा सेट करें जिसे इंडेक्स किया जा रहा है.
    3. मेटाडेटा और आइटम को मिलाकर एक इंडेक्स करने की सुविधा बनाएं RepositoryDoc.
    4. RepositoryDoc वापस करें.

ध्यान दें: ListingConnector टेंप्लेट, null को वापस लौटाने की सुविधा नहीं देता getDoc() तरीका. null फ़ंक्शन को NullPointerException. में नतीजे मिलते हैं

मिटाए गए आइटम मैनेज करना

नीचे दिया गया कोड स्निपेट यह पता लगाने का तरीका बताता है कि कोई आइटम डेटा स्टोर करने की जगह को पूरा करें और अगर नहीं है, तो उसे मिटा दें.

ListTraversalSample.java
String resourceName = item.getName();
int documentId = Integer.parseInt(resourceName);

if (!documents.containsKey(documentId)) {
  // Document no longer exists -- delete it
  log.info(() -> String.format("Deleting document %s", item.getName()));
  return ApiOperations.deleteItem(resourceName);
}

ध्यान दें कि documents, रिपॉज़िटरी को दिखाने वाला डेटा स्ट्रक्चर है. अगर आपने documents में documentID नहीं मिले, वापस जाएं APIOperations.deleteItem(resourceName) का इस्तेमाल करें.

जिन आइटम में कोई बदलाव नहीं किया गया है उन्हें हैंडल करना

नीचे दिया गया कोड स्निपेट, Cloud Search में आइटम की स्थिति की समीक्षा करने का तरीका बताता है सूची को इंडेक्स करना और ऐसे आइटम को हैंडल करना जिसमें बदलाव नहीं किया गया है.

ListTraversalSample.java
String currentHash = this.calculateMetadataHash(documentId);
if (this.canSkipIndexing(item, currentHash)) {
  // Document neither modified nor deleted, ack the push
  log.info(() -> String.format("Document %s not modified", item.getName()));
  PushItem pushItem = new PushItem().setType("NOT_MODIFIED");
  return new PushItems.Builder().addPushItem(resourceName, pushItem).build();
}

यह पता लगाने के लिए कि आइटम में बदलाव किया गया है या नहीं, आइटम की स्थिति भी देखें . उदाहरण में, हैश का इस्तेमाल यह तय करने के लिए किया जाता है कि आइटम बदला गया है या नहीं.

ListTraversalSample.java
/**
 * Checks to see if an item is already up to date
 *
 * @param previousItem Polled item
 * @param currentHash  Metadata hash of the current github object
 * @return PushItem operation
 */
private boolean canSkipIndexing(Item previousItem, String currentHash) {
  if (previousItem.getStatus() == null || previousItem.getMetadata() == null) {
    return false;
  }
  String status = previousItem.getStatus().getCode();
  String previousHash = previousItem.getMetadata().getHash();
  return "ACCEPTED".equals(status)
      && previousHash != null
      && previousHash.equals(currentHash);
}

किसी आइटम के लिए अनुमतियां सेट करना

उपयोगकर्ताओं की पहचान करने के लिए, आपका रिपॉज़िटरी (डेटा स्टोर करने की जगह) ऐक्सेस कंट्रोल लिस्ट (ACL) का इस्तेमाल करता है या वे ग्रुप जिनके पास किसी आइटम का ऐक्सेस है. एसीएल, ग्रुप या उपयोगकर्ताओं के लिए आईडी की सूची होती है जो आइटम को ऐक्सेस कर सकते हैं.

आपको डेटा स्टोर करने की जगह में इस्तेमाल किए जाने वाले ACL का डुप्लीकेट बनाना होगा, ताकि यह पक्का किया जा सके कि सिर्फ़ वे उपयोगकर्ता ही इस्तेमाल किए जा रहे हैं अगर आपके पास किसी आइटम का ऐक्सेस है, तो वह खोज के नतीजे में उस आइटम को देख सकता है. कॉन्टेंट बनाने किसी आइटम को इंडेक्स करते समय उसके लिए ACL को शामिल करना ज़रूरी है, ताकि Google Cloud Search के पास सही लेवल का ऐक्सेस देने के लिए ज़रूरी जानकारी हो आइटम.

Content Connector SDK टूल की मदद से, एसीएल क्लास और तरीकों का एक बेहतर सेट उपलब्ध कराया जाता है ज़्यादातर डेटा स्टोर करने की जगहों के ACL का मॉडल बनाते हैं. आपको इसमें हर आइटम के लिए ACL का विश्लेषण करना होगा और Google Cloud Search के लिए संबंधित ACL बनाएं. आइटम को इंडेक्स करें. अगर डेटा स्टोर करने की जगह का ACL, ACL जैसे सिद्धांतों का इस्तेमाल करता है हो सकता है कि ACL पेचीदा हो जाए. Google पर ज़्यादा जानकारी पाने के लिए, Cloud Search ACL, इसे देखें Google Cloud Search ACL.

ध्यान दें: Cloud Search इंडेक्स करने वाला एपीआई, सिंगल-डोमेन ACL काम करता है. इस पर काम नहीं होता का इस्तेमाल करने के लिए किया जा सकता है. इसका इस्तेमाल करें Acl.Builder क्लास का इस्तेमाल करें. यहां दिया गया कोड स्निपेट, पूरे ट्रैवर्सल सैंपल से, इसकी अनुमति देता है सभी उपयोगकर्ता या “प्रिंसिपल” (getCustomerPrincipal()) सभी आइटम के “पाठक” होने के लिए (.setReaders()) ध्यान दें.

FullTraversalSample.java
// Make the document publicly readable within the domain
Acl acl = new Acl.Builder()
    .setReaders(Collections.singletonList(Acl.getCustomerPrincipal()))
    .build();

डेटा स्टोर करने की जगह के लिए ACL को ठीक से मॉडल करने के लिए आपको ACL को समझना होगा. इसके लिए उदाहरण के लिए, हो सकता है कि आप किसी फ़ाइल सिस्टम में मौजूद फ़ाइलों को इंडेक्स कर रहे हों किसी तरह के इनहेरिटेंस मॉडल का इस्तेमाल करता है, जिसमें चाइल्ड फ़ोल्डर अनुमतियां इनहेरिट करता है . मॉडलिंग ACL इनहेरिटेंस के लिए अतिरिक्त जानकारी की आवश्यकता होती है इसमें शामिल किया गया Google Cloud Search एसीएल

किसी आइटम के लिए मेटाडेटा सेट करना

मेटाडेटा को Item ऑब्जेक्ट में सेव किया जाता है. Item बनाने के लिए, आपको इसकी ज़रूरत होगी कम से कम यूनीक स्ट्रिंग आईडी, आइटम टाइप, एसीएल, यूआरएल, और आइटम का वर्शन होना चाहिए. नीचे दिया गया कोड स्निपेट यह दिखाता है किItem IndexingItemBuilder हेल्पर क्लास

ListTraversalSample.java
// Url is required. Use google.com as a placeholder for this sample.
String viewUrl = "https://www.google.com";

// Version is required, set to current timestamp.
byte[] version = Longs.toByteArray(System.currentTimeMillis());

// Set metadata hash so queue can detect changes
String metadataHash = this.calculateMetadataHash(documentId);

// Using the SDK item builder class to create the document with
// appropriate attributes. This can be expanded to include metadata
// fields etc.
Item item = IndexingItemBuilder.fromConfiguration(Integer.toString(documentId))
    .setItemType(IndexingItemBuilder.ItemType.CONTENT_ITEM)
    .setAcl(acl)
    .setSourceRepositoryUrl(IndexingItemBuilder.FieldOrValue.withValue(viewUrl))
    .setVersion(version)
    .setHash(metadataHash)
    .build();

इंडेक्स किया जा सकने वाला आइटम बनाना

आइटम के लिए मेटाडेटा सेट करने के बाद, आप वास्तविक इंडेक्स करने योग्य बना सकते हैं आइटम को RepositoryDoc.Builder. नीचे दिए गए उदाहरण में, इंडेक्स किया जा सकने वाला एक आइटम बनाने का तरीका बताया गया है.

ListTraversalSample.java
// For this sample, content is just plain text
String content = String.format("Hello world from sample doc %d", documentId);
ByteArrayContent byteContent = ByteArrayContent.fromString("text/plain", content);

// Create the fully formed document
RepositoryDoc doc = new RepositoryDoc.Builder()
    .setItem(item)
    .setContent(byteContent, IndexingService.ContentFormat.TEXT)
    .build();

RepositoryDoc एक तरह का है ApiOperation IndexingService.indexItem() अनुरोध.

Google आपके यूआरएल पैरामीटर को कैसे इस्तेमाल करेगा, यह तय करने के लिए setRequestMode() तरीका RepositoryDoc.Builder क्लास का इस्तेमाल करें, ताकि इंडेक्स करने के अनुरोध की पहचान ASYNCHRONOUS या SYNCHRONOUS के तौर पर की जा सके:

ASYNCHRONOUS
एसिंक्रोनस मोड का इस्तेमाल करने पर, पेज को इंडेक्स करने में ज़्यादा समय लगता है और यह इंडेक्स करने के अनुरोधों के लिए, बड़े पैमाने पर डेटा इकट्ठा करने की सुविधा देता है. एसिंक्रोनस मोड है इसका सुझाव, पूरे डेटा स्टोर करने की जगह के शुरुआती इंडेक्स (बैकफ़िल) के लिए दिया जाता है.
SYNCHRONOUS
सिंक्रोनस मोड से, इंडेक्स करने के दौरान विज्ञापन दिखने में कम समय लगता है और सीमित थ्रूपुट कोटा को पूरा करता है. सिंक्रोनस मोड है अपडेट को इंडेक्स करने और रिपॉज़िटरी में बदलावों का सुझाव दिया जाता है. अगर आपने कोई जानकारी नहीं है, तो अनुरोध मोड डिफ़ॉल्ट रूप से SYNCHRONOUS में सेट हो जाता है.

अगले चरण

यहां दिए गए कुछ तरीके आज़माएं:

  • (ज़रूरी नहीं) close() को लागू करना को बंद करने से पहले किसी भी संसाधन को रिलीज़ करने का तरीका बताएंगे.
  • (ज़रूरी नहीं) पहचान कनेक्टर बनाएं Content Connector SDK टूल का इस्तेमाल करके.

टेंप्लेट क्लास का इस्तेमाल करके ग्राफ़ ट्रैवर्सल कनेक्टर बनाना

Cloud Search इंडेक्स करने वाली सूची का इस्तेमाल, आईडी और हैश वैल्यू को होल्ड करने के लिए किया जाता है डेटा स्टोर करने की जगह के हर आइटम के लिए. ग्राफ़ ट्रैवर्सल कनेक्टर, आइटम आईडी को यहां भेजता है Google Cloud Search इंडेक्स करने वाली सूची से, उन्हें एक-एक करके इंडेक्स करना. Google Cloud Search, सूची बनाए रखता है और सूची के कॉन्टेंट की तुलना आइटम की स्थिति तय करता है, जैसे किसी आइटम को डेटा स्टोर करने की जगह. Cloud Search इंडेक्स करने की सूची के बारे में ज़्यादा जानकारी के लिए, इसे देखें से Google Cloud Search इंडेक्स करने की सूची.

इंडेक्स के दौरान, आइटम का कॉन्टेंट, डेटा स्टोर करने की जगह और किसी भी चाइल्ड आइटम आईडी सूची में पुश किए जाते हैं. कनेक्टर बार-बार आगे बढ़ता है पैरंट और चाइल्ड आईडी तब तक प्रोसेस करते रहेंगे, जब तक सभी आइटम मैनेज नहीं हो जाते.

दस्तावेज़ों का यह अनुभाग GraphTraversalSample उदाहरण के लिए.

कनेक्टर का एंट्री पॉइंट लागू करें

कनेक्टर का एंट्री पॉइंट main() तरीका. इस तरीके का मुख्य टास्क, Application क्लास और इसके शुरू start() का तरीका बताया गया है.

कॉल करने से पहले application.start() का इस्तेमाल करें IndexingApplication.Builder क्लास को इंस्टैंशिएट करने के लिए ListingConnector टेंप्लेट का इस्तेमाल करें. कॉन्टेंट बनाने ListingConnector स्वीकार करता है Repository ऑब्जेक्ट है, जिसकी विधियों को आपने लागू किया है.

नीचे दिए गए स्निपेट में, ListingConnector और उससे जुड़े Repository को इंस्टैंशिएट करें:

GraphTraversalSample.java
/**
 * This sample connector uses the Cloud Search SDK template class for a graph
 * traversal connector.
 *
 * @param args program command line arguments
 * @throws InterruptedException thrown if an abort is issued during initialization
 */
public static void main(String[] args) throws InterruptedException {
  Repository repository = new SampleRepository();
  IndexingConnector connector = new ListingConnector(repository);
  IndexingApplication application = new IndexingApplication.Builder(connector, args).build();
  application.start();
}

पर्दे के पीछे, SDK टूल initConfig() आपके कनेक्टर के main() तरीके से किए गए कॉल के बाद Application.build. initConfig() तरीका:

  1. Configuation.isInitialized() कैसे पक्का किया जा सकता है कि Configuration शुरू नहीं किया गया है.
  2. Google से दिए गए मुख्य-वैल्यू के साथ Configuration ऑब्जेक्ट को शुरू करता है पेयर. हर की-वैल्यू पेयर, ConfigValue ऑब्जेक्ट को Configuration ऑब्जेक्ट में डालें.

Repository इंटरफ़ेस को लागू करना

इसका मुख्य मकसद Repository ऑब्जेक्ट, डेटा स्टोर करने की जगह का ट्रैवर्सल और इंडेक्स करने के लिए है आइटम. किसी टेंप्लेट का इस्तेमाल करते समय, आपको कॉन्टेंट कनेक्टर बनाने के लिए Repository इंटरफ़ेस. आपने जिन तरीकों को बदला है आपके इस्तेमाल किए जाने वाले टेंप्लेट और ट्रैवर्सल रणनीति पर निर्भर करता है. ListingConnector इन तरीकों का इस्तेमाल किया जाता है:

  • कॉन्टेंट बनाने init() तरीका. डेटा रिपॉज़िटरी (डेटा स्टोर की जगह) को सेट-अप करने और शुरू करने के लिए, init() तरीका.

  • getIds() तरीका. डेटा स्टोर करने की जगह में सभी रिकॉर्ड के लिए, आईडी और हैश वैल्यू पाने के लिए, getIds() तरीके को बदलें.

  • getDoc() तरीका. इंडेक्स से नया आइटम जोड़ने, अपडेट करने, उसमें बदलाव करने या उसे मिटाने के लिए, getDoc() तरीका.

  • (ज़रूरी नहीं) getChanges() तरीका. अगर आपकी रिपॉज़िटरी में बदलाव का पता लगाने की सुविधा काम करती है, तो getChanges() तरीका. शेड्यूल की गई हर बढ़ोतरी के लिए, इस तरीके को एक बार कॉल किया जाता है ट्रैवर्सल (जैसा कि आपके कॉन्फ़िगरेशन में बताया गया है) और बदलाव किए गए आइटम वापस पाने के लिए उन्हें इंडेक्स न करें.

  • (ज़रूरी नहीं) close() तरीका. अगर आपको रिपॉज़िटरी (डेटा स्टोर की जगह) में क्लीनअप करना है, तो close() को बदलें तरीका. कनेक्टर के बंद होने के दौरान, इस तरीके को एक बार कॉल किया जाता है.

हर तरीके के लिए Repository ऑब्जेक्ट किसी तरह का ApiOperation ऑब्जेक्ट दिखाता है. ApiOperation ऑब्जेक्ट किसी एक या कई, IndexingService.indexItem() कॉल करता है.

कस्टम कॉन्फ़िगरेशन पैरामीटर पाएं

अपने कनेक्टर के कॉन्फ़िगरेशन को मैनेज करने के लिए, आपको कस्टम पैरामीटर Configuration ऑब्जेक्ट है. यह टास्क आम तौर पर इसमें किया जाता है Repository क्लास का init() तरीका.

Configuration क्लास में अलग-अलग तरह का डेटा पाने के कई तरीके हैं . हर तरीका, ConfigValue ऑब्जेक्ट दिखाता है. इसके बाद, आपको ConfigValue ऑब्जेक्ट का इस्तेमाल करें get() पाने का तरीका बताया गया है. यहां दिया गया स्निपेट: FullTraversalSample को वापस लाने का तरीका दिखाता है Configuration ऑब्जेक्ट से मिला, कस्टम पूर्णांक की वैल्यू:

FullTraversalSample.java
@Override
public void init(RepositoryContext context) {
  log.info("Initializing repository");
  numberOfDocuments = Configuration.getInteger("sample.documentCount", 10).get();
}

कई वैल्यू वाला पैरामीटर पाने और पार्स करने के लिए, इनमें से किसी एक वैल्यू का इस्तेमाल करें डेटा को अलग-अलग हिस्सों में पार्स करने के लिए, Configuration क्लास के टाइप पार्सर. ट्यूटोरियल कनेक्टर में नीचे दिया गया स्निपेट getMultiValue GitHub रिपॉज़िटरी के नामों की सूची पाने का तरीका:

GithubRepository.java
ConfigValue<List<String>> repos = Configuration.getMultiValue(
    "github.repos",
    Collections.emptyList(),
    Configuration.STRING_PARSER);

ग्राफ़ ट्रैवर्सल चलाएं

सेटिंग में एडमिन के किए गए बदलाव getIds() का इस्तेमाल करें. getIds() तरीके में चेकपॉइंट स्वीकार किया जाता है. फिर से शुरू करने के लिए, चेकपॉइंट का इस्तेमाल किया गया है किसी खास आइटम को इंडेक्स करने की प्रोसेस में रुकावट आनी चाहिए.

इसके बाद, getDoc() का इस्तेमाल करें.

आइटम आईडी और हैश वैल्यू पुश करें

सेटिंग में एडमिन के किए गए बदलाव getIds() आइटम आईडी और उनसे जुड़े कॉन्टेंट की हैश वैल्यू को डेटा स्टोर करने की जगह. इसके बाद, आईडी और हैश वैल्यू पेयर को पुश ऑपरेशन में पैकेज कर दिया जाता है Cloud Search इंडेक्स करने वाली सूची के लिए अनुरोध करें. आम तौर पर, रूट या पैरंट आईडी पहले चाइल्ड आईडी के बाद पुश किया जाता है. ऐसा तब तक होता है, जब तक आइटम की पूरी हैरारकी प्रोसेस किया गया.

getIds() तरीका, ऐसे चेकपॉइंट को स्वीकार करता है जो आखिरी आइटम के लिए बनाया गया है इंडेक्स किया गया. चेकपॉइंट का इस्तेमाल करके, किसी खास सामान को इंडेक्स करने की प्रोसेस फिर से शुरू की जा सकती है तो इस प्रक्रिया में रुकावट न आए. डेटा स्टोर करने की जगह में मौजूद हर आइटम के लिए, ये काम करें getIds() तरीके में दिए गए चरण:

  • रिपॉज़िटरी से हर आइटम आईडी और उससे जुड़ी हैश वैल्यू पाएं.
  • हर आईडी और हैश वैल्यू के जोड़े को PushItems में पैकेज करें.
  • हर PushItems को इटरेटर में जोड़ें. इसके बाद, इन्हें getIds() तरीका. ध्यान दें कि getIds() वास्तव में CheckpointCloseableIterable इसका बार-बार इस्तेमाल किया जा सकता है ApiOperation ऑब्जेक्ट हैं, जो एपीआई अनुरोध को दिखाने के लिए हर ऑब्जेक्ट को RepositoryDoc , जैसे कि आइटमों को सूची में पुश करें.

नीचे दिए गए कोड स्निपेट में, हर आइटम आईडी और हैश वैल्यू पाने का तरीका बताया गया है उन्हें एक PushItems. PushItems ApiOperation किसी आइटम को Cloud Search इंडेक्स करने वाली सूची में पुश करने का अनुरोध करता है.

GraphTraversalSample.java
PushItems.Builder allIds = new PushItems.Builder();
PushItem item = new PushItem();
allIds.addPushItem("root", item);

नीचे दिया गया कोड स्निपेट PushItems.Builder क्लास का इस्तेमाल एक पुश में आईडी और हैश वैल्यू को पैकेज करने के लिए करता है ApiOperation.

GraphTraversalSample.java
ApiOperation pushOperation = allIds.build();
CheckpointCloseableIterable<ApiOperation> iterator =
  new CheckpointCloseableIterableImpl.Builder<>(
      Collections.singletonList(pushOperation))
  .build();

आगे की प्रोसेस के लिए, आइटम को Cloud Search की इंडेक्स करने वाली सूची में भेजा जाता है.

हर आइटम को वापस पाएं और मैनेज करें

सेटिंग में एडमिन के किए गए बदलाव getDoc(): Cloud Search की इंडेक्स करने वाली सूची में, हर आइटम को हैंडल करने के लिए. आइटम नया हो सकता है, उसमें बदलाव किया जा सकता है, उसमें कोई बदलाव नहीं किया जा सकता या अब सोर्स में मौजूद नहीं हो सकता डेटा स्टोर करने की जगह. हर उस आइटम को वापस पाएं और इंडेक्स करें जिसमें बदलाव किया गया है या जो नया है. आइटम हटाएं जो अब सोर्स रिपॉज़िटरी में मौजूद नहीं है.

getDoc() वाला तरीका, Cloud Search इंडेक्स से आइटम स्वीकार करता है सूची. सूची में मौजूद हर आइटम के लिए, यह तरीका अपनाएं getDoc() तरीका:

  1. देखें कि Cloud Search इंडेक्स करने वाली सूची में, आइटम का आईडी डेटा स्टोर करने की जगह. अगर नहीं, तो आइटम को इंडेक्स से मिटा दें. अगर आइटम मौजूद है, तो अगले चरण पर जाएं.

  2. इंडेक्स में बदलाव किए गए या नए आइटम:

    1. अनुमतियां सेट करें.
    2. उस आइटम के लिए मेटाडेटा सेट करें जिसे इंडेक्स किया जा रहा है.
    3. मेटाडेटा और आइटम को मिलाकर एक इंडेक्स करने की सुविधा बनाएं RepositoryDoc.
    4. आगे की प्रक्रिया के लिए, चाइल्ड आईडी को Cloud Search की इंडेक्स करने वाली सूची में रखें.
    5. RepositoryDoc वापस करें.

मिटाए गए आइटम मैनेज करना

नीचे दिया गया कोड स्निपेट यह पता लगाने का तरीका बताता है कि कोई आइटम इंडेक्स में मौजूद है या नहीं और, नहीं, बल्कि इसे मिटाएं.

GraphTraversalSample.java
String resourceName = item.getName();
if (documentExists(resourceName)) {
  return buildDocumentAndChildren(resourceName);
}
// Document doesn't exist, delete it
log.info(() -> String.format("Deleting document %s", resourceName));
return ApiOperations.deleteItem(resourceName);

किसी आइटम के लिए अनुमतियां सेट करना

उपयोगकर्ताओं की पहचान करने के लिए, आपका रिपॉज़िटरी (डेटा स्टोर करने की जगह) ऐक्सेस कंट्रोल लिस्ट (ACL) का इस्तेमाल करता है या वे ग्रुप जिनके पास किसी आइटम का ऐक्सेस है. एसीएल, ग्रुप या उपयोगकर्ताओं के लिए आईडी की सूची होती है जो आइटम को ऐक्सेस कर सकते हैं.

आपको डेटा स्टोर करने की जगह में इस्तेमाल किए जाने वाले ACL का डुप्लीकेट बनाना होगा, ताकि यह पक्का किया जा सके कि सिर्फ़ वे उपयोगकर्ता ही इस्तेमाल किए जा रहे हैं अगर आपके पास किसी आइटम का ऐक्सेस है, तो वह खोज के नतीजे में उस आइटम को देख सकता है. कॉन्टेंट बनाने किसी आइटम को इंडेक्स करते समय उसके लिए ACL को शामिल करना ज़रूरी है, ताकि Google Cloud Search के पास सही लेवल का ऐक्सेस देने के लिए ज़रूरी जानकारी हो आइटम.

Content Connector SDK टूल की मदद से, एसीएल क्लास और तरीकों का एक बेहतर सेट उपलब्ध कराया जाता है ज़्यादातर डेटा स्टोर करने की जगहों के ACL का मॉडल बनाते हैं. आपको इसमें हर आइटम के लिए ACL का विश्लेषण करना होगा और Google Cloud Search के लिए संबंधित ACL बनाएं. आइटम को इंडेक्स करें. अगर डेटा स्टोर करने की जगह का ACL, ACL जैसे सिद्धांतों का इस्तेमाल करता है हो सकता है कि ACL पेचीदा हो जाए. Google पर ज़्यादा जानकारी पाने के लिए, Cloud Search ACL, इसे देखें Google Cloud Search ACL.

ध्यान दें: Cloud Search इंडेक्स करने वाला एपीआई, सिंगल-डोमेन ACL काम करता है. इस पर काम नहीं होता का इस्तेमाल करने के लिए किया जा सकता है. इसका इस्तेमाल करें Acl.Builder क्लास का इस्तेमाल करें. यहां दिया गया कोड स्निपेट, पूरे ट्रैवर्सल सैंपल से, इसकी अनुमति देता है सभी उपयोगकर्ता या “प्रिंसिपल” (getCustomerPrincipal()) सभी आइटम के “पाठक” होने के लिए (.setReaders()) ध्यान दें.

FullTraversalSample.java
// Make the document publicly readable within the domain
Acl acl = new Acl.Builder()
    .setReaders(Collections.singletonList(Acl.getCustomerPrincipal()))
    .build();

डेटा स्टोर करने की जगह के लिए ACL को ठीक से मॉडल करने के लिए आपको ACL को समझना होगा. इसके लिए उदाहरण के लिए, हो सकता है कि आप किसी फ़ाइल सिस्टम में मौजूद फ़ाइलों को इंडेक्स कर रहे हों किसी तरह के इनहेरिटेंस मॉडल का इस्तेमाल करता है, जिसमें चाइल्ड फ़ोल्डर अनुमतियां इनहेरिट करता है . मॉडलिंग ACL इनहेरिटेंस के लिए अतिरिक्त जानकारी की आवश्यकता होती है इसमें शामिल किया गया Google Cloud Search एसीएल

किसी आइटम के लिए मेटाडेटा सेट करना

मेटाडेटा को Item ऑब्जेक्ट में सेव किया जाता है. Item बनाने के लिए, आपको इसकी ज़रूरत होगी कम से कम यूनीक स्ट्रिंग आईडी, आइटम टाइप, एसीएल, यूआरएल, और आइटम का वर्शन होना चाहिए. नीचे दिया गया कोड स्निपेट यह दिखाता है किItem IndexingItemBuilder हेल्पर क्लास

GraphTraversalSample.java
// Url is required. Use google.com as a placeholder for this sample.
String viewUrl = "https://www.google.com";

// Version is required, set to current timestamp.
byte[] version = Longs.toByteArray(System.currentTimeMillis());

// Using the SDK item builder class to create the document with
// appropriate attributes. This can be expanded to include metadata
// fields etc.
Item item = IndexingItemBuilder.fromConfiguration(documentId)
    .setItemType(IndexingItemBuilder.ItemType.CONTENT_ITEM)
    .setAcl(acl)
    .setSourceRepositoryUrl(IndexingItemBuilder.FieldOrValue.withValue(viewUrl))
    .setVersion(version)
    .build();

इंडेक्स किया जा सकने वाला आइटम बनाना

आइटम के लिए मेटाडेटा सेट करने के बाद, आप वास्तविक इंडेक्स करने योग्य बना सकते हैं आइटम को RepositoryDoc.Builder. नीचे दिए गए उदाहरण में, इंडेक्स किया जा सकने वाला एक आइटम बनाने का तरीका बताया गया है.

GraphTraversalSample.java
// For this sample, content is just plain text
String content = String.format("Hello world from sample doc %s", documentId);
ByteArrayContent byteContent = ByteArrayContent.fromString("text/plain", content);

RepositoryDoc.Builder docBuilder = new RepositoryDoc.Builder()
    .setItem(item)
    .setContent(byteContent, IndexingService.ContentFormat.TEXT);

RepositoryDoc एक तरह का ApiOperation है, जो IndexingService.indexItem() अनुरोध.

Google आपके यूआरएल पैरामीटर को कैसे इस्तेमाल करेगा, यह तय करने के लिए setRequestMode() तरीका RepositoryDoc.Builder क्लास का इस्तेमाल करें, ताकि इंडेक्स करने के अनुरोध की पहचान ASYNCHRONOUS या SYNCHRONOUS के तौर पर की जा सके:

ASYNCHRONOUS
एसिंक्रोनस मोड का इस्तेमाल करने पर, पेज को इंडेक्स करने में ज़्यादा समय लगता है और यह इंडेक्स करने के अनुरोधों के लिए, बड़े पैमाने पर डेटा इकट्ठा करने की सुविधा देता है. एसिंक्रोनस मोड है इसका सुझाव, पूरे डेटा स्टोर करने की जगह के शुरुआती इंडेक्स (बैकफ़िल) के लिए दिया जाता है.
SYNCHRONOUS
सिंक्रोनस मोड से, इंडेक्स करने के दौरान विज्ञापन दिखने में कम समय लगता है और सीमित थ्रूपुट कोटा को पूरा करता है. सिंक्रोनस मोड है अपडेट को इंडेक्स करने और रिपॉज़िटरी में बदलावों का सुझाव दिया जाता है. अगर आपने कोई जानकारी नहीं है, तो अनुरोध मोड डिफ़ॉल्ट रूप से SYNCHRONOUS में सेट हो जाता है.

चाइल्ड आईडी को Cloud Search इंडेक्स करने वाली सूची में डालना

नीचे दिया गया कोड स्निपेट, फ़िलहाल, पैरंट आइटम को प्रोसेस किया जा रहा है. ये आईडी पैरंट आइटम के इंडेक्स होने के बाद प्रोसेस किए जाते हैं.

GraphTraversalSample.java
// Queue the child nodes to visit after indexing this document
Set<String> childIds = getChildItemNames(documentId);
for (String id : childIds) {
  log.info(() -> String.format("Pushing child node %s", id));
  PushItem pushItem = new PushItem();
  docBuilder.addChildId(id, pushItem);
}

RepositoryDoc doc = docBuilder.build();

अगले चरण

यहां दिए गए कुछ तरीके आज़माएं:

  • (ज़रूरी नहीं) close() को लागू करना को बंद करने से पहले किसी भी संसाधन को रिलीज़ करने का तरीका बताएंगे.
  • (ज़रूरी नहीं) पहचान कनेक्टर बनाएं आइडेंटिटी कनेक्टर SDK टूल का इस्तेमाल करके.

REST API का इस्तेमाल करके कॉन्टेंट कनेक्टर बनाएं

नीचे दिए गए सेक्शन में, REST एपीआई.

अपनी ट्रैवर्सल रणनीति तय करें

कॉन्टेंट कनेक्टर का मुख्य काम, रिपॉज़िटरी और अपना डेटा इंडेक्स करता है. आपको इनके आधार पर एक ट्रैवर्सल रणनीति लागू करनी होगी: आपकी रिपॉज़िटरी में डेटा का लेआउट. नीचे तीन सामान्य ट्रैवर्सल दिए गए हैं रणनीतियां:

पूरी ट्रैवर्सल रणनीति

एक पूरी ट्रैवर्सल रणनीति, डेटा स्टोर करने की पूरी जगह को स्कैन करती है और किसी चीज़ को ब्लाइंड करके इंडेक्स करती है हर आइटम. इस रणनीति का इस्तेमाल आम तौर पर तब किया जाता है, जब आपके पास डेटा स्टोर करने की जगह कम होती है और हर बार इंडेक्स करने पर पूरा ट्रैवर्सल करने का खर्च वहन कर सकते हैं.

यह ट्रैवर्सल रणनीति उन छोटे डेटा स्टोर करने की जगहों के लिए सही है जहां ज़्यादातर स्टैटिक, गैर-पदानुक्रमिक, डेटा. आप इस ट्रैवर्सल रणनीति का भी इस्तेमाल कर सकते हैं जब बदलाव का पता लगाना मुश्किल हो या डेटा स्टोर करने की जगह के साथ काम न करता हो.

लिस्ट ट्रैवर्सल रणनीति

लिस्ट ट्रैवर्सल रणनीति की मदद से, डेटा स्टोर करने की पूरी जगह को स्कैन किया जाता है. इसमें, सभी चाइल्ड भी शामिल होते हैं नोड से हर आइटम की स्थिति तय की जा सकती है. इसके बाद, कनेक्टर एक सेकंड पास करें और सिर्फ़ उन आइटम को इंडेक्स करता है जो नए हैं या पिछले इंडेक्स करना. आम तौर पर, इस रणनीति का इस्तेमाल कन्वर्ज़न बढ़ाने के लिए किया जाता है मौजूदा इंडेक्स में अपडेट करता है (हर बार पूरा ट्रैवर्सल करने के बजाय इंडेक्स को अपडेट करने का समय तय करता है).

यह ट्रैवर्सल रणनीति तब काम आती है, जब बदलाव का पता लगाना मुश्किल हो या डेटा स्टोर करने की जगह के साथ काम नहीं करता, आपके पास बिना हैरारकी वाला डेटा है, और बहुत बड़े डेटा सेट पर काम करते हैं.

ग्राफ़ ट्रैवर्सल

ग्राफ़ ट्रैवर्सल रणनीति, उस पूरे पैरंट नोड को स्कैन करती है जो तय करता है कि हर आइटम की स्थिति. इसके बाद, कनेक्टर दूसरा पास लेता है और सिर्फ़ रूट नोड में मौजूद आइटम नए हैं या उन्हें पिछली बार इंडेक्स होने के बाद अपडेट किया गया है. आखिर में, कनेक्टर कोई भी चाइल्ड आईडी पास करता है और फिर चाइल्ड नोड में आइटम इंडेक्स करता है जो नई हैं या जिन्हें अपडेट किया गया है. यह कनेक्टर इसके ज़रिए बार-बार चलता रहता है सभी चाइल्ड नोड तब तक उपलब्ध होंगे, जब तक सभी आइटम का पता नहीं चल जाता. आम तौर पर, ऐसा ट्रैवर्सल का इस्तेमाल, हैरारकी के हिसाब से स्टोर करने की ऐसी जगहों के लिए किया जाता है जहां सभी आईडी की लिस्टिंग व्यावहारिक.

यह रणनीति तब काम आती है, जब आपके पास हैरारकी के हिसाब से डेटा हो जिसे जैसे, सीरीज़ डायरेक्ट्री या वेब पेज.

अपनी ट्रैवर्सल रणनीति और इंडेक्स आइटम लागू करें

Cloud Search के लिए इंडेक्स किए जा सकने वाले हर एलिमेंट को एक आइटम कहा जाता है. Cloud Search API का इस्तेमाल कर रहे हैं. आइटम कोई फ़ाइल, फ़ोल्डर, CSV फ़ाइल की कोई लाइन या एक डेटाबेस रिकॉर्ड हो सकता है.

स्कीमा रजिस्टर हो जाने के बाद, इंडेक्स में इन तरीकों का इस्तेमाल किया जा सकता है:

  1. (ज़रूरी नहीं) items.upload का इस्तेमाल करना इंडेक्स करने के लिए, 100KiB से बड़ी फ़ाइलें अपलोड करें. छोटी फ़ाइलों के लिए, कॉन्टेंट को इस तरह जोड़ें inlineContent इसका उपयोग कर रहा है items.index.

  2. (ज़रूरी नहीं) media.upload का इस्तेमाल करना मीडिया फ़ाइलों को अपलोड करके इंडेक्स किया जा सकता है.

  3. आइटम को इंडेक्स करने के लिए, items.index का इस्तेमाल किया जा रहा है. उदाहरण के लिए, अगर आपका स्कीमा मूवी में ऑब्जेक्ट की परिभाषा का इस्तेमाल करता है स्कीमा, किसी एक इंडेक्स आइटम ऐसा दिखेगा:

    {
      "name": "datasource/<data_source_id>/items/titanic",
      "acl": {
        "readers": [
          {
            "gsuitePrincipal": {
              "gsuiteDomain": true
            }
          }
        ]
      },
      "metadata": {
        "title": "Titanic",
        "viewUrl": "http://www.imdb.com/title/tt2234155/?ref_=nv_sr_1",
        "objectType": "movie"
      },
      "structuredData": {
        "object": {
          "properties": [
            {
              "name": "movieTitle",
              "textValues": {
                "values": [
                  "Titanic"
                ]
              }
            },
            {
              "name": "releaseDate",
              "dateValues": {
                "values": [
                  {
                    "year": 1997,
                    "month": 12,
                    "day": 19
                  }
                ]
              }
            },
            {
              "name": "actorName",
              "textValues": {
                "values": [
                  "Leonardo DiCaprio",
                  "Kate Winslet",
                  "Billy Zane"
                ]
              }
            },
            {
              "name": "genre",
              "enumValues": {
                "values": [
                  "Drama",
                  "Action"
                ]
              }
            },
            {
              "name": "userRating",
              "integerValues": {
                "values": [
                  8
                ]
              }
            },
            {
              "name": "mpaaRating",
              "textValues": {
                "values": [
                  "PG-13"
                ]
              }
            },
            {
              "name": "duration",
              "textValues": {
                "values": [
                  "3 h 14 min"
                ]
              }
            }
          ]
        }
      },
      "content": {
        "inlineContent": "A seventeen-year-old aristocrat falls in love with a kind but poor artist aboard the luxurious, ill-fated R.M.S. Titanic.",
        "contentFormat": "TEXT"
      },
      "version": "01",
      "itemType": "CONTENT_ITEM"
    }
    
  4. (ज़रूरी नहीं) items.get का इस्तेमाल करना किसी आइटम की पुष्टि करने के लिए किए गए कॉल को इंडेक्स किया जा चुका है.

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

डेटा स्टोर करने की जगह में किए गए बदलावों को मैनेज करना

यह काम करने के लिए, रिपॉज़िटरी (डेटा स्टोर करने की जगह) से हर आइटम को समय-समय पर इकट्ठा और इंडेक्स किया जा सकता है. पूरी तरह से इंडेक्स हो जाए. यह पक्का करने में असरदार तरीके से कि आपका इंडेक्स अप-टू-डेट है या नहीं, लेकिन डेटा स्टोर करने की बड़ी या हैरारकी वाली संस्थाओं का इस्तेमाल करते समय, इंडेक्स करने पर खर्चा आ सकता है.

डेटा स्टोर करने की पूरी जगह को इंडेक्स करने के लिए, इंडेक्स कॉल का बार-बार इस्तेमाल करने के बजाय, Google Cloud इंडेक्स करने वाली सूची का भी इस्तेमाल किया जा सकता है के बदलावों को ट्रैक करने और सिर्फ़ उन आइटम को इंडेक्स करने का तरीका बताया गया है जिनमें बदल दिया गया है. Google आपके यूआरएल पैरामीटर को कैसे इस्तेमाल करेगा, यह तय करने के लिए items.push बाद में पोलिंग और अपडेट करने के लिए, आइटम को सूची में डालने के अनुरोध शामिल करें. ज़्यादा के लिए Google Cloud इंडेक्स करने की सूची के बारे में जानकारी, यहां देखें Google Cloud इंडेक्स करने की सूची.

Google Cloud Search API के बारे में ज़्यादा जानकारी के लिए, इसे देखें Cloud Search API.