स्कीमा बनाना और रजिस्टर करना

Google Cloud Search स्कीमा एक JSON स्ट्रक्चर है. यह आपके डेटा को इंडेक्स करने और क्वेरी करने में इस्तेमाल किए जाने वाले ऑब्जेक्ट, प्रॉपर्टी, और विकल्पों के बारे में बताता है. आपका कॉन्टेंट कनेक्टर, आपके रजिस्टर किए गए स्कीमा के आधार पर, आपके डेटा स्टोर करने की जगह से डेटा पढ़ता है और डेटा को इंडेक्स करता है.

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

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

स्कीमा बनाएं

Cloud Search स्कीमा बनाने के लिए इस्तेमाल किए जाने वाले चरणों की सूची नीचे दी गई है:

  1. उपयोगकर्ता के अनुमानित व्यवहार की पहचान करना
  2. डेटा सोर्स शुरू करना
  3. स्कीमा बनाना
  4. पूरे स्कीमा का नमूना
  5. स्कीमा को रजिस्टर करना
  6. अपना डेटा इंडेक्स करना
  7. स्कीमा की जांच करना
  8. स्कीमा को ट्यून करना
देखें

उपयोगकर्ता के अनुमानित व्यवहार की पहचान करना

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

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

अपने उपयोगकर्ता के व्यवहार का पैटर्न दिखाने के लिए अपना स्कीमा तय करने के लिए, ये टास्क करें:

  1. अलग-अलग उपयोगकर्ताओं की मनचाही क्वेरी के अलग-अलग सेट का आकलन करें.
  2. क्वेरी में इस्तेमाल किए जा सकने वाले ऑब्जेक्ट की पहचान करें. ऑब्जेक्ट, मिलते-जुलते डेटा के लॉजिकल सेट होते हैं. जैसे, फ़िल्मों के डेटाबेस में मौजूद मूवी.
  3. उन प्रॉपर्टी और वैल्यू की पहचान करें जिनसे ऑब्जेक्ट बनता है और जिन्हें क्वेरी में इस्तेमाल किया जा सकता है. प्रॉपर्टी, ऑब्जेक्ट के इंडेक्स किए जा सकने वाले एट्रिब्यूट होते हैं. इनमें प्रिमिटिव वैल्यू या अन्य ऑब्जेक्ट शामिल हो सकते हैं. उदाहरण के लिए, किसी मूवी ऑब्जेक्ट में शुरुआती वैल्यू के रूप में फ़िल्म के शीर्षक और रिलीज़ की तारीख जैसी प्रॉपर्टी हो सकती हैं. मूवी ऑब्जेक्ट में, कास्ट मेंबर जैसे दूसरे ऑब्जेक्ट भी हो सकते हैं, जिनकी अपनी प्रॉपर्टी होती हैं, जैसे कि उनका नाम या भूमिका.
  4. प्रॉपर्टी के लिए मान्य वैल्यू के उदाहरण की पहचान करें. वैल्यू, किसी प्रॉपर्टी के लिए इंडेक्स किया गया असल डेटा होता है. उदाहरण के लिए, आपके डेटाबेस में एक फ़िल्म का टाइटल "Raiders of the Lost Ark" हो सकता है.
  5. अपने उपयोगकर्ताओं की पसंद के मुताबिक क्रम से लगाने और रैंकिंग देने के विकल्प तय करें. उदाहरण के लिए, फ़िल्मों के बारे में क्वेरी करते समय, हो सकता है कि उपयोगकर्ता तारीख के हिसाब से, ऑडियंस रेटिंग के हिसाब से क्रम में लगाने और रैंकिंग करना चाहें. साथ ही, उन्हें टाइटल के हिसाब से, वर्णमाला के क्रम में क्रम तय करने की ज़रूरत नहीं है.
  6. (ज़रूरी नहीं) अगर आपकी कोई प्रॉपर्टी एक खास संदर्भ को दिखाती है जिसमें उपयोगकर्ताओं की नौकरी या डिपार्टमेंट जैसी खोज की जा सकती है, तो ध्यान दें कि संदर्भ के हिसाब से अपने-आप अपने-आप पूरे होने वाले सुझाव दिए जा सकें. उदाहरण के लिए, फ़िल्मों का डेटाबेस खोज रहे लोगों के लिए, हो सकता है कि उपयोगकर्ता किसी खास शैली की फ़िल्मों में ही दिलचस्पी रखते हों. उपयोगकर्ता तय करेंगे कि वे किस शैली में खोज करना चाहते हैं. यह उनकी उपयोगकर्ता प्रोफ़ाइल के हिस्से के तौर पर हो सकता है. इसके बाद, जब कोई उपयोगकर्ता फ़िल्मों की क्वेरी टाइप करना शुरू करता है, तब अपने-आप पूरा होने वाले सुझावों के हिस्से के तौर पर, उनकी पसंदीदा शैली की फ़िल्मों, जैसे कि "ऐक्शन फ़िल्में" का सुझाव दिया जाता है.
  7. इन ऑब्जेक्ट, प्रॉपर्टी, और उदाहरण की वैल्यू की एक सूची बनाएं जिनका इस्तेमाल खोज करने में किया जा सके. (इस सूची का इस्तेमाल कैसे किया जाता है, इस बारे में जानने के लिए, ऑपरेटर के विकल्प तय करें सेक्शन देखें.)

