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

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

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

ऑब्जेक्ट, स्कीमा की बुनियादी इकाई होती है. "मूवी" या "व्यक्ति" जैसे लॉजिकल स्ट्रक्चर, ऑब्जेक्ट होते हैं. हर ऑब्जेक्ट में, title, duration या name जैसी प्रॉपर्टी होती हैं.

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

स्कीमा, objectDefinitions टैग में मौजूद ऑब्जेक्ट की परिभाषाओं की सूची होती है.

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

हर ऑब्जेक्ट के लिए यूनीक नाम का इस्तेमाल करें. जैसे, movie. स्कीमा सेवा, इन नामों का इस्तेमाल कुंजियों के तौर पर करती है. ObjectDefinition देखें.

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

propertyDefinitions सेक्शन में, टाइटल और रिलीज़ होने की तारीख जैसी प्रॉपर्टी तय करें. freshnessOptions (रैंकिंग) और displayOptions (यूज़र इंटरफ़ेस लेबल) के लिए, options का इस्तेमाल करें.

{
  "objectDefinitions": [{
    "name": "movie",
    "propertyDefinitions": [
      {
        "name": "movieTitle",
        "isReturnable": 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"
          }
        }
      }
    ]
  }]
}

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

  • name स्ट्रिंग.
  • टाइप से जुड़े विकल्प (जैसे, isReturnable).
  • टाइप और टाइप के हिसाब से विकल्प (जैसे, textPropertyOptions).
  • operatorOptions सर्च ऑपरेटर के लिए.
  • displayOptions का इस्तेमाल किया जाता है.

अलग-अलग ऑब्जेक्ट के लिए, प्रॉपर्टी के नामों का फिर से इस्तेमाल किया जा सकता है. उदाहरण के लिए, movieTitle, movie ऑब्जेक्ट और person ऑब्जेक्ट, दोनों की फ़िल्मोग्राफ़ी में दिख सकता है.

टाइप के हिसाब से विकल्प जोड़ना

PropertyDefinition में, किसी प्रॉपर्टी के लिए खोज की सुविधा को कॉन्फ़िगर करने के लिए बूलियन विकल्प शामिल होते हैं. इससे कोई फ़र्क़ नहीं पड़ता कि प्रॉपर्टी किस तरह की है. ये विकल्प डिफ़ॉल्ट रूप से false पर सेट होते हैं. इनका इस्तेमाल करने के लिए, इन्हें true पर सेट करना होगा.

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

टाइप तय करना

सही प्रॉपर्टी के विकल्प वाला ऑब्जेक्ट तय करके, डेटा टाइप सेट करें. उदाहरण के लिए, textPropertyOptions). अगर आपको सभी संभावित वैल्यू पता हैं, तो इनम (enumPropertyOptions) का इस्तेमाल करें. किसी प्रॉपर्टी में सिर्फ़ एक तरह का डेटा हो सकता है.

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

operatorOptions में बताया गया है कि कोई प्रॉपर्टी, सर्च ऑपरेटर के तौर पर कैसे काम करती है.

हर operatorOptions के लिए operatorName की ज़रूरत होती है. जैसे, title). यह वह पैरामीटर है जिसे उपयोगकर्ता क्वेरी में टाइप करते हैं. उदाहरण के लिए, title:titanic). इनके लिए ऐसे नाम इस्तेमाल करें जिन्हें समझना आसान हो और इन्हें उपयोगकर्ताओं को दिखाएं.

एक ही तरह की प्रॉपर्टी के लिए, एक operatorName शेयर किया जा सकता है. उस नाम का इस्तेमाल करके की गई क्वेरी से, मिलती-जुलती सभी प्रॉपर्टी के नतीजे मिलते हैं.

तुलना से जुड़ी क्वेरी के लिए, क्रम से लगाई जा सकने वाली प्रॉपर्टी में lessThanOperatorName और greaterThanOperatorName शामिल हो सकती हैं. टेक्स्ट प्रॉपर्टी, पूरी वैल्यू को एक टोकन के तौर पर इस्तेमाल करने के लिए exactMatchWithOperator का इस्तेमाल कर सकती हैं.

