blog-post

ऑटोकंप्लीट: खोज को अधिक उपयोगकर्ता-अनुकूल बनाना

परिचय

ऑटोकंप्लीट एक छोटी सी विशेषता लग सकती है, लेकिन इसका प्रभाव बहुत बड़ा है। यह टाइपिंग को बचाता है, लोगों को तेजी से वह चीज़ खोजने में मदद करता है जो वे चाहते हैं, और “कोई परिणाम नहीं” खोजों को रोकता है।

यह लेख Manticore Search के साथ ऑटोकंप्लीट बनाने के लिए एक व्यावहारिक मार्गदर्शिका है। आप देखेंगे कि कैसे उपयोग करें:

  • CALL AUTOCOMPLETE और /autocomplete HTTP एंडपॉइंट
  • CALL KEYWORDS के साथ तेज शब्दकोश लुकअप
  • इनफिक्स खोज और हाइलाइटिंग का उपयोग करके वाक्य पूर्ण करना
  • उत्पादन में ऑटोकंप्लीट चलाने के लिए व्यावहारिक सुझाव

ऑटोकंप्लीट क्रियान्वयन में

इसे किसे पढ़ना चाहिए

यह मार्गदर्शिका उन डेवलपर्स के लिए है जो एक ऑनलाइन स्टोर, दस्तावेज़ साइट, या आंतरिक उपकरण में खोज सुझाव जोड़ रहे हैं - विशेष रूप से यदि आप Manticore Search का उपयोग करते हैं या उपयोग करने की योजना बना रहे हैं। उदाहरण व्यावहारिक हैं और इन्हें आपके डेटा के खिलाफ सीधे आजमाया जा सकता है।

त्वरित निर्णय मार्गदर्शिका

  • जब आपको अनुक्रमित डेटा से टाइपो-टॉलरेंट, बहु-शब्द सुझावों की आवश्यकता हो, तो CALL AUTOCOMPLETE (या POST /autocomplete) का उपयोग करें।
  • जब आप एकल शब्दों या बहुत छोटे वाक्यांशों के लिए बिजली-तेज, शब्दकोश जैसे पूर्णता चाहते हैं, तो CALL KEYWORDS का उपयोग करें।
  • जब आप वाक्य या वाक्य स्तर के सुझाव चाहते हैं (जैसे किसी दस्तावेज़ वाक्य के शेष को दिखाना), तो हाइलाइटिंग के साथ इनफिक्स खोज का उपयोग करें।
  • यदि आप दो-शब्द पूर्वानुमान चाहते हैं (अगले शब्द की भविष्यवाणी), तो bigram_index सक्षम करें।

पूर्वापेक्षाएँ और चेतावनियाँ

  • CALL AUTOCOMPLETE और /autocomplete HTTP एंडपॉइंट के लिए Buddy की आवश्यकता है। यदि Buddy स्थापित नहीं है, तो ये कॉल काम नहीं करेंगे।
  • लक्षित तालिका में इनफिक्स सक्षम होना चाहिए (min_infix_len)। प्रदर्शन के लिए Manticore min_infix_len जांच को ~30 सेकंड के लिए कैश करता है; यदि आप min_infix_len को संशोधित करते हैं (जैसे, खोज प्रदर्शन को ट्यून करते समय या मौजूदा तालिका पर ऑटोकंप्लीट सक्षम करते समय), तो आप उस विंडो के दौरान एक छोटी असंगति देख सकते हैं।
  • CALL AUTOCOMPLETE केवल सफल जांचों को कैश करता है। यदि आप min_infix_len को अक्षम करते हैं या तालिका को हटा देते हैं, तो बाद की ऑटोकंप्लीट कॉल पुरानी हो सकती हैं जब तक कि कैश अपडेट न हो जाए या कोई त्रुटि न दिखाई दे।

CALL AUTOCOMPLETE — त्वरित उदाहरण (SQL)

यह आपके इंडेक्स से सुझाव उम्मीदवार प्राप्त करने का सबसे सीधा तरीका है।

CALL AUTOCOMPLETE('ice', 'products');

