आधुनिक लोग खरीदारी पर कम से कम समय बिताने की कोशिश कर रहे हैं। धीमे उत्पाद कैटलॉग ग्राहकों को दूर ले जाते हैं, स्टोर ग्राहकों और अपने मुनाफे का कुछ हिस्सा खो देता है। अपने ऑनलाइन स्टोर को फ़ेसट तकनीक से और अधिक आकर्षक बनाएं - फ़ेसट - अर्थात। पूर्वनिर्धारित. खोजना। पहलूबद्ध अनुक्रमणिका बनाएं और उत्पादों की खोज और संपूर्ण कैटलॉग के काम में काफी तेजी लाएं।
नोट: पहलूगत खोज तंत्र सूचना ब्लॉक मॉड्यूल के संस्करण 15.0.1 से उपलब्ध है और घटक के साथ एकीकृत है। प्रोग्राम कोड, एक विज़ुअल शेल में डिज़ाइन किया गया है, जो सार्वजनिक भाग में डेटा प्रदर्शित करने के लिए एक मॉड्यूल का एक विशिष्ट कार्य करता है। हम कोड के इस ब्लॉक को सीधे कोई कोड लिखे बिना वेबसाइट पेजों में डाल सकते हैं। स्मार्ट फ़िल्टर घटक एक सूचना ब्लॉक से चयन के लिए एक फ़िल्टर तैयार करता है और फ़िल्टरिंग तत्वों के लिए एक फ़िल्टर फॉर्म प्रदर्शित करता है। कैटलॉग तत्वों को प्रदर्शित करने के लिए घटक को घटक से पहले कनेक्ट किया जाना चाहिए, अन्यथा तत्वों की सूची फ़िल्टर नहीं की जाएगी। घटक मानक है, मॉड्यूल वितरण में शामिल है और इसमें तीन टेम्पलेट शामिल हैं: .default, Visual_horizontal और Visual_vertical। (अंतिम दो टेम्पलेट समर्थित नहीं हैं, वे संगतता बनाए रखने के लिए बने रहेंगे।)
विज़ुअल एडिटर में, घटक पथ के साथ स्थित होता है सामग्री > कैटलॉग > स्मार्ट फ़िल्टर.
घटक सूचना ब्लॉक मॉड्यूल से संबंधित है।
आइए एक उदाहरण देखें: हम ऑनलाइन स्टोर पर जाते हैं और फ़िल्टर में चयन करते हैं कि हमें लाल टी-शर्ट चाहिए:
|
आइए कुछ सरल चरणों में पहलूबद्ध अनुक्रमणिकाएँ बनाएँ:
फेसेटेड इंडेक्स स्वचालित रूप से दोबारा बनाए जाते हैं या आपको किए गए कार्यों के आधार पर उन्हें मैन्युअल रूप से दोबारा बनाने की आवश्यकता होती है:
|
पहलूबद्ध खोज उत्पाद सूची के प्रदर्शन में सुधार करती है। इसका उपयोग करने के लिए आपको चाहिए:
अंतर्निहित पहलू खोज उत्पाद में निर्मित ऑनलाइन स्टोर में निर्मित पहलू खोज - आंतरिक खोज - कई मामलों में तेजी से काम करती है और सिस्टम को लोड नहीं करती है।
पैरामीटर के किसी भी संयोजन के लिए क्लाइंट को तुरंत पूर्व-तैयार खोज परिणाम प्रस्तुत किए जाते हैं - पहलू। सिस्टम किसी उत्पाद के लिए पहलुओं की पहले से गणना करता है - फ़िल्टर में इन गुणों के सभी संभावित प्रतिच्छेदन। ये तैयार खोज सेट फिर ग्राहकों को जारी किए जाते हैं। साइट लोड क्यों नहीं होती? जिस समय ग्राहक को परिणाम जारी किया जाता है, उस समय कोई गणना नहीं होती, क्योंकि परिणाम पहले से ही तैयार होता है। जब किसी नए उत्पाद को बिक्री कैटलॉग में जोड़ा जाता है तो उसका एक पहलू तुरंत बन जाता है। नए उत्पादों और नई संपत्तियों के आधार पर खोज स्वचालित रूप से पुन: अनुक्रमित होती है। ग्राहकों के लिए लाभ पहलूगत खोज के लाभ आपका ग्राहक फ़िल्टर सेटिंग्स के साथ आसानी से खेलते हुए उत्पाद को बहुत तेज़ी से ढूंढता है। ग्राहक इंतजार नहीं करता और तुरंत परिणाम प्राप्त करता है। खोज गति कैटलॉग में आइटमों की संख्या पर निर्भर नहीं करती है।
आपका ग्राहक खोज क्वेरी को लगातार सीमित करके उत्पाद को बहुत तेज़ी से ढूंढता है। और हर कदम पर, उसे तुरंत परिणाम प्राप्त होते हैं - अनुरोध पर उत्पादों की एक सूची। उसे अपने अनुरोध पर कार्रवाई होने तक इंतजार नहीं करना पड़ेगा। क्योंकि सिस्टम ने हर चीज़ की गणना पहले ही कर ली थी संभावित विकल्प, और बस रिक्त स्थान जारी करता है। धीरे-धीरे, ऑनलाइन स्टोर परिणामों के रूप में कम और कम उत्पाद प्रदर्शित करता है। ये उत्पाद खरीदार के अनुरोध के और भी करीब आ रहे हैं। अन्तरक्रियाशीलता और बहुआयामीता खरीदार के लिए उत्पाद चुनना एक खेल की तरह है। क्लाइंट पैरामीटर (कीमत, वजन) खींचता है, गुण बदलता है (रंग, आकार), अतिरिक्त शर्तें (ब्रांड, सामग्री, स्वाद, आदि) सेट करता है - और सिस्टम तुरंत परिणामों को पुनर्व्यवस्थित करता है। इस मामले में, जितने चाहें उतने अनुकूलन योग्य पैरामीटर हो सकते हैं - उनकी संख्या परिणाम उत्पन्न करने की गति को प्रभावित नहीं करती है। सुविधा और मित्रता पहलूगत नेविगेशन के साथ, एक अनुभवहीन उपयोगकर्ता भी आसानी से स्टोर में उत्पाद का चयन कर सकता है। खोज टूल में हेरफेर करना बहुत सुविधाजनक है. इसके अलावा, सिस्टम खरीदार को उन सभी मापदंडों के बारे में बताता है जिनके द्वारा वह उत्पाद चुन सकता है। स्टोर, जैसा कि था, ग्राहक को उत्पाद के मुख्य गुणों को प्रदर्शित करता है। ग्राहक अनुरोध के संसाधित होने की प्रतीक्षा नहीं करता है! खोज गति खोज गति मायने रखती है खोज गति की गई खरीदारी की संख्या को प्रभावित करती हैआपकी वेबसाइट पर उत्पाद ढूंढने में परेशानी होने से अधिक ग्राहक को कोई चीज़ परेशान नहीं करती। यदि ग्राहक बहुत देर तक खोज करता है तो वह अन्य दुकानों की ओर चला जाएगा। भले ही आपके स्टोर में शामिल हो बड़ा विकल्पउत्पाद और उन्हें फ़िल्टर करने के लिए कई उपकरण। क्लाइंट को अनुरोध से परिणाम प्राप्त नहीं हो सकते हैं.
खोज इतनी धीमी क्यों है?
बिना किसी "पहलू" के भी तेज़! उत्पाद कैटलॉग घटकों को गति देने के लिए लगातार काम कर रहा है। "साइट स्पीड" सेवा संस्करण दर संस्करण गति में उल्लेखनीय वृद्धि दर्शाती है! पुनर्निर्माण अनुक्रमण और खोज परिणामों का निरंतर पुनर्निर्माण किया जाता है। सामग्री अनुक्रमण एल्गोरिथ्म पर फिर से काम किया जा रहा है और उसमें तेजी लाई जा रही है। खोज परिणामों की प्रस्तुति की गुणवत्ता में सुधार हुआ है - विशेष रूप से, "शोर" कम हो गया है। डेवलपर्स खोज परिणामों में वर्तमान क्लाइंट के लिए वैयक्तिकृत डेटा प्रदर्शित करने की योजना बना रहे हैं। डेवलपर्स के लिए: एपीआई पारदर्शिता
स्मार्ट फिल्टर के साथ पूर्ण एकीकरण अब, उत्पाद गुणों के लिए प्रशासनिक भाग में सेटिंग करते समय, आप न केवल गतिविधि का संकेत दे सकते हैं - स्मार्ट फ़िल्टर में भाग लेना है या नहीं। किसी प्रॉपर्टी को स्मार्ट फ़िल्टर में पास करके, आप तुरंत चुन सकते हैं कि उन्हें कैसे प्रदर्शित किया जाए। ग्राहकों को संपत्ति किस रूप में दिखाई जानी चाहिए: बटन, आकार, स्लाइडर, ड्रॉप-डाउन सूचियाँ, रंग चयन वाली सूचियाँ, आदि।
स्मार्ट फ़िल्टर अब और अधिक सुंदर दिखता है. डेवलपर्स इसके स्वरूप को आसानी से अनुकूलित और आगे अनुकूलित कर सकते हैं। आज के पाठ में हम जावास्क्रिप्ट का उपयोग करके पहलू खोज की नकल को फिर से बनाने का प्रयास करेंगे। मैं मान रहा हूं कि यदि आप इस ट्यूटोरियल को पढ़ रहे हैं तो आप पहले से ही जानते हैं कि पहलूगत खोज क्या है, अन्यथा इसे गूगल पर खोजें या अमेज़ॅन या मेरे डेमो को देखें। सबसे पहले हमें लाइब्रेरी github.com/eikes/facetedsearch की आवश्यकता है। इसे डाउनलोड करें औरfacetedsearch.js फ़ाइल को हमारे प्रोजेक्ट से कनेक्ट करें। हमें jQuery और अंडरस्कोर लाइब्रेरी की भी आवश्यकता होगी। अस्वीकरण: मैं समझता हूं कि जेक्यू अब केक नहीं है, लेकिन मैं इसे परिचित वाक्यात्मक चीनी के रूप में उपयोग करता हूं, आप इसे अपने से अधिक परिचित पुस्तकालयों के लिए या वेनिला जेएस में फिर से लिख सकते हैं। तो, सबसे पहले, आइए कनेक्टेड निर्भरताओं के साथ एक सरल मार्कअप बनाएं: दस्तावेज़ // यहां हम पहलू फ़िल्टर प्रदर्शित करेंगे // और यहां हमारे तत्व होंगे अब हमें अपने एप्लिकेशन की सेटिंग्स का वर्णन करने और सरणी तत्वों को प्रदर्शित करने के लिए एक टेम्पलेट बनाने की आवश्यकता है जिसे हम पहलुओं का उपयोग करके सॉर्ट करेंगे: $(फ़ंक्शन())( var item_template = // टेम्पलेट का वर्णन करें "" + " " वर्ग = "img-उत्तरदायी">" + ", " + " " + "" + ""; सेटिंग्स = (आइटम: उदाहरण_आइटम, पहलू: ( // पहलू श्रेणियां निर्दिष्ट करें "श्रेणी": "कौन सी श्रेणी", "महाद्वीप": "कौन सा महाद्वीप", "भाषा": "प्रोग्रामिंग भाषा"), परिणाम चयनकर्ता: "#परिणाम", // DOM तत्व जहां हम परिणाम प्रदर्शित करते हैं पहलू चयनकर्ता: "#facets", // पहलुओं के लिए DOM तत्व परिणाम टेम्पलेट: आइटम_टेम्पलेट, पेजिनेशन गणना: 8, // प्रति पृष्ठ तत्वों की संख्या orderByOptions: ("पहला नाम": " प्रथम नाम ", "अंतिम नाम": "अंतिम नाम", "श्रेणी": "श्रेणी", "रैंडम": "रैंडम"), पहलूसॉर्टऑप्शन: ("महाद्वीप": ["उत्तरी अमेरिका", "दक्षिण अमेरिका"]) ) $. फेसटेलाइज़(सेटिंग्स);खैर, वास्तव में JS में हमारी पहलूगत खोज में प्रदर्शित करने के लिए तत्वों के साथ स्वयं एक JSON सरणी बनाएं: वर आइटम = [( "प्रथम नाम": "मैरी", "अंतिम नाम": "स्मिथ", "इमेजयूआरएल": "http://lorem Pixel.com/150/150/cats/2", "विवरण": "सेड ईए आमेट। स्टेट वोलुप्टुआ। नोनुमी मैग्ना ताकीमाता", "श्रेणी": "माउस", "भाषा": ["स्मॉलटॉक", "एक्सएसएलटी"], "महाद्वीप": "अफ्रीका" ), ("प्रथम नाम": "पेट्रीसिया" ", "अंतिम नाम": "जॉनसन", "imageURL": "http://lorem Pixel.com/150/150/cats/3", "विवरण": "उट ताकीमाता सिट एलिक्वीम लेबोर एलिक्वियम सिट सिट लोरेम अमेट ।" , "श्रेणी": "शेर", "महाद्वीप": "उत्तरी अमेरिका", ... ]; मैं इस सरणी को एक अलग जेएस फ़ाइल में रखूंगा जो उदाहरण के लिए, डेटाबेस से गतिशील रूप से उत्पन्न होगी। बस इतना ही, हमें जावास्क्रिप्ट में एक पहलूपूर्ण खोज मिलती है और हम इसे अनुकूलित कर सकते हैं। इसके बाद, मैं लाइब्रेरी का अनुवादित दस्तावेज़ उपलब्ध कराता हूँ, जहाँ आप अपनी ज़रूरत के ट्रिगर देख सकते हैं। दस्तावेज़ीकरण सुविधाएँदो फ़ंक्शन jQuery नेमस्पेस में निर्यात किए जाते हैं। फेसटेलाइज़ का उपयोग दी गई सेटिंग्स के साथ एक फेसेटेड खोज आरंभ करने के लिए किया जाता है। यदि आप पहलू लुकअप स्थिति को बाहरी रूप से बदलना चाहते हैं तो FacetUpdate का उपयोग किया जा सकता है। ऑब्जेक्ट सेटिंग्सआइटम: आइटमों की एक श्रृंखला जिसे प्रक्रिया में फ़िल्टर और सॉर्ट किया जाएगा। पहलू: एक ऑब्जेक्ट जिसकी कुंजियाँ तत्व कुंजियों और मानों से मेल खाती हैं, उस पहलू के लिए हेडर है। आइटम को इन कुंजियों के लिए उनके मूल्य के आधार पर फ़िल्टर किया जाएगा। orderByOptions: पहलुओं के समान, इन कुंजी-मूल्य जोड़े को छोड़कर केवल सॉर्टिंग के लिए उपयोग किया जाता है। जब RANDOM कुंजी सक्षम होती है, तो परिणामों को यादृच्छिक किया जा सकता है। पहलू चयनकर्ता: यह एक चयनकर्ता है जिसका उपयोग DOM नोड खोजने के लिए किया जाता है जिससे पहलू फ़िल्टर का चयन किया जाता है। परिणाम चयनकर्ता: यह एक चयनकर्ता है जिसका उपयोग DOM नोड को खोजने के लिए किया जाता है जहां परिणाम प्रदर्शित होते हैं। परिणाम टेम्पलेट: एक स्ट्रिंग जिसका उपयोग अंडरस्कोर टेम्पलेट इंजन द्वारा आइटम सरणी से प्रत्येक तत्व को प्रस्तुत करने के लिए किया जाता है। प्रत्येक तत्व में निम्नलिखित विशेषताएँ जोड़ी जाती हैं, जिनका उपयोग टेम्पलेट में भी किया जा सकता है: बैचआइटमएनआर, बैचआइटमकाउंट, और टोटलआइटमकाउंट। स्थिति: यह ऑब्जेक्ट वर्तमान फ़िल्टर, प्रकार: currentResult और अन्य को संग्रहीत करता है। आप उन्हें प्रीसेट करने के लिए ऑर्डरबी स्ट्रिंग या फ़िल्टर ऑब्जेक्ट प्रदान कर सकते हैं। EnablePagination: पेजिनेशन और "अधिक लोड करें" बटन को सक्षम करने के लिए बूलियन, डिफ़ॉल्ट रूप से सत्य है। पेजिनेशनकाउंट: यदि पेजिनेटर सक्षम है, तो प्रति पेज तत्वों की संख्या निर्धारित करता है, डिफ़ॉल्ट 50 है। FacetSortOption: पहलू तत्वों के क्रम को बदलने के लिए इस फ़ंक्शन का उपयोग करें। एक ऑब्जेक्ट लेता है जिसकी कुंजियाँ पहलू नामों और मानों के अनुरूप पहलू मानों की एक सरणी में होती हैं, जिन्हें उस क्रम में व्यवस्थित किया जा सकता है जैसा आप चाहते हैं। यह उदाहरण महाद्वीपों को एक अलग क्रम में क्रमबद्ध करेगा, सरणी में शामिल नहीं की गई वस्तुओं को वर्णमाला क्रम में जोड़ देगा: FacetSortOption: ("महाद्वीप": ["उत्तरी अमेरिका", "दक्षिण अमेरिका"]) कई और टेम्प्लेट उपलब्ध हैं, कृपया सभी उपलब्ध टेम्प्लेट विकल्पों को देखने के लिएfacetedsearch.js स्रोत कोड देखें। आयोजनआप कुछ घटनाओं से जुड़ सकते हैं जिन्हें कुछ क्रियाएं होने पर सूचनाएं भेजनी चाहिए। ऐसा करने के लिए, हम jquery इवेंट सिस्टम का उपयोग करते हैं: Facetuicreated: आप इस फ़ंक्शन को इससे बाइंड कर सकते हैं डोम तत्वसेटिंग्स.facetSelector जिसे यूआई बनाए जाने पर सूचित किया जाना चाहिए। facetedsearchresultupdate: अद्यतन परिणामों की सूचना पाने के लिए आप इस फ़ंक्शन को सेटिंग्स.परिणाम चयनकर्ता DOM तत्व से जोड़ सकते हैं। Facetedsearchfacetclick: यह ईवेंट तब सक्रिय होता है जब किसी पहलू पर क्लिक किया जाता है और सेटिंग्स.facetSelector तत्व पर सक्रिय किया जाता है। जो पहलू आईडी को तर्क के रूप में प्राप्त करता है। Facetedsearchorderby: जब सॉर्टिंग तत्व सेटिंग्स.facetSelector तत्व पर क्लिक किया जाता है तो यह ईवेंट सक्रिय हो जाता है। यह आईडी ऑर्डर को एक तर्क के रूप में लेता है। $(settings.resultSelector).bind('facetedsearchresultupdate', function())( // कुछ करो, शायद )); हमने LINQ से PHP के पोर्ट, PINQ की स्थापना और बुनियादी सिंटैक्स पर एक त्वरित नज़र डाली। इस लेख में, हम देखेंगे कि MySQL में पहलू खोज सुविधा का अनुकरण करने के लिए PINQ का उपयोग कैसे करें। इस लेख में हम पहलू खोज के सभी पहलुओं को शामिल नहीं करेंगे। इच्छुक लोग इंटरनेट पर उपयुक्त जानकारी खोज सकते हैं। एक विशिष्ट पहलू खोज इस तरह काम करती है:
फेसेटेड सर्च काफी लोकप्रिय और एक शक्तिशाली टूल है जिसे लगभग किसी भी ई-कॉमर्स वेबसाइट पर देखा जा सकता है। दुर्भाग्यवश, पहलूबद्ध खोज MySQL में निर्मित नहीं है। तो अगर हम अभी भी MySQL का उपयोग करते हैं, लेकिन उपयोगकर्ता को यह अवसर देना चाहते हैं तो हमें क्या करना चाहिए? PINQ के साथ, जिसका दृष्टिकोण समान, शक्तिशाली और सरल है, हम वैसा ही व्यवहार प्राप्त कर सकते हैं जैसे कि हम अन्य डेटाबेस इंजनों का उपयोग कर रहे थे। पहले भाग से डेमो का विस्तार करनाध्यान दें: इस भाग और पहले भाग के सभी कोड रिपॉजिटरी में पाए जा सकते हैं। इस लेख में, हम पहलू खोज के रूप में एक महत्वपूर्ण सुधार के साथ भाग 1 से डेमो का विस्तार करेंगे। आइए Index.php जोड़कर शुरुआत करें निम्नलिखित पंक्तियाँ: $app->get("demo2", function() उपयोग ($app) (ग्लोबल $demo; $test2 = newpinqDemo\Demo($app); return $test2->test2($app, $demo->test1 ($ऐप)); $app->get("demo2/facet/(key)/(value)", function ($key, $value) उपयोग ($app) (ग्लोबल $demo; $test3 = newpinqDemo\Demo($app); वापसी $test3->test3($app, $demo->test1($app), $key, $value )); पहला मार्ग हमें खोज से मेल खाने वाली सभी प्रविष्टियों को देखने के लिए एक पृष्ठ पर ले जाता है कीवर्ड. उदाहरण को सरल बनाए रखने के लिए, हम Book_book तालिका से सभी पुस्तकों का चयन करते हैं। यह परिणामी डेटा सेट और खोज मानदंड निर्दिष्ट करने के लिए लिंक का एक सेट भी प्रदर्शित करेगा। वास्तविक अनुप्रयोगों में, ऐसे लिंक पर क्लिक करने के बाद, सभी पहलू फ़िल्टर परिणामी डेटा सेट के सीमा मानों में समायोजित हो जाएंगे। इस प्रकार उपयोगकर्ता क्रमिक रूप से नई खोज शर्तें जोड़ने में सक्षम होगा, उदाहरण के लिए, पहले एक निर्माता का चयन करें, फिर एक मूल्य सीमा निर्दिष्ट करें, आदि। लेकिन इस उदाहरण में हम इस व्यवहार को लागू नहीं करेंगे - सभी फ़िल्टर मूल डेटा सेट के सीमा मूल्यों को प्रतिबिंबित करेंगे। यह हमारे डेमो में सुधार के लिए पहली सीमा और पहला उम्मीदवार है। जैसा कि आप ऊपर दिए गए कोड में देख सकते हैं, वास्तविक फ़ंक्शंस एक अन्य फ़ाइल में स्थित हैं जिसे PinqDemo.php कहा जाता है। आइए संबंधित कोड पर एक नज़र डालें जो पहलूबद्ध खोज सुविधा प्रदान करता है। पहलू वर्गपहला कदम एक ऐसा वर्ग बनाना है जो एक पहलू का प्रतिनिधित्व करता हो। सामान्य तौर पर, एक पहलू में कई गुण होने चाहिए:
समूहीकरण पहलू का सबसे महत्वपूर्ण हिस्सा है। किसी पहलू द्वारा लौटाई जा सकने वाली सभी एकत्रित जानकारी समूहीकरण मानदंड पर निर्भर करती है। आमतौर पर सबसे अधिक उपयोग किए जाने वाले खोज मानदंड "पूर्ण स्ट्रिंग", "स्ट्रिंग का हिस्सा" या "मूल्य सीमा" हैं। नेमस्पेस क्लासफ़ेसेट (Pinq\ITraversable, Pinq\Traversable का उपयोग करें; क्लास फ़ैसेट (सार्वजनिक $डेटा; // मूल डेटा सेट सार्वजनिक $कुंजी; // फ़ील्ड जिसके द्वारा सार्वजनिक $प्रकार को समूहीकृत किया जाए; // F: संपूर्ण पंक्ति; S: प्रारंभ स्ट्रिंग्स ; आर: रेंज; सार्वजनिक $रेंज; // केवल तभी भूमिका निभाता है जब $प्रकार != एफ... सार्वजनिक फ़ंक्शन getFacet() ( $फ़िल्टर = ""; यदि ($यह->प्रकार == "एफ") / संपूर्ण पंक्ति (...) अन्यथा ($यह->प्रकार == "एस") // पंक्ति की शुरुआत (...) अन्यथा ($यह->प्रकार == "आर") // मानों की श्रेणी ( $ फ़िल्टर = $यह->डेटा ->groupBy(फ़ंक्शन($पंक्ति) ( रिटर्न फ़्लोर($पंक्ति[$यह->कुंजी] / $यह->श्रेणी) * $यह->श्रेणी; )) -> चयन करें (फ़ंक्शन (आईट्रैवर्सबल $डेटा) ( वापसी ["कुंजी" => $डेटा->अंतिम()[$यह->कुंजी], "गिनती" => $डेटा->गिनती()]; )); फ़िल्टर ) ) ) इस वर्ग का मुख्य कार्य मूल डेटासेट और पहलू गुणों के आधार पर फ़िल्टर किए गए डेटासेट को वापस करना है। कोड से यह स्पष्ट है कि विभिन्न प्रकार केखातों का उपयोग किया जाता है विभिन्न तरीकेडेटा समूहीकरण. उपरोक्त कोड में, हमने दिखाया कि यदि हम डेटा को $range में निर्दिष्ट वृद्धि में मानों की एक श्रृंखला के आधार पर समूहित करते हैं तो कोड कैसा दिख सकता है। पहलुओं को सेट करना और स्रोत डेटा प्रदर्शित करनासार्वजनिक फ़ंक्शन टेस्ट2($ऐप, $डेटा) ( $facet = $this->getFacet($data); रिटर्न $app["twig"]->render("demo2.html.twig", array("facet" = > $facet, "data" => $data)); निजी फ़ंक्शन getFacet($originalData) ( $facet = array(); $data = \Pinq\Traversable::from($originalData); // 3 निर्माण उदाहरण भिन्न पहलू ऑब्जेक्ट, और पहलुओं को वापस करें $filter1 = new \classFacet\Facet($data, "author", "F"); $filter2 = new \classFacet\Facet($data, "title", "S", 6) ; $filter3 = new \classFacet\Facet($data, "price", "R", 10); $facet[$filter1->key] = $filter1->getFacet() ] = $filter2->getFacet( ); $facet[$filter3->key] = $filter3->getFacet(); वापसी $facet; GetFacet() विधि में हम निम्नलिखित कार्य करते हैं:
अधिकांश मामलों में, फ़िल्टर एक पंक्ति के रूप में प्रदर्शित होंगे, और आपको फ़िल्टर किए गए परिणाम देखने के लिए प्रेरित करेंगे। हमने पहलूबद्ध खोज परिणाम और फ़िल्टर लिंक प्रदर्शित करने के लिए पहले से ही एक मार्ग ("डेमो2/पहलू/(कुंजी)/(मूल्य)") बना लिया है। मार्ग दो पैरामीटर लेता है, जो फ़िल्टर की गई कुंजी और उस कुंजी के मान पर निर्भर करता है। इस मार्ग से जुड़ा test3 फ़ंक्शन नीचे दिखाया गया है: सार्वजनिक फ़ंक्शन टेस्ट3($ऐप, $ओरिजिनलडेटा, $की, $वैल्यू) ($डेटा = \पिंक\ट्रैवर्सेबल::फ्रॉम($ओरिजिनलडेटा); $facet = $this->getFacet($data); $filter = शून्य; यदि ($कुंजी == "लेखक") ( $फ़िल्टर = $डेटा ->जहां(फ़ंक्शन($पंक्ति) उपयोग ($मान) ( वापसी $पंक्ति["लेखक"] == $मूल्य; )) ->orderByAscending( function($row) उपयोग ($key) ( return $row["price"]; )) ) elseif ($key == "price") ( ... ) else //$key== शीर्षक ( .. . ) वापसी $app["twig"]->render("demo2.html.twig", array("facet" => $facet, "data" => $filter) ) मूल रूप से, कुंजी के आधार पर, हम पारित मूल्य के अनुसार फ़िल्टरिंग (कहां कथन में एक अज्ञात फ़ंक्शन) लागू करते हैं और फ़िल्टर किए गए डेटा का निम्नलिखित सेट प्राप्त करते हैं। हम डेटा फ़िल्टरिंग का क्रम भी निर्धारित कर सकते हैं। अंत में, हम टेम्पलेट में कच्चा डेटा (फ़िल्टर के साथ) प्रदर्शित करते हैं। यह मार्ग उसी पैटर्न का उपयोग करता है जिसका उपयोग हमने "डेमो2" में किया था। खोज पट्टी
हमें यह याद रखने की आवश्यकता है कि हमारे एप्लिकेशन द्वारा उत्पन्न पहलू नेस्टेड सरणियाँ हैं। पहले स्तर पर, यह सभी पहलुओं की एक श्रृंखला है, और, हमारे मामले में, उनमें से तीन हैं (क्रमशः लेखक, शीर्षक, मूल्य के लिए)। प्रत्येक पहलू में एक कुंजी-मूल्य सरणी होती है, इसलिए हम सामान्य तरीकों का उपयोग करके इसे पुनरावृत्त कर सकते हैं। ध्यान दें कि हम अपने लिंक के लिए यूआरएल कैसे बनाते हैं। हम रूट ("डेमो2/फेसेट/(की)/(वैल्यू)") के पैरामीटर के रूप में बाहरी लूप कुंजी (के) और आंतरिक लूप कुंजी (vv.key) दोनों का उपयोग करते हैं। टेम्प्लेट में प्रदर्शन के लिए सरणियों का आकार (vv.count) का उपयोग किया जाता है। पहली छवि मूल डेटा सेट दिखाती है, और दूसरी छवि $0 से $10 तक मूल्य सीमा के अनुसार फ़िल्टर की जाती है, और लेखक द्वारा क्रमबद्ध की जाती है। बढ़िया, हम अपने एप्लिकेशन में पहलूबद्ध खोज का अनुकरण करने में सक्षम थे! इस लेख को समाप्त करने से पहले, हमें अपने उदाहरण पर अंतिम नज़र डालने और यह निर्धारित करने की आवश्यकता है कि क्या सुधार किया जा सकता है और हमारी क्या सीमाएँ हैं। संभावित सुधारसामान्य तौर पर, यह एक बहुत ही बुनियादी उदाहरण है. हम बस वहां से गुजरे बुनियादी वाक्यविन्यासऔर अवधारणाओं और उन्हें एक कामकाजी उदाहरण के रूप में कार्यान्वित किया। जैसा कि पहले कहा गया है, हमारे पास ऐसे कई क्षेत्र हैं जिनमें अधिक लचीलेपन के लिए सुधार किया जा सकता है। हमें "ओवरले" खोज मानदंड लागू करने की आवश्यकता है, क्योंकि वर्तमान उदाहरण हमें केवल मूल डेटा सेट पर खोज फ़िल्टरिंग लागू करने की क्षमता तक सीमित करता है, हम पहले से फ़िल्टर किए गए परिणाम पर पहलू खोज लागू नहीं कर सकते हैं; यह सबसे बड़ा सुधार है जिसकी मैं कल्पना कर सकता हूं। प्रतिबंधइस आलेख में कार्यान्वित पहलू खोज की गंभीर सीमाएँ हैं (जो अन्य पहलू खोज कार्यान्वयनों पर भी लागू हो सकती हैं): हम हर बार MySQL से डेटा लाते हैं यह एप्लिकेशन सिलेक्स फ्रेमवर्क का उपयोग करता है। सिलेक्स, सिम्फनी, लारवेल जैसे किसी भी एकल प्रवेश बिंदु ढांचे की तरह, इसकी इंडेक्स.php (या ऐप.php) फ़ाइल को हर बार रूट पार्स किए जाने और नियंत्रक फ़ंक्शन निष्पादित होने पर कॉल किया जाता है। यदि आप हमारे Index.php में कोड को देखते हैं, तो आप देखेंगे कि कोड की निम्नलिखित पंक्ति: $डेमो = नया पिनकडेमो\डेमो($ऐप); हर बार एप्लिकेशन पेज प्रस्तुत किए जाने पर कॉल किया जाता है, जिसका अर्थ है कि कोड की निम्नलिखित पंक्तियां हर बार निष्पादित होती हैं: क्लास डेमो (निजी $किताबें = ""; सार्वजनिक फ़ंक्शन __construct($app) ($sql = "आईडी द्वारा बुक_बुक ऑर्डर से * चुनें"; $this->books = $app["db"]->fetchAll($sql ; ) क्या यह बेहतर होगा यदि हम किसी ढाँचे का उपयोग न करें? खैर, इस तथ्य के बावजूद कि फ्रेमवर्क के बिना एप्लिकेशन विकसित करना एक अच्छा विचार नहीं है, मैं कह सकता हूं कि हमें समान समस्याओं का सामना करना पड़ेगा: डेटा (और स्थिति) अलग-अलग के बीच सहेजे नहीं जाते हैं HTTP अनुरोध. यह HTTP की एक मूलभूत विशेषता है. कैशिंग तंत्र का उपयोग करके इससे बचा जा सकता है। हमने कुछ बचा लिया एसक्यूएल प्रश्नपहलुओं का उपयोग करना। डेटा को पुनः प्राप्त करने के लिए एक चुनिंदा क्वेरी और संबंधित व्हेयर क्लॉज के साथ प्रश्नों के आधार पर तीन समूह पास करने के बजाय, हमने केवल एक व्हेयर क्वेरी चलाई, और एकत्रित जानकारी प्राप्त करने के लिए पिनक्यू का उपयोग किया। निष्कर्षइस भाग में, हमने पुस्तकों के संग्रह को पहलू खोज करने की क्षमता लागू की। जैसा कि मैंने कहा, यह केवल एक छोटा सा उदाहरण है, जिसमें सुधार की गुंजाइश है और जिसकी कई सीमाएँ हैं। इस लेख में (वेबमास्टर स्तर - उन्नत) हम विभिन्न तरीकों से तथाकथित प्रतिच्छेदन के बारे में बात करेंगे। "मुखरित" नेविगेशन. सामग्री को आत्मसात करने को सरल बनाने के लिए, मैं विकिपीडिया लेख "पहलू वर्गीकरण" और प्रकाशनों को पढ़ने की सलाह देता हूँ अंग्रेजी भाषा(लेकिन चित्रों के साथ!) "अपनी वेबसाइटों के लिए बेहतर पहलू वाला नेविगेशन डिज़ाइन करें।" रंग के आधार पर फ़िल्टरिंग के साथ पहलूबद्ध नेविगेशन या मूल्य सीमाआपके आगंतुकों के लिए उपयोगी हो सकता है, लेकिन खोज में यह अक्सर हानिकारक होता है क्योंकि यह डुप्लिकेट सामग्री के साथ पतों के कई संयोजन बनाता है। डुप्लिकेट के कारण खोज इंजनसामग्री अपडेट के लिए साइट को शीघ्रता से स्कैन करने में सक्षम नहीं होगा, जिसके परिणामस्वरूप अनुक्रमण प्रभावित होता है। इस समस्या को कम करने और वेबमास्टरों को व्यापक नेविगेशन खोज को अनुकूल बनाने में मदद करने के लिए, हम यह करना चाहेंगे: उपयोगकर्ताओं और Google खोज के लिए आदर्श उत्पादों/लेख पृष्ठों का स्पष्ट पथ: श्रेणी पृष्ठ के लिए यूआरएल प्रतिनिधित्व: उत्पाद विशिष्ट यूआरएल प्रतिनिधित्व: पहलूबद्ध नेविगेशन के कारण अवांछित डुप्लिकेट एक ही पेज विभिन्न वेब पतों से पहुंच योग्य है: विहित पृष्ठ यूआरएल: example.com/product.php? आइटम=स्वीडिश-मछली डुप्लिकेट पेज यूआरएल:example.com/product.php? आइटम=स्वीडिश-मछली&श्रेणी=गमी-कैंडीज़&कीमत=5-10 श्रेणी=चिपचिपा-कैंडी&स्वाद=खट्टा&कीमत=5-10 त्रुटियाँ:
यूआरएल: example.com/category.php? श्रेणी=चिपचिपा-कैंडी&स्वाद=खट्टा&कीमत=10 से अधिक त्रुटियाँ:
उदाहरण संख्या 1: गैर-मानक पैरामीटर का उपयोग URL के भाग के रूप में किया जाता है: इसके बजाय अल्पविराम और कोष्ठक कुंजी=मूल्य&:
example.com/category?category=gummy-candy&sort=low-to-high&sid=789 उदाहरण #2: मानों की सूची में पैरामीटर के बजाय निर्देशिकाओं या फ़ाइल पथों का उपयोग करना जो पृष्ठ की सामग्री को नहीं बदलते हैं: अच्छा निर्णय:
सामान्य मान जो पृष्ठ की सामग्री को नहीं बदलते हैं और उन्हें यूआरएल पैरामीटर के रूप में सूचीबद्ध किया जाना चाहिए उनमें शामिल हैं:
क्रॉल किए गए और अनुक्रमित URL में साइट उपयोगकर्ताओं द्वारा उत्पन्न मामूली डेटा (जैसे देशांतर/अक्षांश या "दिन पहले") का उपयोग करना:
उपयोगकर्ता एजेंट: * अस्वीकृत: /फ़िल्टरिंग/ उदाहरण संख्या 4. बिना तर्क के यूआरएल पैरामीटर जोड़ना।
उदाहरण #5: शून्य परिणाम होने पर और अधिक परिशोधन (फ़िल्टरिंग) का सुझाव दें। बुरी तरह: शून्य परिणाम वाले पृष्ठ पर स्पष्टीकरण (उदाहरण के लिए, कीमत=10 से अधिक), जो उपयोगकर्ताओं को निराश करता है और खोज इंजनों के लिए अनावश्यक अनुरोधों का कारण बनता है। कैसे करें: शून्य परिणाम वाले पृष्ठ को प्रदर्शित करने की अनुमति नहीं है (उदाहरण के लिए, मूल्य=10 से अधिक), साथ ही उपयोगकर्ताओं को अनावश्यक क्लिक करने से प्रतिबंधित किया जाता है, और खोज इंजनों को इस उपयोगी पृष्ठ को क्रॉल करने से प्रतिबंधित किया जाता है। घटना को रोकना जरूरी है अनावश्यक पतेऔर केवल उत्पाद उपलब्ध होने पर ही यूआरएल बनाकर विज़िटर के लिए जगह कम करें। इससे उपयोगकर्ताओं को आपकी साइट पर लगे रहने में मदद मिलेगी (कोई उत्पाद नहीं मिलने पर बैक बटन पर कम क्लिक) और खोज इंजनों को ज्ञात संभावित यूआरएल की संख्या कम हो जाएगी। इसके अतिरिक्त, यदि कोई पृष्ठ न केवल "अस्थायी रूप से स्टॉक से बाहर" है, बल्कि उसमें कभी भी प्रासंगिक जानकारी होने की संभावना नहीं है, तो आप उसे 404 प्रतिक्रिया कोड देने पर विचार कर सकते हैं। अपने 404 पेज पर, आप नेविगेशन में अधिक विकल्पों वाले उपयोगकर्ताओं के लिए एक उपयोगी संदेश या एक खोज बॉक्स डिज़ाइन कर सकते हैं ताकि उपयोगकर्ता संबंधित उत्पाद पा सकें। नई साइटों के लिए जिनके वेबमास्टर पहलू नेविगेशन को लागू करने पर विचार कर रहे हैं, अद्वितीय सामग्री पृष्ठों के क्रॉलिंग (आपकी साइट पर Google को ज्ञात पतों का सेट) को अनुकूलित करने और डुप्लिकेट पृष्ठों को खोज इंजन इंडेक्स में आने से रोकने के लिए कई विकल्प हैं (अनुक्रमण का समेकन) संकेत)। निर्धारित करें कि प्रत्येक व्यक्तिगत सामग्री पृष्ठ को क्रॉल करने के लिए खोज इंजनों के लिए कौन से यूआरएल पैरामीटर आवश्यक हैं (अर्थात, यह निर्धारित करें कि प्रत्येक आइटम के लिए कम से कम एक क्लिक पथ बनाने के लिए कौन से पैरामीटर आवश्यक हैं)। आवश्यक मापदंडों में आइटम-आईडी, श्रेणी-आईडी, पृष्ठ आदि शामिल हो सकते हैं। निर्धारित करें कि कौन से पैरामीटर आगंतुकों के लिए उनके प्रश्नों के लिए उपयोगी होंगे, और कौन से पैरामीटर क्रॉलिंग और अनुक्रमण में दोहराव का कारण बन सकते हैं। कन्फेक्शनरी उदाहरण (मुरब्बा) में, यूआरएल पैरामीटर "स्वाद" स्वाद = खट्टा उदाहरण में प्रश्नों वाले उपयोगकर्ताओं के लिए मूल्यवान हो सकता है। हालाँकि, Category=gummy-candies&taste=sour&price=over-10 के अनावश्यक दोहराव के लिए "कीमत" पैरामीटर पर विचार करना तर्कसंगत है। अन्य सामान्य उदाहरण:
विकल्प 1: और आंतरिक लिंक सभी अनावश्यक यूआरएल को के साथ चिह्नित करें। इससे खोज रोबोट की श्रम लागत कम हो जाएगी और क्रॉलिंग आवृत्ति में कमी को रोका जा सकेगा। आपको robots.txt के माध्यम से विश्व स्तर पर स्कैनिंग का प्रबंधन करने की आवश्यकता है (अनुवादक का नोट: लेख " " देखें)। विकल्प 2: robots.txt और अस्वीकृत करें अनावश्यक पैरामीटर वाले यूआरएल को /फ़िल्टरिंग/ निर्देशिका में शामिल किया गया है, जिसे robots.txt में बंद कर दिया जाएगा (अस्वीकृत)। यह सभी खोज इंजनों को साइट के केवल "सही" इन-लिंक (सामग्री) को क्रॉल करने की अनुमति देगा, लेकिन अवांछित यूआरएल को क्रॉल करने से तुरंत रोक देगा। उदाहरण के लिए (example.com/category.php?category=gummy-candies), यदि मूल्यवान पैरामीटर आइटम, श्रेणी और स्वाद थे, और सत्र आईडी और कीमत अनावश्यक थे, तो स्वाद के लिए यूआरएल इस तरह होगा: विकल्प 3: अलग मेज़बान सुनिश्चित करें कि सर्वोत्तम समाधान, ऊपर सूचीबद्ध (उदाहरण के लिए, अनावश्यक पतों के लिए) अभी भी लागू होते हैं। अन्यथा, खोज इंजन पहले ही सूचकांक में एक बड़ा लिंक समूह बना चुके हैं। इस प्रकार, आपके कार्य का उद्देश्य Googlebot द्वारा क्रॉल किए गए अनावश्यक पृष्ठों की और वृद्धि को कम करना और अनुक्रमण संकेतों को समेकित करना होगा। मानक एन्कोडिंग और कुंजी=मान प्रारूप वाले पैरामीटर का उपयोग करें। सुनिश्चित करें कि वे मान जो पृष्ठ सामग्री को नहीं बदलते हैं, जैसे सत्र आईडी, निर्देशिकाओं के बजाय कुंजी = मान के रूप में लागू किए जाते हैं। जब फ़िल्टर करने के लिए कोई तत्व न हो तो क्लिक की अनुमति न दें या यूआरएल उत्पन्न न करें। यूआरएल पैरामीटर मैपिंग में तर्क जोड़ें: लगातार मान जोड़ने के बजाय अनावश्यक पैरामीटर हटाएं (उदाहरण के लिए इस तरह लिंक जनरेशन से बचें: example.com/product?cat=gummy-candy&cat=lollipops &cat=gummy-candy&item=swedish-fish )। यूआरएल में मूल्यवान पैरामीटरों को पहले सूचीबद्ध करके संग्रहीत करें (चूंकि यूआरएल खोज परिणामों में दिखाई देते हैं) और कम प्रासंगिक पैरामीटरों को अंत में (उदाहरण के लिए, सत्र आईडी)। सुनिश्चित करें कि कब जावास्क्रिप्ट का उपयोग करनायूआरएल को अपडेट किए बिना गतिशील सामग्री प्रबंधन (सॉर्ट/फ़िल्टर/छुपाएं) के लिए, आपकी साइट पर वास्तविक वेब पते हैं जिनका खोज मूल्य है, जैसे मुख्य श्रेणियां और उत्पाद पृष्ठ, जो क्रॉल करने योग्य और अनुक्रमित करने योग्य हैं। केवल प्रयोग न करने का प्रयास करें होम पेज(यानी एक यूआरएल) आपकी पूरी साइट के लिए, और नेविगेशन के साथ सामग्री को गतिशील रूप से बदलने के लिए जावास्क्रिप्ट का उपयोग करना - यह, दुर्भाग्य से, उपयोगकर्ताओं को खोजों में केवल एक यूआरएल देगा। साथ ही, जांचें कि डायनामिक फ़िल्टरिंग पर कोई प्रदर्शन प्रभाव तो नहीं पड़ रहा है सबसे ख़राब पक्ष, क्योंकि यह उपयोगकर्ता को साइट के साथ काम करने से रोकेगा। अनुक्रमणिका में सुधार करें विभिन्न पृष्ठपृष्ठ के विशेषाधिकार प्राप्त संस्करण के लिए rel='canonical' विशेषता निर्दिष्ट करके एक सामग्री। rel='canonical' विशेषता का उपयोग एक या अधिक डोमेन में किया जा सकता है। पृष्ठांकित सामग्री की अनुक्रमणिका को अनुकूलित करें (उदाहरण के लिए, "गमी कैंडीज़" श्रेणी से पृष्ठ = 1 और पृष्ठ = 2) या तो:
ये भी पढ़ें
|