डिसप्ले के विकल्प जोड़ना

displayOptions सेक्शन में एक displayLabel शामिल है. हालांकि, यह सेक्शन ज़रूरी नहीं है. यह उपयोगकर्ता के लिए आसान लेबल है, जो खोज के नतीजों में दिखता है.

सुझाव फ़िल्टर करने वाले ऑपरेटर जोड़ना

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

अपना स्कीमा रजिस्टर करना

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

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

validateOnly: true का इस्तेमाल करके, स्कीमा को रजिस्टर किए बिना उसकी जांच करें.

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

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

इंडेक्स करने के अनुरोध का उदाहरण:

{
  "name": "datasource/<data_source_id>/items/titanic",
  "metadata": {
    "title": "Titanic",
    "objectType": "movie"
  },
  "structuredData": {
    "object": {
      "properties": [{
        "name": "movieTitle",
        "textValues": { "values": ["Titanic"] }
      }]
    }
  },
  "itemType": "CONTENT_ITEM"
}

अपने स्कीमा की जांच करना

प्रोडक्शन से पहले, छोटी रिपॉज़िटरी के साथ टेस्ट करें. ऐसी एसीएल बनाएं जो टेस्ट यूज़र के लिए नतीजों को सीमित करती हो.

  • सामान्य क्वेरी: किसी स्ट्रिंग को खोजें (उदाहरण के लिए, "टाइटैनिक") डालकर, मिलते-जुलते सभी आइटम देखें.
  • ऑपरेटर क्वेरी: किसी ऑपरेटर का इस्तेमाल करें. उदाहरण के लिए, actor:Zane) का इस्तेमाल करें.

अपने स्कीमा को बेहतर बनाना

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

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

इन बदलावों के लिए, आपको फिर से इंडेक्स करने की ज़रूरत नहीं है:

  • ऑपरेटर के नाम.
  • संख्या से जुड़ी सीमाएं.
  • ऑर्डर की गई रैंकिंग.
  • अपडेट करने या डिसप्ले के विकल्प.

इनके लिए फिर से इंडेक्स करना ज़रूरी है:

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

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

इंडेक्स को खराब करने वाले या गलत नतीजे दिखाने वाले बदलावों की अनुमति नहीं है. इनमें ये शामिल हैं:

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

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

अनुमति न होने पर बदलाव करने के लिए, प्रॉपर्टी को पुरानी परिभाषा से नई परिभाषा में माइग्रेट करें:

  1. स्कीमा में, किसी दूसरे नाम वाली नई प्रॉपर्टी जोड़ें.
  2. स्कीमा को नई और पुरानी, दोनों प्रॉपर्टी के साथ रजिस्टर करें.
  3. सिर्फ़ नई प्रॉपर्टी का इस्तेमाल करके इंडेक्स को बैकफ़िल करें.
  4. स्कीमा से पुरानी प्रॉपर्टी मिटाएं.
  5. नई प्रॉपर्टी का नाम इस्तेमाल करने के लिए, अपनी क्वेरी का कोड अपडेट करें.

Cloud Search, मिटाए गए आइटम को 30 दिनों तक रिकॉर्ड करता है, ताकि उन्हें फिर से इस्तेमाल करने से जुड़ी समस्याओं को रोका जा सके.

साइज़ से जुड़ी सीमाएं

  • ज़्यादा से ज़्यादा 10 टॉप-लेवल ऑब्जेक्ट.
  • ज़्यादा से ज़्यादा 10 लेवल तक नेस्ट किया जा सकता है.
  • हर ऑब्जेक्ट के लिए ज़्यादा से ज़्यादा 1,000 फ़ील्ड (नेस्ट किए गए फ़ील्ड शामिल हैं).

अगले चरण

  1. सर्च इंटरफ़ेस बनाएं.
  2. खोज की क्वालिटी को बेहतर बनाना.
  3. क्वेरी को सही तरीके से समझने के लिए, स्कीमा को स्ट्रक्चर करें.
  4. समानार्थी शब्दों की परिभाषा बताओ.