एक सामान्य परिणाम सेट में query नामक एकल कॉलम के साथ पंक्तियाँ होती हैं:

+---------------+
| query         |
+---------------+
| ice           |
| ice cream     |
| iceberg       |
| iceland       |
+---------------+

CALL AUTOCOMPLETE कैसे काम करता है (संक्षेप में)

CALL AUTOCOMPLETE एक उच्च-स्तरीय सुविधा है जो Manticore के अंदर कई निम्न-स्तरीय प्राइमिटिव्स का समन्वय करती है ताकि तेज, प्रासंगिक सुझाव उत्पन्न किए जा सकें। व्यावहारिक रूप से यह संयोजित करता है:

  • CALL KEYWORDS: तेज शब्दकोश लुकअप जो उपसर्ग/इनफिक्स टोकन उम्मीदवार और सांख्यिकी (docs/hits) लौटाते हैं। यही ऑटोकंप्लीट को इंडेक्स शब्दकोश से मजबूत, कम-लेटेंसी उम्मीदवार प्रदान करता है।
  • सुझाव रूटीन (ऐतिहासिक रूप से CALL SUGGEST / CALL QSUGGEST के माध्यम से उजागर): रूटीन जो टोकन (विशेष रूप से अंतिम शब्द) के लिए धुंधले रूपांतर उत्पन्न करते हैं और टाइपो-टॉलरेंट विकल्प उत्पन्न करने में मदद करते हैं।
  • धुंधली-खोज तर्क: वही संपादन-फासला (Levenshtein) और रैंकिंग ह्यूरिस्टिक्स जो धुंधली खोज के लिए पेश किए गए थे, जिन्हें ऑटोकंप्लीट प्रवाह उम्मीदवारों को रैंक और फ़िल्टर करने के लिए पुनः उपयोग करता है।

ये घटक एक साथ काम करते हैं: कीवर्ड उम्मीदवार प्रदान करते हैं, सुझाव/धुंधले रूटीन उन्हें विस्तारित और मरम्मत करते हैं, और धुंधली तर्क दूरी और लोकप्रियता के आधार पर परिणामों को रैंक/फ़िल्टर करते हैं। कीबोर्ड-लेआउट अनुमान (जब सक्षम हो) प्रारंभ में लागू किया जाता है ताकि लेआउट-टाइप की गई इनपुट को धुंधलापन की गणना से पहले सही किया जा सके।

जब CALL KEYWORDS को सीधे कॉल न करें

CALL KEYWORDS एक उत्कृष्ट, अत्यंत तेज़ उपकरण है जब आपको सख्त शब्दकोश-आधारित पूर्णता (सटीक उपसर्ग/इनफिक्स मेल) की आवश्यकता हो। हालाँकि, यह टाइपो सहिष्णुता या बहु-शब्द सुझाव संयोजन प्रदान नहीं करता है। बहु-शब्द, टाइपो-टॉलरेंट सुझावों के लिए CALL AUTOCOMPLETE को प्राथमिकता दें; बहुत छोटे उपसर्ग, हॉट सूचियों के लिए या जब आप स्पष्ट रूप से केवल शब्दकोश परिणाम चाहते हैं, तो CALL KEYWORDS का उपयोग करें।

विकल्पों का मानचित्रण (उच्च-स्तरीय)

  • CALL AUTOCOMPLETE में fuzziness सुझाव APIs में max_edits के समान संपादन दूरी को सीमित करने के लिए है।
  • preserve नियंत्रित करता है कि क्या गैर-धुंधले टोकन धुंधले मेल के साथ रखे जाते हैं।
  • layouts धुंधली मूल्यांकन से पहले कीबोर्ड-लेआउट अनुमान को सक्षम करता है।

नोट: यहां वर्णित प्राइमिटिव्स का आंतरिक संयोजन कार्यान्वयन दृष्टिकोण को दर्शाता है लेकिन इसे कार्यान्वयन विवरण के रूप में माना जाना चाहिए - अपने आवेदन को डिज़ाइन करते समय आंतरिक व्यवहार के बजाय प्रलेखित CALL AUTOCOMPLETE API और विकल्पों पर भरोसा करें।

