ऑटो पूर्ण सुविधा के अलावा, जिसके लिए हमने इस कोर्स में एक सरल उदाहरण कवर किया, लोगों द्वारा खोज अनुप्रयोगों में जोड़ी जाने वाली एक अन्य सामान्य सुविधा यह है कि गलत टाइप किए गए शब्द के सुधार दिखाने की क्षमता है।
Manticore Search में एक विशेषता है जो शब्द के लिए अनुक्रमांक शब्दकोष से सुझाव प्राप्त करने की अनुमति देती है।
यह इनफिक्सिंग विकल्प को सक्षम करके किया जा सकता है। न केवल इनफिक्सिंग वाइल्डकार्ड खोजों की अनुमति देती है, बल्कि यह अनुक्रमांकित शब्दों से एन-ग्राम हैश भी बनाती है।
एन-ग्राम (या केवल एन वर्णों की लंबाई के शब्दों के भाग) का उपयोग एक-दूसरे के करीब के शब्दों को खोजने के लिए किया जाता है (सादा पाठ के रूप में, भाषाई विचार से नहीं)। सुझाव उम्मीदवार शब्द और मूल शब्द के बीच लेवेनस्टीन दूरी के साथ मिलकर, हम सुझाव प्रदान कर सकते हैं जो बुरे शब्द के सुधार के लिए उपयुक्त होते हैं। यह कार्यक्षमता CALL SUGGEST और CALL QSUGGEST फ़ंक्शंस ( और पढ़ें दस्तावेज़ में) द्वारा प्रदान की जाती है।
तो चलिए नीचे Manticore Search में इसे कैसे काम करता है, इसकी समीक्षा करते हैं या आप हमारे संवादात्मक कोर्स में खुद इससे कोशिश कर सकते हैं।
सबसे पहले, हमें अपने अनुक्रमांक में इनफिक्सिंग को सक्षम करना चाहिए।
index movies
{
type = plain
path = /var/lib/manticore/data/movies
source = movies
min_infix_len = 3
}
CALL SUGGEST का उपयोग
जब एक उपयोगकर्ता एक क्वेरी करता है जो परिणाम नहीं लौटाती है, तो संभव है कि उपयोगकर्ता ने कुछ गलत टाइप किया हो।
आइए Manticore से कनेक्ट करते हैं और एक उदाहरण लेते हैं ( ‘revenge’ में गलत टाइपिंग का ध्यान रखें):
mysql -P9306 -h0
root@didyoumean-b85fb586f-2nvh2:/tutorial# mysql -P9306 -h0
MariaDB मॉनिटर में आपका स्वागत है। आदेश ; या g के साथ समाप्त होते हैं।
आपकी MySQL कनेक्शन आईडी 1 है
सर्वर संस्करण: 3.2.0 e526a014@191017 रिलीज़
कॉपीराइट (c) 2000, 2018, Oracle, MariaDB Corporation Ab और अन्य।
सहायता के लिए 'help;' या 'h' टाइप करें। वर्तमान इनपुट स्टेटमेंट को साफ़ करने के लिए 'c' टाइप करें।
और एक शब्द के सुझाव का त्वरित उदाहरण लें:
CALL SUGGEST('rvenge','movies');
MySQL [(none)]> CALL SUGGEST('rvenge','movies');
+---------+----------+------+
| suggest | distance | docs |
+---------+----------+------+
| revenge | 1 | 77 |
| range | 2 | 5 |
| avenger | 2 | 3 |
| avenged | 2 | 1 |
| event | 3 | 9 |
+---------+----------+------+
5 rows in set (0.00 sec)
आउटपुट में 3 कॉलम शामिल हैं: सुझाव, एक गणना की गई लेवेनस्टीन दूरी और अनुक्रमांक में सुझावों के doc हिट।
पहला सुझाव हमारे इनपुट की तुलना में 1 की दूरी रखता है और यह वास्तविक शब्द है जिसे प्रस्तावित किया जाना चाहिए।
यह आमतौर पर सबसे अच्छा परिदृश्य होता है जब हमें न्यूनतम दूरी पर एकल सुझाव प्राप्त होता है, क्योंकि यह सबसे अधिक संभावना है कि यही वह शब्द है जिसकी हमें खोज है।
यह संभव है कि दूरी 1 के लिए एक से अधिक सुझाव हो:
CALL SUGGEST('aprentice','movies');
MySQL [(none)]> CALL SUGGEST('aprentice','movies');
+------------+----------+------+
| suggest | distance | docs |
+------------+----------+------+
| apprentice | 1 | 6 |
| prentice | 1 | 1 |
| practice | 3 | 5 |
| argentine | 3 | 1 |
| prestige | 3 | 1 |
+------------+----------+------+
5 rows in set (0.00 sec)
जब वे एक ही दूरी साझा करते हैं, तो सुझावों को फिर से उनके doc हिट के अनुसार क्रमबद्ध किया जाता है।
इस उदाहरण में, ‘apprentice’ सबसे अधिक संभावित है जो उपयोगकर्ता चाहता था क्योंकि इसके हिट ‘prentice’ से अधिक हैं।
बेशक, जब इनपुट शब्द वास्तव में हमारे अनुक्रमांक में पाया जाता है, तो यह पहले सुझाव के रूप में दिखाई देगा, जिसकी दूरी=0 होती है
CALL SUGGEST('revenge','movies');
MySQL [(none)]> CALL SUGGEST('revenge','movies');
+----------+----------+------+
| suggest | distance | docs |
+----------+----------+------+
| revenge | 0 | 77 |
| reverse | 2 | 2 |
| revelle | 2 | 1 |
| seven | 3 | 11 |
| berenger | 3 | 9 |
+----------+----------+------+
5 rows in set (0.01 sec)
अगर हम सुझावों की संख्या बढ़ाना चाहते हैं, तो हम सीमा पैरामीटर जोड़ सकते हैं:
CALL SUGGEST('aprentice','movies', 10 as limit);
MySQL [(none)]> CALL SUGGEST('aprentice','movies', 10 as limit);
+------------+----------+------+
| suggest | distance | docs |
+------------+----------+------+
| apprentice | 1 | 6 |
| prentice | 1 | 1 |
| practice | 3 | 5 |
| argentine | 3 | 1 |
| prestige | 3 | 1 |
| adventure | 4 | 894 |
| lawrence | 4 | 43 |
| laurence | 4 | 10 |
| terence | 4 | 9 |
| prejudice | 4 | 9 |
+------------+----------+------+
10 rows in set (0.00 sec)
अगर हम सुझावों को प्रतिबंधित करना चाहते हैं, तो हम अधिकतम लेवेनस्टीन दूरी (डिफ़ॉल्ट 4 है) और अधिकतम शब्द की लंबाई (डिफ़ॉल्ट 3 है) को कम कर सकते हैं:
CALL SUGGEST('aprentice','movies', 10 as limit,3 as max_edits,2 as delta_len);
MySQL [(none)]> CALL SUGGEST('aprentice','movies', 10 as limit,3 as max_ dits,2 as delta_len);
+------------+----------+------+
| suggest | distance | docs |
+------------+----------+------+
| apprentice | 1 | 6 |
| prentice | 1 | 1 |
| practice | 3 | 5 |
| argentine | 3 | 1 |
| prestige | 3 | 1 |
+------------+----------+------+
5 rows in set (0.00 sec)
अगले चरण के लिए, हमें MySQL क्लाइंट से बाहर निकलने की आवश्यकता है
exit;
MySQL [(none)]> exit;
अलविदा
कार्यशील उदाहरण
‘क्या आप मतलब रखते थे’ का एक सरल कार्यशील उदाहरण हमारे संवादात्मक कोर्स के वेब पैनल में देखा जा सकता है।
PHP स्क्रिप्ट एक सरल खोज पृष्ठ परिणाम प्रदान करती है।
यदि इनपुट स्ट्रिंग को कोई परिणाम नहीं मिलता है, तो स्क्रिप्ट ‘CALL SUGGEST’ के साथ प्रत्येक शब्द का परीक्षण करती है और एक नया क्वेरी स्ट्रिंग बनाने का प्रयास करती है।
If the new query string has matched, it’s result set is provided.
The script can be viewed with cat /html/index.php
root@didyoumean-b85fb586f-2nvh2:/tutorial# cat /html/index.php
If you feel something is missing, try the course , read the documentation or ask in the community.