डेटा सोर्स शुरू करना

डेटा सोर्स, रिपॉज़िटरी (डेटा स्टोर करने की जगह) का डेटा दिखाता है. इसे Google Cloud में स्टोर किया गया है और इंडेक्स किया गया है. डेटा सोर्स शुरू करने से जुड़े निर्देशों के लिए, तीसरे पक्ष के डेटा सोर्स को मैनेज करना लेख देखें.

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

अपने ऑब्जेक्ट तय करें

स्कीमा में डेटा की बुनियादी इकाई Object है, जिसे "स्कीमा ऑब्जेक्ट" भी कहा जाता है. यह डेटा का लॉजिकल स्ट्रक्चर होता है. फ़िल्मों के डेटाबेस में, डेटा की एक लॉजिकल संरचना "मूवी" होती है. फ़िल्म में शामिल कलाकारों और क्रू को दिखाने के लिए, "व्यक्ति" भी हो सकता है.

स्कीमा में हर ऑब्जेक्ट की प्रॉपर्टी या एट्रिब्यूट की एक सीरीज़ होती है, जो ऑब्जेक्ट के बारे में बताती हैं, जैसे कि किसी फ़िल्म का शीर्षक और कुल समय या किसी व्यक्ति का नाम और जन्म की तारीख. किसी ऑब्जेक्ट की विशेषताओं में प्राथमिक मान या अन्य ऑब्जेक्ट शामिल हो सकते हैं.

इमेज 1 में मूवी और व्यक्ति ऑब्जेक्ट और उनसे जुड़ी प्रॉपर्टी दिखाई गई हैं.

इकाइयों के बीच स्कीमा कनेक्शन का ड्रॉइंग
पहली इमेज. दो ऑब्जेक्ट और एक सब-ऑब्जेक्ट दिखाने वाला सैंपल स्कीमा.

Cloud Search स्कीमा, ज़रूरी तौर पर ऑब्जेक्ट के बारे में बताने वाले स्टेटमेंट की एक सूची है. इनके बारे में objectDefinitions टैग में बताया गया है. नीचे दिया गया स्कीमा स्निपेट, मूवी और व्यक्ति स्कीमा ऑब्जेक्ट के लिए, objectDefinitions स्टेटमेंट दिखाता है.

{
  "objectDefinitions": [
    {
      "name": "movie",
      ...
    },
    {
      "name": "person",
      ...
    }
  ]
}

किसी स्कीमा ऑब्जेक्ट के बारे में बताने पर, उस ऑब्जेक्ट के लिए name दिया जाता है जो स्कीमा में मौजूद दूसरे सभी ऑब्जेक्ट से अलग होना चाहिए. आम तौर पर, ऑब्जेक्ट के बारे में जानकारी देने वाले name वैल्यू का इस्तेमाल किया जाएगा. जैसे, किसी मूवी ऑब्जेक्ट के लिए movie. स्कीमा सेवा, इंडेक्स किए जा सकने वाले ऑब्जेक्ट के लिए, कुंजी आइडेंटिफ़ायर के तौर पर name फ़ील्ड का इस्तेमाल करती है. name फ़ील्ड के बारे में ज़्यादा जानकारी के लिए, ऑब्जेक्ट की परिभाषा देखें.

ऑब्जेक्ट के प्रॉपर्टी तय करना

जैसा कि ObjectDefinition के रेफ़रंस में बताया गया है, ऑब्जेक्ट के नाम के बाद options का एक सेट और propertyDefinitions की सूची होती है. options में freshnessOptions और displayOptions शामिल हो सकते हैं. freshnessOptions का इस्तेमाल, खोज के नतीजों की रैंकिंग में बदलाव करने के लिए किया जाता है. ऐसा किसी आइटम की हाल ही की जानकारी के हिसाब से किया जाता है. displayOptions का इस्तेमाल यह तय करने के लिए किया जाता है कि किसी ऑब्जेक्ट के लिए खोज के नतीजों में खास लेबल और प्रॉपर्टी दिखाई जाएं या नहीं.

propertyDefinitions सेक्शन में, किसी ऑब्जेक्ट की प्रॉपर्टी तय की जाती हैं. जैसे, मूवी का टाइटल और रिलीज़ की तारीख.

यह स्निपेट, movie ऑब्जेक्ट को दो प्रॉपर्टी के साथ दिखाता है: movieTitle और releaseDate.