ये आंतरिक संयोजन ही कारण हैं कि CALL AUTOCOMPLETE अक्सर CALL KEYWORDS को अकेले चलाने की तुलना में बेहतर, अधिक उपयोगी सुझाव देता है।

HTTP/JSON उदाहरण (Buddy)

यदि आप HTTP पसंद करते हैं या आपके पास एक फ्रंटेंड है जो JSON से बात करता है, तो Buddy द्वारा प्रदान किए गए /autocomplete एंडपॉइंट का उपयोग करें:

POST /autocomplete
{
  "table": "products",
  "query": "ice"
}

JSON प्रतिक्रिया एक सुझाव पूर्णताओं (और मेटाडेटा) की एक श्रृंखला लौटाती है जिसे आप UI में प्रस्तुत कर सकते हैं।

CALL AUTOCOMPLETE विकल्पों की व्याख्या

CALL AUTOCOMPLETE व्यवहार को ट्यून करने के लिए कई विकल्प स्वीकार करता है। यहां वे हैं जिनका आप सबसे अधिक बार उपयोग करेंगे:

  • layouts: अल्पविराम से अलग कीबोर्ड लेआउट कोड (us, ru, ua, de, fr, आदि)। इसका उपयोग लेआउट-टाइप की गई इनपुट का पता लगाने के लिए करें (जैसे, अंग्रेजी लेआउट पर “ghbdtn” टाइप करना जब आप “привет” - रूसी में “नमस्ते” टाइप करना चाहते थे)। चरित्र स्थानों की तुलना करने के लिए कम से कम दो लेआउट की आवश्यकता होती है।
  • fuzziness: 0, 1, या 2 (डिफ़ॉल्ट 2)। टाइपोस के लिए मेल खाने के लिए अधिकतम Levenshtein दूरी। धुंधलापन अक्षम करने के लिए 0 पर सेट करें।
  • preserve: 0 या 1 (डिफ़ॉल्ट 0)। यदि 1 है, तो सुझावों में वे शब्द शामिल होंगे जो धुंधले मेल नहीं हुए (उचित नामों या छोटे टोकनों को बनाए रखने के लिए उपयोगी)।
  • prepend / append: बूलियन (0/1)। यदि सत्य है, तो अंतिम शब्द के पहले/बाद में एक तारांकित चिह्न जोड़ा जाता है ताकि उपसर्ग/प्रत्यय का विस्तार किया जा सके (जैसे, prepend -> *शब्द, append -> शब्द*)।
  • expansion_len: अंतिम टोकन का विस्तार करने के लिए अक्षरों की संख्या (डिफ़ॉल्ट 10)। यह नियंत्रित करता है कि कितने अक्षरों को विस्तार के लिए माना जाएगा।

विकल्पों के साथ उदाहरण (SQL)

CALL AUTOCOMPLETE('ghbdtn', 'comments', 'layouts=us,ru', 'fuzziness=1');

यह पहचान करेगा कि “ghbdtn” “привет” (रूसी में “नमस्ते”) का एक लेआउट-टाइप किया गया संस्करण है और सही सुझाव खोजने के लिए फजी मिलान लागू करेगा।


कॉल कीवर्ड्स — टोकन-आधारित पूर्णताएँ

जब आपको केवल एकल शब्द (या अंत) सुझाने की आवश्यकता होती है और अधिकतम गति चाहिए, तो CALL KEYWORDS एक उत्कृष्ट विकल्प है। यह दस्तावेज़ों को स्कैन करने के बजाय अनुक्रमणिका शब्दकोश का उपयोग करता है, जो इसे बहुत कुशल बनाता है।

बुनियादी सिंटैक्स:

CALL KEYWORDS('ca*', 'products', 1 AS stats, 'hits' AS sort_mode);

यह tokenized और normalized रूपों और वैकल्पिक आँकड़ों (docs, hits) के साथ पंक्तियाँ लौटाता है। hits द्वारा क्रमबद्ध करने से सबसे लोकप्रिय पूर्णताएँ सामने आती हैं।

