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

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, उसे इंडेक्स करने के अनुरोध में दिए गए यूआरएल का इस्तेमाल करके, उपयोगकर्ता को असल आइटम पर भेजता है.

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

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

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

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

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

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 का सही होना ज़रूरी है. आखिर में, यह विकल्प सिर्फ़ एनम, बूलियन, और टेक्स्ट प्रॉपर्टी के लिए काम करता है. उदाहरण के लिए, हमारे सैंपल स्कीमा में हम 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" },
    ...
  },
  ...
}

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

प्रॉपर्टी टाइप टाइप के हिसाब से विकल्प
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 मूवी का नाम होगा.

यह ज़रूरी नहीं है कि ऑपरेटर के नाम और प्रॉपर्टी का नाम एक ही हो. इसके बजाय, आपको ऑपरेटर के ऐसे नामों का इस्तेमाल करना चाहिए जो आपके संगठन में इस्तेमाल किए जाने वाले सबसे ज़्यादा इस्तेमाल किए गए शब्द हों. उदाहरण के लिए, अगर आपके उपयोगकर्ता किसी फ़िल्म के टाइटल के लिए "टाइटल" के बजाय "नाम" पसंद करते हैं, तो ऑपरेटर का नाम "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 को 'टाइटल' पर सेट किया गया है.

{
  "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 की सब-प्रॉपर्टी का इस्तेमाल कैसे होता है. ये सब-प्रॉपर्टी इसे इनहेरिट की जाती हैं, क्योंकि इसे datePropertyOptions का इस्तेमाल करके, date डेटा टाइप के तौर पर तय किया जाता है. हालांकि, स्कीमा में year, month, और day के बारे में नहीं बताया गया है. इसलिए, इनमें से किसी एक प्रॉपर्टी पर क्वेरी नहीं की जा सकती (उदाहरण के लिए, year) अलग-अलग हैं.

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

इंडेक्स करने में आ सकने वाली समस्याओं का पता लगाना

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

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

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

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

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

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

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

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

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

किसी ऑपरेटर से जांच करना

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

अपना स्कीमा ट्यून करें

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

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

स्कीमा बदलने के बाद पेज को फिर से इंडेक्स करना

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

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

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

  • नई प्रॉपर्टी या ऑब्जेक्ट जोड़ना या हटाना
  • 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. कोई कनेक्टर बनाएं.