{
  "objectDefinitions": [
    {
      "name": "movie",
      "propertyDefinitions": [
        {
          "name": "movieTitle",
          "isReturnable": true,
          "isWildcardSearchable": true,
          "textPropertyOptions": {
            "retrievalImportance": { "importance": "HIGHEST" },
            "operatorOptions": {
              "operatorName": "title"
            }
          },
          "displayOptions": {
            "displayLabel": "Title"
          }
        },
        {
          "name": "releaseDate",
          "isReturnable": true,
          "isSortable": true,
          "datePropertyOptions": {
            "operatorOptions": {
              "operatorName": "released",
              "lessThanOperatorName": "releasedbefore",
              "greaterThanOperatorName": "releasedafter"
            }
          },
          "displayOptions": {
            "displayLabel": "Release date"
          }
      ...
      ]
    }
  ]
}

PropertyDefinition में ये आइटम शामिल हैं:

  • name स्ट्रिंग.
  • टाइप-ऐग्नोस्टिक विकल्पों की सूची, जैसे कि पिछले स्निपेट में isReturnable.
  • टाइप और इससे जुड़े खास टाइप के विकल्प, जैसे कि पिछले स्निपेट में textPropertyOptions और retrievalImportance.
  • इस operatorOptions में बताया गया है कि खोज ऑपरेटर के तौर पर, प्रॉपर्टी का इस्तेमाल कैसे किया जाता है.
  • एक या उससे ज़्यादा displayOptions, जैसे कि पिछले स्निपेट में displayLabel.

प्रॉपर्टी का name, शामिल ऑब्जेक्ट में यूनीक होना चाहिए, लेकिन उसी नाम का इस्तेमाल दूसरे ऑब्जेक्ट और सब-ऑब्जेक्ट में किया जा सकता है. पहली इमेज में, फ़िल्म के टाइटल और रिलीज़ की तारीख को दो बार तय किया गया है: एक बार movie ऑब्जेक्ट में और फिर person ऑब्जेक्ट के filmography सब-ऑब्जेक्ट में. यह स्कीमा movieTitle फ़ील्ड का दोबारा इस्तेमाल करता है, ताकि स्कीमा दो तरह के खोज व्यवहार के साथ काम कर सके:

  • जब उपयोगकर्ता किसी फ़िल्म का नाम खोजें, तब फ़िल्म के नतीजे दिखाएं.
  • जब उपयोगकर्ता किसी अभिनेता की फ़िल्म का नाम खोजते हैं, तो उन्हें लोगों के लिए नतीजे दिखाएं.

इसी तरह, स्कीमा releaseDate फ़ील्ड का फिर से इस्तेमाल करता है, क्योंकि दोनों movieTitle फ़ील्ड के लिए इसका मतलब एक जैसा है.

अपना स्कीमा तैयार करते समय, देखें कि आपके रिपॉज़िटरी (डेटा स्टोर करने की जगह) में ऐसे मिलते-जुलते फ़ील्ड कैसे हो सकते हैं जिनमें ऐसा डेटा है जिसे आपको अपने स्कीमा में एक से ज़्यादा बार एलान करना है.

टाइप-ऐग्नोस्टिक विकल्प जोड़ें

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

  • isReturnable - यह बताता है कि प्रॉपर्टी ऐसे डेटा की पहचान करती है या नहीं जिसे क्वेरी एपीआई की मदद से खोज के नतीजों में दिखाया जाना चाहिए. मूवी प्रॉपर्टी के उदाहरण के तौर पर सभी को लौटाया जा सकता है. जिन प्रॉपर्टी को वापस नहीं किया जा सकता उनका इस्तेमाल, खोज या रैंकिंग के लिए किया जा सकता है. इसके लिए, उपयोगकर्ता को प्रॉपर्टी का इस्तेमाल नहीं करना पड़ता.
  • isRepeatable - यह बताता है कि प्रॉपर्टी के लिए एक से ज़्यादा वैल्यू की अनुमति है या नहीं. उदाहरण के लिए, किसी फ़िल्म में रिलीज़ की सिर्फ़ एक तारीख होती है, लेकिन एक से ज़्यादा अभिनेता हो सकते हैं.
  • isSortable - इससे यह पता चलता है कि प्रॉपर्टी का इस्तेमाल, क्रम से लगाने के लिए किया जा सकता है. यह उन प्रॉपर्टी के लिए सही नहीं है जिन्हें दोहराया जा सकता है. उदाहरण के लिए, फ़िल्म के नतीजों को रिलीज़ की तारीख या ऑडियंस रेटिंग के हिसाब से क्रम में लगाया जा सकता है.
  • isFacetable - इससे पता चलता है कि प्रॉपर्टी का इस्तेमाल, facets जनरेट करने के लिए किया जा सकता है. पहलू का इस्तेमाल खोज के नतीजों को बेहतर बनाने के लिए किया जाता है. इससे उपयोगकर्ता शुरुआती नतीजों को देखता है और फिर उन नतीजों को और बेहतर बनाने के लिए शर्तें या पहलू जोड़ता है. यह विकल्प उन प्रॉपर्टी के लिए सही नहीं हो सकता जिनका टाइप ऑब्जेक्ट है. साथ ही, इस विकल्प को सेट करने के लिए isReturnable सही होना चाहिए. आखिर में, यह विकल्प सिर्फ़ enum, बूलियन, और टेक्स्ट प्रॉपर्टी के लिए काम करता है. उदाहरण के लिए, अपने सैंपल स्कीमा में, हम genre, actorName, userRating, और mpaaRating को फ़ेसटेबल बना सकते हैं, ताकि खोज नतीजों को इंटरैक्टिव तरीके से बेहतर बनाने के लिए उनका इस्तेमाल किया जा सके.
  • isWildcardSearchable से पता चलता है कि उपयोगकर्ता इस प्रॉपर्टी के लिए, वाइल्डकार्ड खोज कर सकते हैं. यह विकल्प सिर्फ़ टेक्स्ट प्रॉपर्टी पर उपलब्ध है. टेक्स्ट फ़ील्ड पर वाइल्डकार्ड खोज के काम करने का तरीका, exactMatchWithOperator फ़ील्ड में सेट की गई वैल्यू पर निर्भर करता है. अगर exactMatchWithOperator को true पर सेट किया जाता है, तो टेक्स्ट वैल्यू को एक ऐटॉमिक वैल्यू के तौर पर टोकन दिया जाता है और इसके आधार पर वाइल्डकार्ड सर्च की जाती है. उदाहरण के लिए, अगर टेक्स्ट वैल्यू science-fiction है, तो वाइल्डकार्ड क्वेरी science-* उससे मैच करेगी. अगर exactMatchWithOperator को false पर सेट किया जाता है, तो टेक्स्ट वैल्यू को टोकन के तौर पर दिखाया जाता है. साथ ही, हर टोकन के लिए वाइल्डकार्ड सर्च की जाती है. उदाहरण के लिए, अगर टेक्स्ट वैल्यू "साइंस-फ़िक्शन" है, तो वाइल्डकार्ड में पूछी गई क्वेरी sci* या fi*, आइटम से मैच होती है, लेकिन science-* उससे मेल नहीं खाती.

खोज के काम करने के तरीके के इन सामान्य पैरामीटर में बूलियन वैल्यू होती हैं. इन सभी की डिफ़ॉल्ट वैल्यू false होती है और इन्हें इस्तेमाल करने के लिए, true पर सेट होना चाहिए.

इस टेबल में वे बूलियन पैरामीटर दिखाए गए हैं जो movie ऑब्जेक्ट की सभी प्रॉपर्टी के लिए, true पर सेट किए गए हैं:

प्रॉपर्टी isReturnable isRepeatable isSortable isFacetable isWildcardSearchable
movieTitle सही सही
releaseDate सही सही
genre सही सही सही
duration सही
actorName सही सही सही सही
userRating सही सही
mpaaRating सही सही

genre और actorName, दोनों में isRepeatable true पर सेट है, क्योंकि एक फ़िल्म एक से ज़्यादा शैलियों की हो सकती है और आम तौर पर उसके एक से ज़्यादा कलाकार होते हैं. अगर किसी प्रॉपर्टी को बार-बार इस्तेमाल किया जा सकता है या बार-बार इस्तेमाल किए जा सकने वाले सब-ऑब्जेक्ट में शामिल किया गया है, तो उसे क्रम से नहीं लगाया जा सकता.

प्रकार तय करें

PropertyDefinition रेफ़रंस सेक्शन में, कई xxPropertyOptions की सूची दी गई है, जिनमें xx एक खास टाइप का है, जैसे कि boolean. प्रॉपर्टी का डेटा टाइप सेट करने के लिए, आपको सही डेटा-टाइप ऑब्जेक्ट तय करना होगा. किसी प्रॉपर्टी के लिए डेटा-टाइप ऑब्जेक्ट तय करने से, उस प्रॉपर्टी का डेटा टाइप तय हो जाता है. उदाहरण के लिए, movieTitle प्रॉपर्टी के लिए textPropertyOptions तय करने से पता चलता है कि फ़िल्म का टाइटल, टेक्स्ट टाइप का है. नीचे दिया गया स्निपेट, movieTitle प्रॉपर्टी दिखाता है, जिसमें textPropertyOptions डेटा टाइप सेट करता है.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    ...
  },
  ...
},

