सर्च विजेट, वेब ऐप्लिकेशन के लिए पसंद के मुताबिक बनाया जा सकने वाला सर्च इंटरफ़ेस उपलब्ध कराता है. विजेट को लागू करने के लिए, सिर्फ़ कुछ एचटीएमएल और JavaScript की ज़रूरत होती है. साथ ही, यह फ़ैसेट और पेज नंबर के हिसाब से बांटना जैसी सामान्य खोज सुविधाओं को चालू करता है. सीएसएस और JavaScript की मदद से, इंटरफ़ेस के कुछ हिस्सों को भी अपनी पसंद के मुताबिक बनाया जा सकता है.
अगर आपको विजेट से ज़्यादा विकल्प चाहिए, तो Query API का इस्तेमाल करें. Query API की मदद से खोज इंटरफ़ेस बनाने के बारे में जानकारी पाने के लिए, Query API की मदद से खोज इंटरफ़ेस बनाना लेख पढ़ें.
सर्च इंटरफ़ेस बनाना
सर्च इंटरफ़ेस बनाने के लिए, ये चरण पूरे करने होते हैं:
- सर्च ऐप्लिकेशन को कॉन्फ़िगर करना
- ऐप्लिकेशन के लिए क्लाइंट आईडी जनरेट करना
- खोज बॉक्स और नतीजों के लिए एचटीएमएल मार्कअप जोड़ना
- पेज पर विजेट लोड करना
- विजेट को शुरू करना
सर्च ऐप्लिकेशन को कॉन्फ़िगर करना
हर खोज इंटरफ़ेस में, एडमिन कंसोल में तय किया गया खोज ऐप्लिकेशन होना चाहिए. सर्च ऐप्लिकेशन, क्वेरी के बारे में ज़्यादा जानकारी देता है. जैसे, डेटा सोर्स, फ़ैसेट, और खोज की क्वालिटी की सेटिंग.
सर्च ऐप्लिकेशन बनाने के लिए, पसंद के मुताबिक सर्च एक्सपीरियंस बनाना लेख पढ़ें.
ऐप्लिकेशन के लिए क्लाइंट आईडी जनरेट करना
Google Cloud Search API को ऐक्सेस करने की सुविधा कॉन्फ़िगर करना में दिए गए चरणों के अलावा, आपको वेब ऐप्लिकेशन के लिए क्लाइंट आईडी भी जनरेट करना होगा.
प्रोजेक्ट को कॉन्फ़िगर करने के दौरान:
- क्लाइंट टाइप के तौर पर वेब ब्राउज़र चुनें
- अपने ऐप्लिकेशन का ओरिजन यूआरआई दें.
- बनाए गए क्लाइंट आईडी का नोट. अगले चरण पूरे करने के लिए, आपको क्लाइंट आईडी की ज़रूरत होगी. विजेट के लिए क्लाइंट सीक्रेट की ज़रूरत नहीं होती.
ज़्यादा जानकारी के लिए, क्लाइंट-साइड वेब ऐप्लिकेशन के लिए OAuth 2.0 लेख पढ़ें.
एचटीएमएल मार्कअप जोड़ना
इस विजेट को काम करने के लिए, एचटीएमएल के कुछ कोड की ज़रूरत होती है. आपको यह जानकारी देनी होगी:
- खोज बॉक्स के लिए
input
एलिमेंट. - सुझाव वाले पॉप-अप को ऐंकर करने के लिए कोई एलिमेंट.
- खोज के नतीजों को शामिल करने वाला एलिमेंट.
- (ज़रूरी नहीं) फ़ैसेट कंट्रोल को शामिल करने के लिए कोई एलिमेंट दें.
यहां दिए गए एचटीएमएल स्निपेट में, खोज वाले विजेट के लिए एचटीएमएल दिखाया गया है. इसमें, बाइंड किए जाने वाले एलिमेंट को उनके id
एट्रिब्यूट से पहचाना जाता है:
विजेट लोड करना
विजेट को लोडर स्क्रिप्ट के ज़रिए डाइनैमिक तरीके से लोड किया जाता है. लोडर को शामिल करने के लिए, दिखाए गए तरीके से <script>
टैग का इस्तेमाल करें:
आपको स्क्रिप्ट टैग में onload
कॉलबैक देना होगा. लोडर तैयार होने पर, इस फ़ंक्शन को कॉल किया जाता है. लोडर तैयार होने के बाद, विजेट को लोड करना जारी रखें. इसके लिए, gapi.load()
को कॉल करें, ताकि एपीआई क्लाइंट, Google Sign-in, और Cloud Search मॉड्यूल लोड हो सकें.
सभी मॉड्यूल लोड होने के बाद, initializeApp()
फ़ंक्शन को कॉल किया जाता है.
विजेट को शुरू करना
सबसे पहले, जनरेट किए गए क्लाइंट आईडी और https://www.googleapis.com/auth/cloud_search.query
स्कोप के साथ gapi.client.init()
या gapi.auth2.init()
को कॉल करके, क्लाइंट लाइब्रेरी शुरू करें. इसके बाद, gapi.cloudsearch.widget.resultscontainer.Builder
और gapi.cloudsearch.widget.searchbox.Builder
क्लास का इस्तेमाल करके, विजेट को कॉन्फ़िगर करें और उसे अपने एचटीएमएल एलिमेंट से बाइंड करें.
यहां दिए गए उदाहरण में, विजेट को शुरू करने का तरीका बताया गया है:
ऊपर दिए गए उदाहरण में, कॉन्फ़िगरेशन के लिए दो वैरिएबल के रेफ़रंस दिए गए हैं. इन्हें इस तरह से तय किया गया है:
साइन-इन करने के अनुभव को मनमुताबिक बनाना
डिफ़ॉल्ट रूप से, विजेट उपयोगकर्ताओं को साइन-इन करने और ऐप्लिकेशन को अनुमति देने के लिए कहता है. ऐसा तब होता है, जब वे कोई क्वेरी टाइप करना शुरू करते हैं. उपयोगकर्ताओं को साइन-इन करने का ज़्यादा बेहतर अनुभव देने के लिए, वेबसाइटों के लिए Google से साइन इन करने की सुविधा का इस्तेमाल किया जा सकता है.
उपयोगकर्ताओं को सीधे तौर पर अनुमति देना
उपयोगकर्ता की साइन-इन स्थिति को मॉनिटर करने के लिए, 'Google से साइन इन करें' सुविधा का इस्तेमाल करें. साथ ही, ज़रूरत के मुताबिक उपयोगकर्ताओं को साइन-इन या साइन-आउट करें. उदाहरण के लिए, यहां दिए गए उदाहरण में, साइन-इन में हुए बदलावों को मॉनिटर करने के लिए, isSignedIn
स्टेटस को देखा जाता है. साथ ही, बटन पर क्लिक करके साइन-इन करने की प्रोसेस शुरू करने के लिए, GoogleAuth.signIn()
तरीके का इस्तेमाल किया जाता है:
ज़्यादा जानकारी के लिए, 'Google से साइन इन करें' लेख पढ़ें.
उपयोगकर्ताओं को अपने-आप साइन-इन होने की सुविधा देना
अपने संगठन के उपयोगकर्ताओं की ओर से ऐप्लिकेशन को पहले से अनुमति देकर, साइन-इन करने की प्रोसेस को और भी आसान बनाया जा सकता है. अगर ऐप्लिकेशन को सुरक्षित रखने के लिए, Cloud Identity Aware Proxy का इस्तेमाल किया जा रहा है, तो यह तरीका भी काम का है.
ज़्यादा जानकारी के लिए, आईटी ऐप्लिकेशन के साथ Google साइन-इन का इस्तेमाल करना लेख पढ़ें.
इंटरफ़ेस को पसंद के मुताबिक बनाना
खोज इंटरफ़ेस के दिखने के तरीके को इन तकनीकों के कॉम्बिनेशन से बदला जा सकता है:
- सीएसएस की मदद से स्टाइल बदलना
- अडैप्टर की मदद से एलिमेंट को सजाना
- अडैप्टर की मदद से कस्टम एलिमेंट बनाना
सीएसएस की मदद से स्टाइल बदलना
सर्च विजेट में, सुझाव और नतीजे वाले एलिमेंट के साथ-साथ पेज नंबर डालने के कंट्रोल को स्टाइल करने के लिए, अपनी सीएसएस होती है. इन एलिमेंट की स्टाइल को अपनी ज़रूरत के हिसाब से बदला जा सकता है.
लोड होने के दौरान, खोज विजेट अपनी डिफ़ॉल्ट स्टाइलशीट को डाइनैमिक तरीके से लोड करता है. ऐसा ऐप्लिकेशन की स्टाइलशीट लोड होने के बाद होता है. इससे नियमों की प्राथमिकता बढ़ जाती है. यह पक्का करने के लिए कि आपकी स्टाइल, डिफ़ॉल्ट स्टाइल से ज़्यादा प्राथमिकता पाएं, ऐनसेस्टर सिलेक्टर का इस्तेमाल करें. इससे डिफ़ॉल्ट नियमों की खास जानकारी बढ़ जाएगी.
उदाहरण के लिए, अगर इस नियम को दस्तावेज़ में मौजूद किसी स्टैटिक link
या style
टैग में लोड किया जाता है, तो इसका कोई असर नहीं होता.
.cloudsearch_suggestion_container {
font-size: 14px;
}
इसके बजाय, पेज में बताए गए पैरंट कंटेनर के आईडी या क्लास के साथ नियम को क्वालिफ़ाई करें.
#suggestions_anchor .cloudsearch_suggestion_container {
font-size: 14px;
}
विजेट से जनरेट होने वाले एचटीएमएल के उदाहरण और काम करने वाली क्लास की सूची देखने के लिए, काम करने वाली सीएसएस क्लास का रेफ़रंस देखें.
अडैप्टर की मदद से एलिमेंट को सजाना
किसी एलिमेंट को रेंडर करने से पहले उसे डेकोरेट करने के लिए, एक ऐसा अडैप्टर बनाएं और रजिस्टर करें जो डेकोरेट करने के तरीकों में से किसी एक को लागू करता हो. जैसे, decorateSuggestionElement
या decorateSearchResultElement.
उदाहरण के लिए, यहां दिए गए अडैप्टर, सुझाव और नतीजे वाले एलिमेंट में कस्टम क्लास जोड़ते हैं.
विजेट को शुरू करते समय अडैप्टर को रजिस्टर करने के लिए, Builder
क्लास के setAdapter()
तरीके का इस्तेमाल करें:
डेकोरेटर, कंटेनर एलिमेंट के साथ-साथ किसी भी चाइल्ड एलिमेंट के एट्रिब्यूट में बदलाव कर सकते हैं. डेकोरेशन के दौरान, चाइल्ड एलिमेंट जोड़े या हटाए जा सकते हैं. हालांकि, अगर एलिमेंट के स्ट्रक्चर में बदलाव करना है, तो उन्हें सजाने के बजाय सीधे तौर पर बनाएं.
अडैप्टर की मदद से कस्टम एलिमेंट बनाना
सुझाव, फ़ैसेट कंटेनर या खोज के नतीजे के लिए कस्टम एलिमेंट बनाने के लिए,
एक ऐसा अडैप्टर बनाएं और रजिस्टर करें जो createSuggestionElement
, createFacetResultElement
या createSearchResultElement
को लागू करता हो.
यहां दिए गए अडैप्टर में, एचटीएमएल <template>
टैग का इस्तेमाल करके, सुझाव और खोज के नतीजों के कस्टम एलिमेंट बनाने का तरीका बताया गया है.
विजेट को शुरू करते समय अडैप्टर को रजिस्टर करने के लिए, Builder
क्लास के setAdapter()
तरीके का इस्तेमाल करें:
createFacetResultElement
की मदद से कस्टम फ़ैसेट एलिमेंट बनाने पर, कई पाबंदियां लागू होती हैं:
- आपको सीएसएस क्लास
cloudsearch_facet_bucket_clickable
को उस एलिमेंट से जोड़ना होगा जिस पर उपयोगकर्ता, बकेट को टॉगल करने के लिए क्लिक करते हैं. - आपको हर बकेट को, सीएसएस क्लास
cloudsearch_facet_bucket_container
वाले कंटेनिंग एलिमेंट में रैप करना होगा. - बकेट को उसी क्रम में रेंडर किया जाना चाहिए जिस क्रम में वे रिस्पॉन्स में दिखते हैं.
उदाहरण के लिए, यहां दिए गए स्निपेट में चेक बॉक्स के बजाय लिंक का इस्तेमाल करके फ़ैसेट रेंडर किए जाते हैं.
खोजने के तरीके को पसंद के मुताबिक बनाना
सर्च ऐप्लिकेशन की सेटिंग, सर्च इंटरफ़ेस के डिफ़ॉल्ट कॉन्फ़िगरेशन को दिखाती हैं. ये सेटिंग स्टैटिक होती हैं. डेटा सोर्स को टॉगल करने की सुविधा देने जैसे डाइनैमिक फ़िल्टर या फ़ैसेट लागू करने के लिए, अडैप्टर की मदद से खोज के अनुरोध को इंटरसेप्ट करके, खोज ऐप्लिकेशन की सेटिंग को बदला जा सकता है.
interceptSearchRequest
तरीके का इस्तेमाल करके, अडैप्टर लागू करें. इससे, Search API को किए गए अनुरोधों में बदलाव किया जा सकता है.
उदाहरण के लिए, यहां दिया गया अडैप्टर, उपयोगकर्ता के चुने गए सोर्स से क्वेरी को प्रतिबंधित करने के अनुरोधों को इंटरसेप्ट करता है:
विजेट को शुरू करते समय अडैप्टर को रजिस्टर करने के लिए, ResultsContainer
बनाते समय setAdapter()
तरीके का इस्तेमाल करें
यहां दिया गया एचटीएमएल, सोर्स के हिसाब से फ़िल्टर करने के लिए, एक 'चुनेें' बॉक्स दिखाता है:
यहां दिया गया कोड, बदलाव के लिए सुनता है, सिलेक्शन सेट करता है, और अगर ज़रूरी हो, तो क्वेरी को फिर से लागू करता है.
अडैप्टर में interceptSearchResponse
लागू करके, खोज के जवाब को भी रोका जा सकता है.
एपीआई वर्शन पिन करना
डिफ़ॉल्ट रूप से, विजेट एपीआई के सबसे नए स्टेबल वर्शन का इस्तेमाल करता है. किसी खास वर्शन को लॉक करने के लिए, विजेट को शुरू करने से पहले cloudsearch.config/apiVersion
कॉन्फ़िगरेशन पैरामीटर को पसंदीदा वर्शन पर सेट करें.
अगर एपीआई वर्शन सेट नहीं है या उसे अमान्य वैल्यू पर सेट किया गया है, तो एपीआई वर्शन डिफ़ॉल्ट रूप से 1.0 पर सेट हो जाएगा.
विजेट के वर्शन को पिन करना
खोज के इंटरफ़ेस में अचानक होने वाले बदलावों से बचने के लिए, cloudsearch.config/clientVersion
कॉन्फ़िगरेशन पैरामीटर को इस तरह सेट करें:
gapi.config.update('cloudsearch.config/clientVersion', 1.1);
अगर विजेट का वर्शन सेट नहीं है या उसे अमान्य वैल्यू पर सेट किया गया है, तो विजेट का वर्शन डिफ़ॉल्ट रूप से 1.0 पर सेट हो जाएगा.
सर्च इंटरफ़ेस को सुरक्षित करना
खोज के नतीजों में बेहद संवेदनशील जानकारी शामिल है. वेब ऐप्लिकेशन को सुरक्षित रखने के लिए, सबसे सही तरीके अपनाएं. खास तौर पर, क्लिकजैकिंग हमलों से बचाने के लिए.
ज़्यादा जानकारी के लिए, OWASP Guide Project देखें
डीबग करने की सुविधा चालू करना
खोज विजेट के लिए डीबग करने की सुविधा चालू करने के लिए, interceptSearchRequest
का इस्तेमाल करें. उदाहरण के लिए:
if (!request.requestOptions) {
// Make sure requestOptions is populated
request.requestOptions = {};
}
// Enable debugging
request.requestOptions.debugOptions = {enableDebugging: true}
return request;