उदाहरण परिणाम (चित्रण):

+------+-----------+------------+------+------+
| qpos | tokenized | normalized | docs | hits |
+------+-----------+------------+------+------+
| 1    | ca*       | cat        | 1    | 2    |
| 1    | ca*       | carnivorous| 1    | 1    |
+------+-----------+------------+------+------+

बिग्राम_इंडेक्स ट्रिक

यदि आपकी तालिका में bigram_index सक्षम है, तो अनुक्रमणिका निकटवर्ती शब्दों के जोड़े को टोकन के रूप में संग्रहीत करती है। यह आपको संभावित अगले शब्दों का सुझाव देने की अनुमति देता है (“अगले शब्द की भविष्यवाणी करें”) न कि केवल वर्तमान टोकन को समाप्त करने के लिए। यह एक सरल लेकिन शक्तिशाली तरीका है जो बाहरी ML मॉडल जोड़े बिना बहु-शब्द सुझावों में सुधार करता है।


इन्फिक्स खोज और हाइलाइटिंग के साथ वाक्य पूर्णता

वाक्यांशों या वाक्य के अंत (जैसे, दस्तावेज़ से वाक्य के शेष भाग को स्वचालित रूप से पूरा करना) की पूर्णता के लिए, वाइल्डकार्ड के साथ इन्फिक्स क्वेरी का उपयोग करें और मिलान को हाइलाइट करें। उदाहरण के लिए, उन दस्तावेज़ों को खोजने के लिए जहां एक फ़ील्ड एक टाइप किए गए अंश से शुरू होती है:

  • क्वेरी उदाहरण जो आप उपयोगकर्ता के टाइप करते समय जारी कर सकते हैं:
    • ^"m*"
    • ^"my *"
    • ^"my c*"
    • ^"my ca*"