किसी प्रॉपर्टी में, उससे जुड़ा सिर्फ़ एक तरह का डेटा हो सकता है. उदाहरण के लिए, हमारे फ़िल्म स्कीमा में, releaseDate सिर्फ़ एक तारीख हो सकती है (जैसे, 2016-01-13) या कोई स्ट्रिंग (जैसे, January 13, 2016), लेकिन दोनों नहीं.

मूवी स्कीमा के सैंपल में, प्रॉपर्टी के लिए डेटा टाइप तय करने के लिए, डेटा-टाइप ऑब्जेक्ट दिए गए हैं:

प्रॉपर्टी डेटा-टाइप ऑब्जेक्ट
movieTitle textPropertyOptions
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions
mpaaRating textPropertyOptions

प्रॉपर्टी के लिए चुना गया डेटा टाइप, आपके इस्तेमाल के उदाहरणों के हिसाब से तय होता है. इस फ़िल्म स्कीमा की काल्पनिक स्थिति में, उपयोगकर्ताओं से उम्मीद की जाती है कि वे नतीजों को तारीख के हिसाब से क्रम में लगाएं. इसलिए, releaseDate एक तारीख ऑब्जेक्ट है. उदाहरण के लिए, अगर सभी सालों की जनवरी की रिलीज़ से दिसंबर की रिलीज़ की तुलना करने का अनुमान था, तो स्ट्रिंग फ़ॉर्मैट मददगार हो सकता था.

