परिचय
MySQL में फुल-टेक्स्ट सर्च (Full-Text Search) बड़ी मात्रा में टेक्स्ट डेटा में तेजी से खोज करने का एक शक्तिशाली तरीका है। यह MATCH() ... AGAINST सिंटैक्स का उपयोग करता है और इसके लिए FULLTEXT इंडेक्स की आवश्यकता होती है।
उदाहरण: टेबल और फुलटेक्स्ट इंडेक्स बनाना
mysql> CREATE TABLE DemoTable1542 (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(20)
-> );
Query OK, 0 rows affected (2.16 sec)
mysql> CREATE FULLTEXT INDEX search_name ON DemoTable1542(Name);
Query OK, 0 rows affected, 1 warning (10.51 sec)
Records: 0 Duplicates: 0 Warnings: 1
नोट:
चेतावनी (warning) आमतौर पर तब आती है जब टेबल इंजन InnoDB होता है और MySQL संस्करण 5.6 से पहले का होता है। MySQL 5.6+ में InnoDB फुलटेक्स्ट इंडेक्स का समर्थन करता है।
डेटा डालना
mysql> INSERT INTO DemoTable1542(Name) VALUES('John Doe');
Query OK, 1 row affected (0.31 sec)
mysql> INSERT INTO DemoTable1542(Name) VALUES('Chris Brown');
Query OK, 1 row affected (0.29 sec)
mysql> INSERT INTO DemoTable1542(Name) VALUES('John Smith');
Query OK, 1 row affected (0.46 sec)
mysql> INSERT INTO DemoTable1542(Name) VALUES('Adam Smith');
Query OK, 1 row affected (4.71 sec)
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable1542;
आउटपुट:
+----+-------------+
| Id | Name |
+----+-------------+
| 1 | John Doe |
| 2 | Chris Brown |
| 3 | John Smith |
| 4 | Adam Smith |
+----+-------------+
4 rows in set (0.04 sec)
फुल-टेक्स्ट सर्च क्वेरी
mysql> SELECT * FROM DemoTable1542
-> WHERE MATCH(Name) AGAINST('John' IN BOOLEAN MODE);
परिणाम
+----+------------+
| Id | Name |
+----+------------+
| 1 | John Doe |
| 3 | John Smith |
+----+------------+
2 rows in set (0.03 sec)
महत्वपूर्ण बिंदु
FULLTEXT INDEX- CHAR, VARCHAR, TEXT कॉलम पर बनाया जा सकता हैMATCH()- खोजने वाले कॉलम निर्दिष्ट करता हैAGAINST()- खोज शब्द और मोड निर्दिष्ट करता हैIN BOOLEAN MODE- बूलियन ऑपरेटर्स (+, -, *, आदि) का उपयोग करने की अनुमति देता है
बूलियन मोड ऑपरेटर्स
| ऑपरेटर | विवरण |
|---|---|
+ | शब्द अनिवार्य है |
- | शब्द नहीं होना चाहिए |
* | वाइल्डकार्ड (अंत में) |
"..." | सटीक वाक्यांश |
उदाहरण: MATCH(Name) AGAINST('+John -Doe' IN BOOLEAN MODE) - 'John' वाले लेकिन 'Doe' नहीं वाले रिकॉर्ड खोजेगा।
प्रदर्शन लाभ
- बड़े टेक्स्ट कॉलम में
LIKE '%word%'से बहुत तेज - स्टॉपवर्ड्स (stopwords) को स्वचालित रूप से अनदेखा करता है
- संबंधितता (relevance) स्कोरिंग प्रदान करता है
फुल-टेक्स्ट सर्च MySQL में टेक्स्ट-हेवी एप्लिकेशन के लिए आवश्यक फीचर है।