Google Cloud Search स्कीमा, JSON स्ट्रक्चर होता है. यह आपके डेटा को इंडेक्स करने और उस पर क्वेरी करने के लिए, ऑब्जेक्ट, प्रॉपर्टी, और विकल्पों को तय करता है. आपका कॉन्टेंट कनेक्टर, आपकी रिपॉज़िटरी से डेटा पढ़ता है. साथ ही, रजिस्टर किए गए स्कीमा के आधार पर डेटा को स्ट्रक्चर करता है और उसे इंडेक्स करता है.
एपीआई को JSON स्कीमा ऑब्जेक्ट देकर स्कीमा बनाया जा सकता है. इसके बाद, उसे रजिस्टर किया जा सकता है. डेटा को इंडेक्स करने से पहले, आपको अपनी हर रिपॉज़िटरी के लिए स्कीमा ऑब्जेक्ट रजिस्टर करना होगा.
इस दस्तावेज़ में स्कीमा बनाने के तरीके के बारे में बुनियादी जानकारी दी गई है. खोज के अनुभव को बेहतर बनाने के लिए, अपने स्कीमा को ट्यून करने के तरीके के बारे में जानने के लिए, खोज के नतीजों की क्वालिटी बेहतर बनाना लेख पढ़ें.
स्कीमा बनाएं
Cloud Search स्कीमा बनाने के लिए, यहां दिए गए चरणों का पालन करें:
- उपयोगकर्ता के संभावित व्यवहार की पहचान करना
- डेटा सोर्स को शुरू करना
- स्कीमा बनाना
- सैंपल स्कीमा
- अपना स्कीमा रजिस्टर करना
- अपने डेटा को इंडेक्स करना
- अपने स्कीमा की जांच करना
- अपने स्कीमा को बेहतर बनाना
उपयोगकर्ता के संभावित व्यवहार की पहचान करना
उपयोगकर्ता किस तरह की क्वेरी करते हैं, इसका अनुमान लगाने से आपको स्कीमा बनाने की रणनीति तय करने में मदद मिलती है.
उदाहरण के लिए, किसी फ़िल्म के डेटाबेस के ख़िलाफ़ क्वेरी जारी करते समय, आपको यह अनुमान लगाना पड़ सकता है कि उपयोगकर्ता "मुझे रॉबर्ट रेडफ़ोर्ड की सभी फ़िल्में दिखाओ" जैसी क्वेरी कर सकता है. इसलिए, आपके स्कीमा में "किसी खास अभिनेता की सभी फ़िल्में" के आधार पर क्वेरी के नतीजे दिखाने की सुविधा होनी चाहिए.
उपयोगकर्ता के व्यवहार के पैटर्न को दिखाने के लिए, अपने स्कीमा को तय करने के लिए, ये काम करें:
- अलग-अलग उपयोगकर्ताओं की ओर से की गई, अलग-अलग तरह की क्वेरी का आकलन करें.
- उन ऑब्जेक्ट की पहचान करें जिनका इस्तेमाल क्वेरी में किया जा सकता है. ऑब्जेक्ट, मिलते-जुलते डेटा के लॉजिकल सेट होते हैं. जैसे, फ़िल्मों के डेटाबेस में मौजूद कोई फ़िल्म.
- उन प्रॉपर्टी और वैल्यू की पहचान करें जिनसे ऑब्जेक्ट बना है. साथ ही, यह भी पता लगाएं कि क्वेरी में उनका इस्तेमाल किया जा सकता है या नहीं. प्रॉपर्टी, ऑब्जेक्ट के इंडेक्स किए जा सकने वाले एट्रिब्यूट होते हैं. इनमें प्रिमिटिव वैल्यू या अन्य ऑब्जेक्ट शामिल हो सकते हैं. उदाहरण के लिए, किसी मूवी ऑब्जेक्ट में मूवी का टाइटल और रिलीज़ होने की तारीख जैसी प्रॉपर्टी, प्रिमिटिव वैल्यू के तौर पर हो सकती हैं. मूवी ऑब्जेक्ट में अन्य ऑब्जेक्ट भी शामिल हो सकते हैं. जैसे, कलाकार. इनकी अपनी प्रॉपर्टी होती हैं. जैसे, उनका नाम या भूमिका.
- प्रॉपर्टी के लिए मान्य वैल्यू के उदाहरणों की पहचान करना. वैल्यू, किसी प्रॉपर्टी के लिए इंडेक्स किया गया असल डेटा होता है. उदाहरण के लिए, आपके डेटाबेस में किसी फ़िल्म का टाइटल "Raiders of the Lost Ark" हो सकता है.
- यह तय करें कि आपके उपयोगकर्ताओं को किस तरह से क्रम में लगाने और रैंक करने के विकल्प चाहिए. उदाहरण के लिए, फ़िल्मों के बारे में क्वेरी करते समय, उपयोगकर्ता उन्हें रिलीज़ होने की तारीख के हिसाब से क्रम में लगाना और दर्शकों की रेटिंग के हिसाब से रैंक करना चाहें. उन्हें टाइटल के हिसाब से वर्णमाला के क्रम में लगाने की ज़रूरत नहीं है.
- (ज़रूरी नहीं) देखें कि क्या आपकी कोई प्रॉपर्टी, खोज के लिए ज़्यादा सटीक कॉन्टेक्स्ट दिखाती है. जैसे, उपयोगकर्ताओं की नौकरी की भूमिका या विभाग. इससे कॉन्टेक्स्ट के आधार पर, अपने-आप पूरा होने वाले सुझाव दिए जा सकते हैं. उदाहरण के लिए, फ़िल्मों का डेटाबेस खोजने वाले लोगों को सिर्फ़ किसी खास तरह की फ़िल्मों में दिलचस्पी हो सकती है. उपयोगकर्ता यह तय करेंगे कि उन्हें किस तरह के कॉन्टेंट के लिए खोज के नतीजे चाहिए. ऐसा हो सकता है कि वे इसे अपनी उपयोगकर्ता प्रोफ़ाइल के हिस्से के तौर पर तय करें. इसके बाद, जब कोई उपयोगकर्ता फ़िल्मों के बारे में क्वेरी टाइप करना शुरू करता है, तो उसे अपने-आप पूरे होने वाले सुझावों के तौर पर, सिर्फ़ उसकी पसंदीदा शैली वाली फ़िल्में दिखाई जाती हैं. जैसे,"ऐक्शन फ़िल्में".
- इन ऑब्जेक्ट, प्रॉपर्टी, और उदाहरण वैल्यू की एक सूची बनाएं. इनका इस्तेमाल खोजों में किया जा सकता है. (इस सूची का इस्तेमाल कैसे किया जाता है, इस बारे में ज़्यादा जानने के लिए, ऑपरेटर के विकल्प तय करना सेक्शन देखें.)
डेटा सोर्स को शुरू करना
डेटा सोर्स, किसी ऐसी रिपॉज़िटरी के डेटा को दिखाता है जिसे इंडेक्स किया गया है और 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- इससे पता चलता है कि प्रॉपर्टी, ऐसे डेटा की पहचान करती है जिसे Query API के ज़रिए खोज के नतीजों में दिखाया जाना चाहिए. उदाहरण के तौर पर दी गई सभी फ़िल्मों की प्रॉपर्टी को लौटाया जा सकता है. जिन प्रॉपर्टी को वापस नहीं किया जा सकता उनका इस्तेमाल, खोज या रैंकिंग के नतीजों के लिए किया जा सकता है. हालांकि, इन्हें उपयोगकर्ता को वापस नहीं किया जाता.isRepeatable- इससे पता चलता है कि प्रॉपर्टी के लिए एक से ज़्यादा वैल्यू इस्तेमाल की जा सकती हैं या नहीं. उदाहरण के लिए, किसी फ़िल्म की रिलीज़ की तारीख सिर्फ़ एक होती है, लेकिन उसमें कई ऐक्टर हो सकते हैं.isSortable- इससे पता चलता है कि प्रॉपर्टी का इस्तेमाल, क्रम से लगाने के लिए किया जा सकता है. यह उन प्रॉपर्टी के लिए सही नहीं हो सकता जिन्हें दोहराया जा सकता है. उदाहरण के लिए, फ़िल्मों के नतीजों को रिलीज़ होने की तारीख या ऑडियंस की रेटिंग के हिसाब से क्रम में लगाया जा सकता है.isFacetable- इससे पता चलता है कि इस प्रॉपर्टी का इस्तेमाल, फ़ैसेट जनरेट करने के लिए किया जा सकता है. फ़ेसट का इस्तेमाल खोज के नतीजों को बेहतर बनाने के लिए किया जाता है. इससे उपयोगकर्ता को शुरुआती नतीजे दिखते हैं. इसके बाद, वह उन नतीजों को और बेहतर बनाने के लिए, मानदंड या फ़ेसट जोड़ता है. यह विकल्प उन प्रॉपर्टी के लिए सही नहीं हो सकता जिनका टाइप ऑब्जेक्ट है. साथ ही, इस विकल्प को सेट करने के लिएisReturnableको सही होना चाहिए. आखिर में, यह विकल्प सिर्फ़ enum, boolean, और टेक्स्ट प्रॉपर्टी के लिए काम करता है. उदाहरण के लिए, हमारे सैंपल स्कीमा में, हमgenre,actorName,userRating, औरmpaaRatingको फ़ेसटेबल बना सकते हैं, ताकि इनका इस्तेमाल खोज के नतीजों को इंटरैक्टिव तरीके से बेहतर बनाने के लिए किया जा सके.isWildcardSearchableसे पता चलता है कि उपयोगकर्ता इस प्रॉपर्टी के लिए वाइल्डकार्ड खोज कर सकते हैं. यह विकल्प सिर्फ़ टेक्स्ट प्रॉपर्टी के लिए उपलब्ध है. टेक्स्ट फ़ील्ड पर वाइल्डकार्ड सर्च कैसे काम करती है, यह exactMatchWithOperator फ़ील्ड में सेट की गई वैल्यू पर निर्भर करता है. अगरexactMatchWithOperatorकोtrueपर सेट किया जाता है, तो टेक्स्ट वैल्यू को एक ऐटॉमिक वैल्यू के तौर पर टोकन में बदला जाता है. साथ ही, इसके लिए वाइल्डकार्ड खोज की जाती है. उदाहरण के लिए, अगर टेक्स्ट वैल्यूscience-fictionहै, तो वाइल्डकार्ड क्वेरीscience-*इससे मैच करती है. अगरexactMatchWithOperatorकोfalseपर सेट किया जाता है, तो टेक्स्ट वैल्यू को टोकन में बदला जाता है. इसके बाद, हर टोकन के लिए वाइल्डकार्ड खोज की जाती है. उदाहरण के लिए, अगर टेक्स्ट वैल्यू "science-fiction" है, तो वाइल्डकार्ड क्वेरीsci*याfi*आइटम से मेल खाती है, लेकिनscience-*इससे मेल नहीं खाती.
खोज की सामान्य सुविधा के ये सभी पैरामीटर, बूलियन वैल्यू होते हैं. इन सभी की डिफ़ॉल्ट वैल्यू false होती है. इनका इस्तेमाल करने के लिए, इन्हें 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 रेफ़रंस सेक्शन में, हर टाइप के विकल्पों के लिंक दिए गए हैं. टाइप के हिसाब से तय किए गए ज़्यादातर विकल्प ज़रूरी नहीं होते. हालांकि, possibleValues में enumPropertyOptions की सूची देना ज़रूरी है. इसके अलावा, 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 टाइप करेगा. यहां title:movieName किसी फ़िल्म का नाम है.movieName
यह ज़रूरी नहीं है कि ऑपरेटर के नाम, प्रॉपर्टी के नाम से मेल खाएं. इसके बजाय, आपको ऐसे ऑपरेटर के नाम इस्तेमाल करने चाहिए जो आपके संगठन के उपयोगकर्ताओं के सबसे ज़्यादा इस्तेमाल किए गए शब्दों को दिखाते हों. उदाहरण के लिए, अगर आपके उपयोगकर्ता किसी फ़िल्म के टाइटल के लिए "title" के बजाय "name" शब्द का इस्तेमाल करना पसंद करते हैं, तो ऑपरेटर का नाम "name" पर सेट किया जाना चाहिए.
एक ही ऑपरेटर के नाम का इस्तेमाल कई प्रॉपर्टी के लिए किया जा सकता है. हालांकि, यह ज़रूरी है कि सभी प्रॉपर्टी एक ही तरह की हों. क्वेरी के दौरान, शेयर किए गए ऑपरेटर के नाम का इस्तेमाल करने पर, उस नाम का इस्तेमाल करने वाली सभी प्रॉपर्टी वापस मिल जाती हैं. उदाहरण के लिए, मान लें कि फ़िल्म ऑब्जेक्ट में plotSummary और plotSynopsis प्रॉपर्टी हैं और इनमें से हर प्रॉपर्टी का operatorName, plot है. जब तक ये दोनों प्रॉपर्टी टेक्स्ट (textPropertyOptions) के तौर पर मौजूद हैं, तब तक plot सर्च ऑपरेटर का इस्तेमाल करके एक ही क्वेरी में इन दोनों को वापस पाया जा सकता है.
operatorName के अलावा, क्रम से लगाई जा सकने वाली प्रॉपर्टी में operatorOptions में lessThanOperatorName और greaterThanOperatorName फ़ील्ड हो सकते हैं.
उपयोगकर्ता इन विकल्पों का इस्तेमाल करके, सबमिट की गई वैल्यू की तुलना के आधार पर क्वेरी बना सकते हैं.
आखिर में, textOperatorOptions में operatorOptions में मौजूद exactMatchWithOperator फ़ील्ड है. अगर आपने exactMatchWithOperator को true पर सेट किया है, तो क्वेरी स्ट्रिंग का पूरा प्रॉपर्टी वैल्यू से मेल खाना ज़रूरी है. सिर्फ़ टेक्स्ट में मौजूद होने से काम नहीं चलेगा.
ऑपरेटर की मदद से की जाने वाली खोजों और फ़ैसेट मैच में, टेक्स्ट वैल्यू को एक ऐटॉमिक वैल्यू माना जाता है.
उदाहरण के लिए, शैली की प्रॉपर्टी के साथ Book या Movie ऑब्जेक्ट को इंडेक्स करने पर विचार करें.
शैली में "साइंस फ़िक्शन", "विज्ञान", और "फ़िक्शन" शामिल हो सकते हैं. exactMatchWithOperator को false पर सेट करने या इसे शामिल न करने पर, किसी शैली को खोजने या "साइंस" या "फ़िक्शन" फ़ैसेट में से किसी एक को चुनने पर, "साइंस फ़िक्शन" के नतीजे भी दिखेंगे. ऐसा इसलिए, क्योंकि टेक्स्ट को टोकन में बदला जाता है और "साइंस" और "फ़िक्शन" टोकन, "साइंस फ़िक्शन" में मौजूद होते हैं.
जब exactMatchWithOperator true होता है, तो टेक्स्ट को एक टोकन माना जाता है. इसलिए, न तो "Science" और न ही "Fiction", "Science-Fiction" से मैच होता है.
(ज़रूरी नहीं) displayOptions सेक्शन जोड़ना
किसी भी displayOptions सेक्शन के आखिर में, displayOptions सेक्शन मौजूद होता है. हालांकि, यह सेक्शन शामिल करना ज़रूरी नहीं है.propertyDefinition इस सेक्शन में एक 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 विकल्प का इस्तेमाल करें. इससे स्कीमा को रजिस्टर किए बिना ही उसकी पुष्टि की जा सकती है.
अपने डेटा को इंडेक्स करना
स्कीमा रजिस्टर होने के बाद, Index कॉल का इस्तेमाल करके डेटा सोर्स में डेटा भरें. आम तौर पर, इंडेक्सिंग आपके कॉन्टेंट कनेक्टर में की जाती है.
मूवी स्कीमा का इस्तेमाल करके, किसी एक मूवी के लिए इंडेक्सिंग का 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 की सब-प्रॉपर्टी का इस्तेमाल कैसे करती है. ये सब-प्रॉपर्टी, releaseDate को इसलिए मिलती हैं, क्योंकि इसे date डेटा टाइप के तौर पर तय किया गया है. इसके लिए, datePropertyOptions का इस्तेमाल किया गया है.
हालांकि, year, month, और day को स्कीमा में तय नहीं किया गया है. इसलिए, इनमें से किसी एक प्रॉपर्टी (जैसे, year) एक-एक करके.
यह भी ध्यान दें कि दोहराई जा सकने वाली प्रॉपर्टी actorName को वैल्यू की सूची का इस्तेमाल करके कैसे इंडेक्स किया जाता है.
इंडेक्स करने से जुड़ी संभावित समस्याओं का पता लगाना
स्कीमा और इंडेक्सिंग से जुड़ी दो सबसे सामान्य समस्याएं ये हैं:
आपने इंडेक्स करने का जो अनुरोध किया है उसमें ऐसा स्कीमा ऑब्जेक्ट या प्रॉपर्टी का नाम शामिल है जिसे स्कीमा सेवा के साथ रजिस्टर नहीं किया गया है. इस समस्या की वजह से, प्रॉपर्टी या ऑब्जेक्ट को अनदेखा कर दिया जाता है.
आपने इंडेक्स करने का जो अनुरोध किया है उसमें मौजूद प्रॉपर्टी की टाइप वैल्यू, स्कीमा में रजिस्टर किए गए टाइप से अलग है. इस समस्या की वजह से, इंडेक्सिंग के दौरान Cloud Search में गड़बड़ी होती है.
अलग-अलग तरह की क्वेरी के साथ अपने स्कीमा की जांच करना
बड़ी प्रोडक्शन डेटा रिपॉज़िटरी के लिए स्कीमा रजिस्टर करने से पहले, छोटी टेस्ट डेटा रिपॉज़िटरी के साथ टेस्ट करें. छोटी टेस्ट रिपॉज़िटरी के साथ टेस्टिंग करने से, आपको अपने स्कीमा में तुरंत बदलाव करने और इंडेक्स किए गए डेटा को मिटाने की सुविधा मिलती है. इससे बड़े इंडेक्स या मौजूदा प्रोडक्शन इंडेक्स पर कोई असर नहीं पड़ता. टेस्ट डेटा रिपॉज़िटरी के लिए, एक ऐसी एसीएल बनाएं जो सिर्फ़ टेस्ट उपयोगकर्ता को अनुमति दे, ताकि अन्य उपयोगकर्ताओं को खोज के नतीजों में यह डेटा न दिखे.
खोज क्वेरी की पुष्टि करने के लिए, खोज इंटरफ़ेस बनाने के लिए, खोज इंटरफ़ेस पर जाएं
इस सेक्शन में, कई अलग-अलग उदाहरण क्वेरी दी गई हैं. इनका इस्तेमाल, मूवी स्कीमा की जांच करने के लिए किया जा सकता है.
सामान्य क्वेरी के साथ टेस्ट करना
सामान्य क्वेरी, डेटा सोर्स में मौजूद उन सभी आइटम को दिखाती है जिनमें कोई खास स्ट्रिंग शामिल होती है. खोज इंटरफ़ेस का इस्तेमाल करके, किसी मूवी के डेटा सोर्स के ख़िलाफ़ सामान्य क्वेरी चलाई जा सकती है. इसके लिए, "टाइटेनिक" शब्द टाइप करें और Return दबाएं. खोज के नतीजों में, "टाइटेनिक" शब्द वाली सभी फ़िल्में दिखनी चाहिए.
ऑपरेटर की मदद से टेस्ट करना
क्वेरी में ऑपरेटर जोड़ने से, नतीजे सिर्फ़ उन आइटम तक सीमित हो जाते हैं जो ऑपरेटर की वैल्यू से मेल खाते हैं. उदाहरण के लिए, किसी खास अभिनेता की सभी फ़िल्में ढूंढने के लिए, actor ऑपरेटर का इस्तेमाल किया जा सकता है. सर्च इंटरफ़ेस का इस्तेमाल करके, इस ऑपरेटर क्वेरी को आसानी से पूरा किया जा सकता है. इसके लिए, operator=value पेयर टाइप करें. जैसे, "actor:Zane" और Return दबाएं. ज़ेन की ऐक्टिंग वाली सभी फ़िल्में, खोज के नतीजों में दिखनी चाहिए.
अपने स्कीमा को बेहतर बनाना
स्कीमा और डेटा का इस्तेमाल शुरू होने के बाद, यह देखते रहें कि आपके उपयोगकर्ताओं के लिए क्या काम कर रहा है और क्या नहीं. आपको इन स्थितियों में अपने स्कीमा में बदलाव करना चाहिए:
- ऐसे फ़ील्ड को इंडेक्स करना जिसे पहले इंडेक्स नहीं किया गया था. उदाहरण के लिए, आपके उपयोगकर्ता निर्देशक के नाम के आधार पर बार-बार फ़िल्में खोज सकते हैं. इसलिए, आपको अपने स्कीमा में बदलाव करके, निर्देशक के नाम को ऑपरेटर के तौर पर इस्तेमाल करने की सुविधा देनी पड़ सकती है.
- उपयोगकर्ता से मिले सुझाव के आधार पर, खोज ऑपरेटर के नाम बदले जा रहे हैं. ऑपरेटर के नाम, उपयोगकर्ताओं के लिए आसान होने चाहिए. अगर आपके उपयोगकर्ता लगातार गलत ऑपरेटर का नाम "याद रखते हैं", तो आपको उसका नाम बदलने पर विचार करना चाहिए.
स्कीमा में बदलाव करने के बाद, फिर से इंडेक्स करना
अपने स्कीमा में इनमें से किसी भी वैल्यू को बदलने के लिए, आपको अपने डेटा को फिर से इंडेक्स करने की ज़रूरत नहीं है. आपको सिर्फ़ नया UpdateSchema अनुरोध सबमिट करना होगा. इसके बाद, आपका इंडेक्स काम करता रहेगा:
- ऑपरेटर के नाम.
- पूर्णांक की कम से कम और ज़्यादा से ज़्यादा वैल्यू.
- पूर्णांक और enum के हिसाब से क्रम से रैंक करना.
- डेटा अपडेट होने की फ़्रीक्वेंसी के उपलब्ध विकल्प.
- डिसप्ले के विकल्प
इन बदलावों के लिए, पहले से इंडेक्स किया गया डेटा, पहले से रजिस्टर किए गए स्कीमा के हिसाब से काम करता रहेगा. हालांकि, अगर स्कीमा में ये बदलाव किए गए हैं, तो आपको अपडेट किए गए स्कीमा के आधार पर बदलाव देखने के लिए, मौजूदा एंट्री को फिर से इंडेक्स करना होगा:
- नई प्रॉपर्टी या ऑब्जेक्ट जोड़ना या हटाना
isReturnable,isFacetableयाisSortableकोfalseसे बदलकरtrueकिया जा रहा है.
isFacetable या isSortable को true सिर्फ़ तब सेट करें, जब आपको इसका इस्तेमाल करना हो और इसकी ज़रूरत हो.
आखिर में, किसी प्रॉपर्टी को isSuggestable के तौर पर मार्क करके स्कीमा अपडेट करने पर, आपको अपने डेटा को फिर से इंडेक्स करना होगा. इससे उस प्रॉपर्टी के लिए, अपने-आप पूरा होने की सुविधा का इस्तेमाल करने में देरी होती है.
प्रॉपर्टी में बदलाव करने की अनुमति नहीं है
कुछ स्कीमा में बदलाव करने की अनुमति नहीं है. भले ही, आपने अपने डेटा को फिर से इंडेक्स किया हो. ऐसा इसलिए है, क्योंकि इससे इंडेक्स काम नहीं करेगा या खोज के नतीजे खराब या अलग-अलग होंगे. इनमें ये बदलाव शामिल हैं:
- प्रॉपर्टी का डेटा टाइप.
- प्रॉपर्टी का नाम.
exactMatchWithOperatorसेटिंग.retrievalImportanceसेटिंग.
हालांकि, इस सीमा को पार करने का एक तरीका है.
जटिल स्कीमा में बदलाव करना
खराब खोज नतीजे जनरेट करने वाले या खोज इंडेक्स को खराब करने वाले बदलावों से बचने के लिए, Cloud Search, रिपॉज़िटरी को इंडेक्स किए जाने के बाद, UpdateSchema अनुरोधों में कुछ तरह के बदलावों को रोकता है. उदाहरण के लिए, प्रॉपर्टी का डेटा टाइप या नाम सेट करने के बाद, उसे बदला नहीं जा सकता. इन बदलावों को UpdateSchema अनुरोध के ज़रिए नहीं किया जा सकता. भले ही, आपने अपने डेटा को फिर से इंडेक्स किया हो.
अगर आपको अपने स्कीमा में ऐसा बदलाव करना है जिसकी अनुमति नहीं है, तो अक्सर ऐसे बदलावों की एक सीरीज़ की जा सकती है जिनकी अनुमति है और जिनसे वही असर मिलता है. आम तौर पर, इसमें इंडेक्स की गई प्रॉपर्टी को पहले पुराने ऑब्जेक्ट डेफ़िनिशन से नए ऑब्जेक्ट डेफ़िनिशन में माइग्रेट करना होता है. इसके बाद, इंडेक्स करने का ऐसा अनुरोध भेजना होता है जिसमें सिर्फ़ नई प्रॉपर्टी का इस्तेमाल किया गया हो.
यहां किसी प्रॉपर्टी का डेटा टाइप या नाम बदलने का तरीका बताया गया है:
- अपने स्कीमा में ऑब्जेक्ट डेफ़िनिशन में नई प्रॉपर्टी जोड़ें. उस प्रॉपर्टी से अलग नाम का इस्तेमाल करें जिसका नाम बदलना है.
- नई परिभाषा के साथ UpdateSchema अनुरोध जारी करें. अनुरोध में पूरा स्कीमा भेजना न भूलें. इसमें नई और पुरानी, दोनों प्रॉपर्टी शामिल होनी चाहिए.
डेटा रिपॉज़िटरी से इंडेक्स को बैकफ़िल करें. इंडेक्स को फिर से भरने के लिए, नई प्रॉपर्टी का इस्तेमाल करके इंडेक्स करने के सभी अनुरोध भेजें. हालांकि, पुरानी प्रॉपर्टी का इस्तेमाल न करें, क्योंकि इससे क्वेरी के मैच की गिनती दो बार हो जाएगी.
- बैकफ़िल इंडेक्सिंग के दौरान, नई प्रॉपर्टी की जांच करें और पुराने वर्शन पर डिफ़ॉल्ट रूप से सेट करें, ताकि व्यवहार में कोई अंतर न आए.
- बैकफ़िल पूरा होने के बाद, पुष्टि करने के लिए टेस्ट क्वेरी चलाएं.
पुरानी प्रॉपर्टी मिटाएं. पुरानी प्रॉपर्टी के नाम के बिना, UpdateSchema का दूसरा अनुरोध करें. साथ ही, आने वाले समय में इंडेक्सिंग के अनुरोधों में पुरानी प्रॉपर्टी के नाम का इस्तेमाल बंद करें.
पुरानी प्रॉपर्टी के इस्तेमाल को नई प्रॉपर्टी पर माइग्रेट करें. उदाहरण के लिए, अगर आपने प्रॉपर्टी का नाम क्रिएटर से बदलकर लेखक कर दिया है, तो आपको अपनी क्वेरी के कोड को अपडेट करना होगा. ऐसा इसलिए, ताकि जहां पहले क्रिएटर का रेफ़रंस दिया गया था वहां लेखक का रेफ़रंस दिया जा सके.
Cloud Search, किसी भी मिटाई गई प्रॉपर्टी या ऑब्जेक्ट का रिकॉर्ड 30 दिनों तक रखता है. ऐसा इसलिए किया जाता है, ताकि किसी भी ऐसे दोबारा इस्तेमाल को रोका जा सके जिससे इंडेक्सिंग के नतीजे उम्मीद के मुताबिक न मिलें. आपको 30 दिनों के अंदर, मिटाए गए ऑब्जेक्ट या प्रॉपर्टी का इस्तेमाल बंद कर देना चाहिए. साथ ही, आने वाले समय में इंडेक्स के अनुरोधों में उन्हें शामिल नहीं करना चाहिए. इससे यह पक्का होता है कि अगर आपको बाद में उस प्रॉपर्टी या ऑब्जेक्ट को फिर से शामिल करना है, तो ऐसा इस तरह से किया जा सकता है कि आपके इंडेक्स में मौजूद जानकारी सही बनी रहे.
साइज़ से जुड़ी सीमाओं के बारे में जानकारी
Cloud Search, स्ट्रक्चर्ड डेटा ऑब्जेक्ट और स्कीमा के साइज़ पर सीमाएं लागू करता है. ये सीमाएं हैं:
- ज़्यादा से ज़्यादा 10 टॉप-लेवल ऑब्जेक्ट जोड़े जा सकते हैं.
- स्ट्रक्चर्ड डेटा के क्रम में ज़्यादा से ज़्यादा 10 लेवल हो सकते हैं.
- किसी ऑब्जेक्ट में फ़ील्ड की कुल संख्या 1,000 से ज़्यादा नहीं होनी चाहिए. इसमें प्रिमिटिव फ़ील्ड की संख्या के साथ-साथ, हर नेस्ट किए गए ऑब्जेक्ट में फ़ील्ड की संख्या का योग भी शामिल होता है.
अगले चरण
यहां कुछ ऐसे तरीके दिए गए हैं जिन्हें आज़माया जा सकता है:
अपने स्कीमा की जांच करने के लिए, सर्च इंटरफ़ेस बनाएं.
खोज की क्वालिटी को बेहतर बनाने के लिए, अपने स्कीमा को ट्यून करें.
अपनी कंपनी में आम तौर पर इस्तेमाल होने वाले शब्दों के समानार्थी शब्द तय करने के लिए,
_dictionaryEntryस्कीमा का फ़ायदा पाने का तरीका जानें._dictionaryEntryस्कीमा का इस्तेमाल करने के लिए, समानार्थी शब्द तय करना लेख पढ़ें.कनेक्टर बनाएं.