प्रकार के हिसाब से विकल्पों को कॉन्फ़िगर करें

PropertyDefinition रेफ़रंस सेक्शन में, हर टाइप के लिए उपलब्ध विकल्पों के बारे में बताया गया है. enumPropertyOptions में possibleValues वाली सूची को छोड़कर, ज़्यादातर टाइप के हिसाब से बने विकल्प ज़रूरी नहीं हैं. इसके अलावा, orderedRanking विकल्प की मदद से, वैल्यू को एक-दूसरे के हिसाब से रैंक किया जा सकता है. नीचे दिया गया स्निपेट, movieTitle प्रॉपर्टी दिखाता है, जिसमें textPropertyOptions डेटा टाइप सेट करता है. साथ ही, retrievalImportance टाइप के हिसाब से विकल्प दिखाता है.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    ...
  },
  ...
}

यहां स्कीमा के सैंपल में इस्तेमाल किए जाने वाले, अलग-अलग तरह के कुछ और विकल्प दिए गए हैं:

प्रॉपर्टी Type टाइप के हिसाब से विकल्प
movieTitle textPropertyOptions retrievalImportance
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions orderedRanking, maximumValue
mpaaRating textPropertyOptions

ऑपरेटर के विकल्प तय करना

टाइप के हिसाब से दिए गए विकल्पों के अलावा, हर टाइप में वैकल्पिक विकल्प भी होते हैं operatorOptions इन विकल्पों में बताया जाता है कि प्रॉपर्टी को खोज ऑपरेटर के तौर पर कैसे इस्तेमाल किया जाता है. इस स्निपेट में movieTitle प्रॉपर्टी दिखती है, जिसमें textPropertyOptions डेटा टाइप सेट करता है. साथ ही, इसमें retrievalImportance और operatorOptions टाइप के लिए खास विकल्प दिखाए जाते हैं.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    "operatorOptions": {
      "operatorName": "title"
    }
  },
  ...
}

हर operatorOptions में operatorName होता है, जैसे कि movieTitle के लिए title. ऑपरेटर का नाम, प्रॉपर्टी का खोज ऑपरेटर होता है. खोज ऑपरेटर वह असल पैरामीटर होता है जिसका इस्तेमाल आपको खोज को सटीक बनाने के लिए करना होता है. उदाहरण के लिए, टाइटल के हिसाब से फ़िल्में खोजने के लिए, उपयोगकर्ता title:movieName टाइप करेगा, जहां movieName किसी फ़िल्म का नाम है.

ऑपरेटर के नाम का प्रॉपर्टी के नाम से अलग होना ज़रूरी नहीं है. इसके बजाय, आपको उन ऑपरेटर के नामों का इस्तेमाल करना चाहिए जो आपके संगठन के उपयोगकर्ताओं के सबसे ज़्यादा इस्तेमाल किए जाने वाले शब्दों के बारे में बताते हों. उदाहरण के लिए, अगर उपयोगकर्ता किसी फ़िल्म के टाइटल के लिए "title" के बजाय "name" शब्द पसंद करते हैं, तो ऑपरेटर का नाम "name" पर सेट होना चाहिए.

कई प्रॉपर्टी के लिए ऑपरेटर के एक ही नाम का इस्तेमाल किया जा सकता है. ऐसा तब तक किया जा सकता है, जब तक सभी प्रॉपर्टी का एक ही टाइप इस्तेमाल हो जाता है. किसी क्वेरी के दौरान, शेयर किए गए ऑपरेटर नाम का इस्तेमाल करने पर, उस ऑपरेटर नाम का इस्तेमाल करने वाली सभी प्रॉपर्टी फ़ेच की जाती हैं. उदाहरण के लिए, मान लें कि मूवी ऑब्जेक्ट में plotSummary और plotSynopsis प्रॉपर्टी थीं और इनमें से हर प्रॉपर्टी का plot का operatorName था. जब तक ये दोनों प्रॉपर्टी टेक्स्ट (textPropertyOptions) हैं, तब तक plot खोज ऑपरेटर का इस्तेमाल करने वाली एक क्वेरी, इन दोनों को फिर से हासिल करती है.

operatorName के अलावा, जिन प्रॉपर्टी को क्रम में लगाया जा सकता है उनके operatorOptions में lessThanOperatorName और greaterThanOperatorName फ़ील्ड हो सकते हैं. सबमिट किए गए मान से तुलना के आधार पर क्वेरी बनाने के लिए उपयोगकर्ता इन विकल्पों का इस्तेमाल कर सकते हैं.

आखिर में, operatorOptions में textOperatorOptions के लिए, exactMatchWithOperator फ़ील्ड मौजूद है. अगर exactMatchWithOperator को true पर सेट किया जाता है, तो क्वेरी स्ट्रिंग प्रॉपर्टी की पूरी वैल्यू से मेल खानी चाहिए, न कि सिर्फ़ टेक्स्ट में. ऑपरेटर खोजों और पहलू मिलान में टेक्स्ट मान को एक ऐटॉमिक वैल्यू माना जाता है.