^ एंकर का उपयोग करें ताकि शुरुआत से मिलान किया जा सके और * शेष का विस्तार करने के लिए। हाइलाइटिंग सक्षम होने पर, आप मिलान किए गए भाग को निकाल सकते हैं और इसे एक सुझाव के रूप में प्रस्तुत कर सकते हैं (उदाहरण: “मेरी बिल्ली को पसंद है …")।

यह दृष्टिकोण तब सबसे अच्छा है जब आप सुझाव चाहते हैं जो पूर्ण वाक्यांश या दस्तावेज़ स्निपेट हैं न कि अलग-थलग टोकन।


एकीकरण पैटर्न (फ्रंटेंड → बैकेंड)

एक न्यूनतम, उत्पादन-अनुकूल प्रवाह इस प्रकार दिखता है:

  1. उपयोगकर्ता इनपुट को डिबाउंस करें (150–300 मिलीसेकंड) ताकि बहुत अधिक अनुरोधों से बचा जा सके।
  2. 1–2 अक्षरों के लिए, CALL KEYWORDS या एक हॉट लिस्ट का उपयोग करें।
  3. 3+ अक्षरों के लिए, /autocomplete या CALL AUTOCOMPLETE कॉल करें। अपने उपयोगकर्ताओं के आधार पर उपयुक्त विकल्प (layouts, fuzziness) शामिल करें।
  4. हाइलाइट किए गए मिलानों के साथ सुझाव दिखाएँ।
  5. क्लिक को ट्रैक करें और लोकप्रियता या व्यावसायिक नियमों के अनुसार सुझावों को पुनर्व्यवस्थित करें।

UX टिप्स

  • डेस्कटॉप पर 6–10 सुझाव दिखाएँ, मोबाइल पर 3–5।
  • यदि प्रासंगिक हो तो प्रकार (जैसे, उत्पाद, दस्तावेज़, लोग) के अनुसार समूह बनाएं।
  • हमेशा एक बैकअप पेश करें: जैसे, “खोजें {query}"।

उत्पादन टिप्स

  • min_infix_len: सुनिश्चित करें कि यह आपकी भाषा और उपयोग के मामले के लिए उचित रूप से सेट है। बहुत छोटे मान अनुक्रमणिका के आकार और CPU उपयोग को बढ़ाते हैं; बहुत बड़े मान मिलान की लचीलापन को कम करते हैं।
  • कैशिंग: min_infix_len जैसे परिवर्तनों के प्रभावी होने के लिए ~30 सेकंड की अनुमति दें।
  • दर सीमित करना: भारी ट्रैफ़िक के लिए अनुरोध थ्रॉटलिंग या इन-मेमोरी कैशिंग का उपयोग करें।
  • अनुक्रमणिका रखरखाव: सबसे सामान्य उपसर्गों के लिए “शीर्ष सुझाव” तालिका को पूर्व-गणना करने पर विचार करें।

समस्या निवारण चेकलिस्ट

यदि ऑटोकंप्लीट अप्रत्याशित रूप से व्यवहार करता है:

  1. सत्यापित करें कि बडी स्थापित है (यदि /autocomplete का उपयोग कर रहे हैं)।
  2. पुष्टि करें कि तालिका में min_infix_len सेट है और इन्फिक्स सक्षम हैं।
  3. यदि आपने हाल ही में तालिका सेटिंग्स को बदला है तो आंतरिक कैश को ताज़ा करने के लिए 30 सेकंड बाद पुनः प्रयास करें।
  4. सुनिश्चित करें कि शब्दकोश में टोकन मौजूद हैं यह सुनिश्चित करने के लिए समान उपसर्ग के लिए CALL KEYWORDS आज़माएँ।
  5. परिणामों को प्रभावित कर सकते हैं ऐसे एन्कोडिंग और टोकनाइजेशन सेटिंग्स (morphology, stopwords) की जाँच करें।

उदाहरण: पूर्ण प्रवाह (नमूना)

उपयोगकर्ता टाइप करता है: “ice c”

क्लाइंट (डिबाउंस किया गया) भेजता है:

POST /autocomplete
{
  "table": "products",
  "query": "ice c",
  "options": { "fuzziness": 1 }
}

सर्वर सुझाव लौटाता है जैसे “ice cream”, “ice coffee”, “ice cold”। UI इन्हें दिखाता है; चयन पर क्लाइंट एक खोज URL पर नेविगेट करता है जैसे /search?q=ice+cream या चयनित सुझाव का उपयोग करके उत्पाद विवरण लाता है।


निष्कर्ष

ऑटोकंप्लीट एक छोटा UX फीचर है जो बड़े मूल्य प्रदान करता है: तेज़ खोजें, कम मृत अंत, और उच्च उपयोगकर्ता संतोष। Manticore Search के साथ आपके पास सुझाव लागू करने के लिए व्यावहारिक विकल्प हैं — तेज़, शब्दकोश-चालित CALL KEYWORDS से लेकर अधिक लचीले, टाइपो-टॉलरेंट CALL AUTOCOMPLETE (और बडी के माध्यम से HTTP /autocomplete एंडपॉइंट)। यहां वर्णित दृष्टिकोणों का उपयोग करें ताकि आपकी एप्लिकेशन के लिए विलंबता, सटीकता और संसाधन लागत का संतुलन बनाया जा सके।

इस लेख में दिए गए उदाहरणों को अपने अनुक्रमणिका के खिलाफ आज़माएँ, सुझावों की गुणवत्ता की निगरानी करें, और अपने डेटा और उपयोगकर्ताओं के अनुसार fuzziness और min_infix_len जैसे विकल्पों को ट्यून करें। यदि आपको एक हल्का प्रारंभिक बिंदु चाहिए, तो सबसे सामान्य उपसर्गों के लिए एक छोटा हॉट-लिस्ट बनाएं और लंबे इनपुट को CALL AUTOCOMPLETE के माध्यम से रूट करें।

ऑटोकंप्लीट के साथ स्मार्ट, तेज़ खोज बनाएं।

मैंटीकोर सर्च इंस्टॉल करें

मैंटीकोर सर्च इंस्टॉल करें