परिचय
MySQL का SOUNDS LIKE ऑपरेटर (या SOUNDEX() फंक्शन) ध्वन्यात्मक समानता (phonetic similarity) के आधार पर खोज करता है। यह टाइपो (उदाहरण: 'deom' के लिए 'demo', 'samsumg' के लिए 'samsung') सहन करने के लिए उपयोगी है।
उदाहरण: टेबल बनाना और डेटा डालना
mysql> CREATE TABLE DemoTable (
-> Name VARCHAR(20)
-> );
Query OK, 0 rows affected (0.95 sec)
mysql> INSERT INTO DemoTable VALUES('John');
Query OK, 1 row affected (0.24 sec)
mysql> INSERT INTO DemoTable VALUES('Adam');
Query OK, 1 row affected (0.33 sec)
mysql> INSERT INTO DemoTable VALUES('Johm');
Query OK, 1 row affected (0.29 sec)
mysql> INSERT INTO DemoTable VALUES('Carol');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable VALUES('SAMSUNG');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES('SAMSUMG');
Query OK, 1 row affected (0.13 sec)
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+---------+
| Name |
+---------+
| John |
| Adam |
| Johm |
| Carol |
| SAMSUNG |
| SAMSUMG |
+---------+
6 rows in set (0.00 sec)
ध्वन्यात्मक खोज क्वेरी
mysql> SELECT * FROM DemoTable WHERE Name SOUNDS LIKE 'samsung';
परिणाम
+---------+
| Name |
+---------+
| SAMSUNG |
| SAMSUMG |
+---------+
2 rows in set (0.00 sec)
व्याख्या
SOUNDS LIKE-SOUNDEX(expr1) = SOUNDEX(expr2)के बराबरSOUNDEX()- स्ट्रिंग को 4-अक्षर कोड में बदलता है जो अंग्रेजी उच्चारण का अनुमान लगाता है- 'SAMSUNG' और 'SAMSUMG' का समान SOUNDEX कोड होता है
- 'John' और 'Johm' का भी समान SOUNDEX हो सकता है (परीक्षण करें)
SOUNDEX उदाहरण
mysql> SELECT SOUNDEX('SAMSUNG'), SOUNDEX('SAMSUMG'), SOUNDEX('John'), SOUNDEX('Johm');
+--------------------+--------------------+----------------+----------------+
| SOUNDEX('SAMSUNG') | SOUNDEX('SAMSUMG') | SOUNDEX('John') | SOUNDEX('Johm') |
+--------------------+--------------------+----------------+----------------+
| S525 | S525 | J500 | J500 |
+--------------------+--------------------+----------------+----------------+
1 row in set (0.00 sec)
सीमाएं
- अंग्रेजी-केंद्रित: अंग्रेजी उच्चारण नियमों पर आधारित
- सीमित सटीकता: कई गलत सकारात्मक/नकारात्मक
- कोई इंडेक्स नहीं: फुल टेबल स्कैन
- छोटे स्ट्रिंग्स: 1-2 अक्षर वाले शब्दों के लिए खराब
बेहतर विकल्प
| तकनीक | उपयोग |
|---|---|
| Levenshtein दूरी | संपादन दूरी (UDAF या एप्लिकेशन लेवल) |
| Trigram/NGram | उपस्ट्रिंग समानता (pg_trgm, Elasticsearch) |
| फुलटेक्स्ट + क्वेरी विस्तार | MySQL बिल्ट-इन |
| एप्लिकेशन-लेवल फजी खोज | सबसे लचीला (Elasticsearch, Algolia) |