उदाहरण के लिए, शैली प्रॉपर्टी वाली किताब या फ़िल्म के ऑब्जेक्ट इंडेक्स करें. इसमें "साइंस-फ़िक्शन", "साइंस", और "फ़िक्शन" शैली शामिल हो सकती हैं. अगर exactMatchWithOperator को false पर सेट किया गया है या हटाया गया है, तो किसी शैली को खोजने या "विज्ञान" या "फ़िक्शन" में से किसी एक को चुनने पर भी "साइंस-फ़िक्शन" के नतीजे दिखेंगे. ऐसा इसलिए, क्योंकि टेक्स्ट को टोकन माना जाता है और "साइंस-फ़िक्शन" में "साइंस" और "फ़िक्शन" टोकन मौजूद होते हैं. जब exactMatchWithOperator, true होता है, तो टेक्स्ट को सिंगल टोकन माना जाता है. इसलिए, "साइंस" और "फ़िक्शन" दोनों ही "साइंस-फ़िक्शन" से मेल नहीं खाते.

(ज़रूरी नहीं) displayOptions सेक्शन जोड़ें

किसी भी propertyDefinition सेक्शन के आखिर में एक वैकल्पिक displayOptions सेक्शन होता है. इस सेक्शन में एक displayLabel स्ट्रिंग होती है. displayLabel, प्रॉपर्टी के लिए एक सुझाया गया और उपयोगकर्ता के लिए आसान टेक्स्ट लेबल है. अगर प्रॉपर्टी को ObjectDisplayOptions का इस्तेमाल करके, दिखाने के लिए कॉन्फ़िगर किया गया है, तो यह लेबल प्रॉपर्टी के सामने दिखता है. अगर प्रॉपर्टी को डिसप्ले के लिए कॉन्फ़िगर किया गया है और displayLabel के बारे में नहीं बताया गया है, तो सिर्फ़ प्रॉपर्टी की वैल्यू ही दिखती है.

नीचे दिया गया स्निपेट, movieTitle प्रॉपर्टी दिखाता है, जिसका displayLabel 'Title' पर सेट है.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    "operatorOptions": {
       "operatorName": "title"
    }
},
  "displayOptions": {
    "displayLabel": "Title"
  }
},

सैंपल स्कीमा में movie ऑब्जेक्ट की सभी प्रॉपर्टी के लिए, displayLabel वैल्यू ये हैं:

प्रॉपर्टी displayLabel
movieTitle Title
releaseDate Release date
genre Genre
duration Run length
actorName Actor
userRating Audience score
mpaaRating MPAA rating

(ज़रूरी नहीं) suggestionFilteringOperators[] सेक्शन जोड़ें

propertyDefinition सेक्शन के आखिर में एक वैकल्पिक suggestionFilteringOperators[] सेक्शन होता है. इस सेक्शन का इस्तेमाल करके, ऐसी प्रॉपर्टी तय करें जिसका इस्तेमाल अपने-आप पूरा होने वाले सुझावों को फ़िल्टर करने के लिए किया जाता है. उदाहरण के लिए, लोगों की पसंद की मूवी शैली के हिसाब से सुझाव फ़िल्टर करने के लिए, genre का ऑपरेटर तय किया जा सकता है. इसके बाद, जब लोग अपनी खोज क्वेरी टाइप करते हैं, तो सिर्फ़ उनकी पसंदीदा शैली से मेल खाने वाली मूवी को, अपने-आप पूरा होने वाले सुझावों के हिस्से के तौर पर दिखाया जाता है.

स्कीमा को रजिस्टर करना

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

डेटा सोर्स आईडी का इस्तेमाल करके, स्कीमा को रजिस्टर करने के लिए, UpdateSchema का अनुरोध करें.

जैसा कि UpdateSchema के रेफ़रंस पेज पर बताया गया है, अपना स्कीमा रजिस्टर करने के लिए, यह एचटीटीपी अनुरोध जारी करें:

PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema

आपके अनुरोध के मुख्य हिस्से में, यहां दी गई जानकारी शामिल होनी चाहिए:

{
  "validateOnly": // true or false,
  "schema": {
    // ... Your complete schema object ...
  }
}

अपने स्कीमा को रजिस्टर किए बिना, उसकी वैधता की जांच करने के लिए validateOnly विकल्प का इस्तेमाल करें.

अपना डेटा इंडेक्स करना

स्कीमा रजिस्टर हो जाने के बाद, इंडेक्स कॉल का इस्तेमाल करके डेटा सोर्स में जानकारी भरें. आम तौर पर इंडेक्स करने की प्रोसेस, आपके कॉन्टेंट कनेक्टर में की जाती है.

मूवी स्कीमा का इस्तेमाल करके, किसी मूवी के लिए REST API इंडेक्स करने का अनुरोध ऐसा दिखेगा:

{
  "name": "datasource/<data_source_id>/items/titanic",
  "acl": {
    "readers": [
      {
        "gsuitePrincipal": {
          "gsuiteDomain": true
        }
      }
    ]
  },
  "metadata": {
    "title": "Titanic",
    "sourceRepositoryUrl": "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"
}

ध्यान दें कि objectType फ़ील्ड में movie का मान, स्कीमा में मौजूद ऑब्जेक्ट परिभाषा के नाम से कैसे मेल खाता है. इन दोनों वैल्यू को मैच करने से, Cloud Search यह जान पाता है कि इंडेक्स करने के दौरान, किस स्कीमा ऑब्जेक्ट का इस्तेमाल करना है.

यह भी ध्यान दें कि releaseDate स्कीमा प्रॉपर्टी को इंडेक्स करने के लिए, year, month, और day की उन सब-प्रॉपर्टी का इस्तेमाल कैसे किया जाता है जिन्हें यह इनहेरिट करता है, क्योंकि इसे date के तौर पर डेटा टाइप के तौर पर तय किया जाता है. ऐसा करने के लिए, datePropertyOptions का इस्तेमाल करके डेटा टाइप तय किया जाता है. हालांकि, स्कीमा में year, month, और day के बारे में नहीं बताया गया है, इसलिए आप इनमें से किसी भी प्रॉपर्टी के बारे में क्वेरी नहीं कर सकते (उदाहरण के लिए, year) अलग से किया जा सकता है.

साथ ही, यह भी ध्यान रखें कि बार-बार इस्तेमाल की जा सकने वाली प्रॉपर्टी actorName को वैल्यू की सूची का इस्तेमाल करके, कैसे इंडेक्स किया जाता है.

इंडेक्स करने से जुड़ी संभावित समस्याओं की पहचान करना

स्कीमा और इंडेक्स करने से जुड़ी दो सबसे आम समस्याएं ये हैं:

  • आपके इंडेक्स करने के अनुरोध में एक स्कीमा ऑब्जेक्ट या प्रॉपर्टी का नाम है, जिसे स्कीमा सेवा के साथ रजिस्टर नहीं किया गया था. इस समस्या की वजह से प्रॉपर्टी या ऑब्जेक्ट को अनदेखा कर दिया जाता है.

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

कई तरह की क्वेरी की मदद से अपने स्कीमा की जांच करना

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

खोज क्वेरी की पुष्टि करने वाला सर्च इंटरफ़ेस बनाने के लिए, सर्च इंटरफ़ेस देखें

इस सेक्शन में कई अलग-अलग उदाहरण क्वेरी शामिल हैं जिनका इस्तेमाल आप किसी फ़िल्म स्कीमा की जांच करने के लिए कर सकते हैं.

सामान्य क्वेरी से टेस्ट करें

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

किसी ऑपरेटर की मदद से टेस्ट करें

क्वेरी में ऑपरेटर जोड़ने से, उस ऑपरेटर की वैल्यू से मेल खाने वाले आइटम के नतीजे सीमित हो जाते हैं. उदाहरण के लिए, किसी खास कलाकार की सभी फ़िल्में ढूंढने के लिए, actor ऑपरेटर का इस्तेमाल किया जा सकता है. सर्च इंटरफ़ेस का इस्तेमाल करके, इस ऑपरेटर क्वेरी को आसानी से ऑपरेटर=वैल्यू के पेयर में टाइप करके किया जा सकता है. जैसे, "actor:Zane" और फिर "actor:Zane" दबाकर. खोज नतीजों में वे सभी फ़िल्में दिखाई जानी चाहिए जिनमें ज़ेन, अभिनेता के तौर पर काम करता है.

स्कीमा को बेहतर बनाएं

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

  • उस फ़ील्ड को इंडेक्स करना जिसे पहले इंडेक्स नहीं किया गया था. उदाहरण के लिए, आपके उपयोगकर्ता निर्देशक के नाम के आधार पर बार-बार फ़िल्में खोज सकते हैं. इसलिए, आपको डायरेक्टर के नाम के हिसाब से अपने स्कीमा में बदलाव करना पड़ सकता है.
  • लोगों के सुझाव, शिकायत या राय के आधार पर खोज ऑपरेटर के नाम बदलना. ऑपरेटर के नाम, इस्तेमाल में आसान होते हैं. अगर आपके उपयोगकर्ताओं को ऑपरेटर का गलत नाम लगातार "याद आता" है, तो हो सकता है कि आप उसे बदलने के बारे में सोचें.

स्कीमा में बदलाव होने के बाद, इंडेक्स को फिर से इंडेक्स करना

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

  • ऑपरेटर के नाम.
  • पूर्णांक और ज़्यादा से ज़्यादा वैल्यू.
  • पूर्णांक और enum के मुताबिक रैंकिंग.
  • डेटा रीफ़्रेश करने के विकल्प.
  • दिखाने के विकल्प.

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

  • किसी नई प्रॉपर्टी या ऑब्जेक्ट को जोड़ना या हटाना
  • isReturnable, isFacetable या isSortable को false से true में बदला जा रहा है.

आपको isFacetable या isSortable को सिर्फ़ तब true पर सेट करना चाहिए, जब आपके पास इस्तेमाल का उदाहरण और ज़रूरत साफ़ तौर पर हो.

आखिर में, किसी प्रॉपर्टी को isSuggestable मार्क करके अपना स्कीमा अपडेट करने पर, आपको अपने डेटा को फिर से इंडेक्स करना होगा. इससे उस प्रॉपर्टी के लिए ऑटोकंप्लीट सुविधा के इस्तेमाल में देरी होती है.

प्रॉपर्टी में ऐसे बदलाव जिनकी अनुमति नहीं है

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

  • प्रॉपर्टी के डेटा का टाइप.
  • प्रॉपर्टी का नाम.
  • exactMatchWithOperator सेटिंग.
  • retrievalImportance सेटिंग.

हालांकि, इस सीमा को पूरा करने का एक तरीका है.

स्कीमा में मुश्किल बदलाव करना

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

ऐसी स्थितियों में, जहां आपको अपने स्कीमा में किसी तरह का अस्वीकार बदलाव करना ज़रूरी है, आप अक्सर अनुमति वाले बदलावों की एक सीरीज़ बना सकते हैं. ये बदलाव वही असर डालते हैं. आम तौर पर, इसमें पहले इंडेक्स की गई प्रॉपर्टी को पुरानी ऑब्जेक्ट डेफ़िनिशन से नई में माइग्रेट करना शामिल होता है. इसके बाद, इंडेक्स करने का ऐसा अनुरोध भेजना जो सिर्फ़ नई प्रॉपर्टी का इस्तेमाल करता है.

यहां बताया गया है कि किसी प्रॉपर्टी का डेटा टाइप या नाम कैसे बदला जाए:

  1. अपने स्कीमा में ऑब्जेक्ट डेफ़िनिशन में नई प्रॉपर्टी जोड़ें. जिस प्रॉपर्टी को बदलना है उसके लिए, किसी दूसरे नाम का इस्तेमाल करें.
  2. UpdateSchema अनुरोध को नई परिभाषा के साथ जारी करें. अनुरोध में, नई और पुरानी, दोनों प्रॉपर्टी के साथ पूरा स्कीमा भेजना न भूलें.
  3. डेटा स्टोर करने की जगह से इंडेक्स को बैकफ़िल करना. इंडेक्स में डेटा बैकफ़िल करने के लिए, नई प्रॉपर्टी का इस्तेमाल करके इंडेक्स करने के सभी अनुरोध भेजें. हालांकि, पुरानी प्रॉपर्टी का इस्तेमाल नहीं करें, क्योंकि इससे क्वेरी के मैच की दो बार गिनती हो जाएगी.

    1. डेटा बैकफ़िल करते समय, नई प्रॉपर्टी देखें और अलग-अलग तरह की प्रॉपर्टी से बचने के लिए, पुरानी प्रॉपर्टी पर डिफ़ॉल्ट रूप से सेट करें.
    2. डेटा बैकफ़िल होने के बाद, पुष्टि करने के लिए टेस्ट क्वेरी चलाएं.
  4. पुरानी प्रॉपर्टी मिटाएं. प्रॉपर्टी के पुराने नाम के बिना, एक और UpdateSchema अनुरोध जारी करें. साथ ही, इंडेक्स करने के आने वाले अनुरोधों में पुराने प्रॉपर्टी नाम का इस्तेमाल बंद कर दें.

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

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

साइज़ की सीमाओं के बारे में जानना

Cloud Search, स्ट्रक्चर्ड डेटा ऑब्जेक्ट और स्कीमा के साइज़ पर सीमाएं लागू करता है. ये सीमाएं हैं:

  • टॉप लेवल के ज़्यादा से ज़्यादा 10 ऑब्जेक्ट हो सकते हैं.
  • स्ट्रक्चर्ड डेटा के क्रम में ज़्यादा से ज़्यादा 10 लेवल डाले जा सकते हैं.
  • किसी ऑब्जेक्ट में फ़ील्ड की कुल संख्या 1,000 तक हो सकती है. इसमें प्रिमिटिव फ़ील्ड की संख्या के साथ-साथ, नेस्ट किए गए हर ऑब्जेक्ट में मौजूद फ़ील्ड की कुल संख्या शामिल होती है.

अगले चरण

यहां कुछ ऐसे तरीके बताए गए हैं जिन्हें आज़माया जा सकता है:

  1. अपने स्कीमा की जांच करने के लिए, सर्च इंटरफ़ेस बनाएं.

  2. खोज की क्वालिटी को बेहतर बनाने के लिए, अपना स्कीमा ट्यून करें.

  3. क्वेरी की बेहतर व्याख्या के लिए स्कीमा तैयार करें.

  4. _dictionaryEntry स्कीमा का इस्तेमाल करने का तरीका जानें. इससे आपकी कंपनी में आम तौर पर इस्तेमाल होने वाले शब्दों के लिए, समानार्थी शब्द तय किए जा सकते हैं. _dictionaryEntry स्कीमा का इस्तेमाल करने के लिए, एक जैसे मतलब वाले शब्द तय करें देखें.

  5. कोई कनेक्टर बनाएं.