परिचय
बड़े टेक्स्ट कॉलम में तेजी से खोज के लिए MySQL का FULLTEXT इंडेक्स और MATCH() ... AGAINST सिंटैक्स का उपयोग करें। यह पारंपरिक LIKE '%word%' से बहुत तेज है।
उदाहरण: टेबल और फुलटेक्स्ट इंडेक्स बनाना
mysql> CREATE TABLE DemoTable1554 (
-> Title TEXT
-> );
Query OK, 0 rows affected (0.63 sec)
mysql> CREATE FULLTEXT INDEX faster_title ON DemoTable1554(Title);
Query OK, 0 rows affected, 1 warning (7.09 sec)
Records: 0 Duplicates: 0 Warnings: 1
डेटा डालना
mysql> INSERT INTO DemoTable1554 VALUES('John is working on MySQL database');
Query OK, 1 row affected (0.26 sec)
mysql> INSERT INTO DemoTable1554 VALUES('Adam Smith is working on Java language');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable1554 VALUES('John smith is working on Python Language');
Query OK, 1 row affected (0.17 sec)
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable1554;
आउटपुट:
+------------------------------------------+
| Title |
+------------------------------------------+
| John is working on MySQL database |
| Adam Smith is working on Java language |
| John smith is working on Python Language |
+------------------------------------------+
3 rows in set (0.00 sec)
तेज खोज क्वेरी
mysql> SELECT * FROM DemoTable1554
-> WHERE MATCH(Title) AGAINST('language' IN BOOLEAN MODE);
परिणाम
+------------------------------------------+
| Title |
+------------------------------------------+
| Adam Smith is working on Java language |
| John smith is working on Python Language |
+------------------------------------------+
2 rows in set (0.00 sec)
व्याख्या
MATCH(Title)- खोजने वाला कॉलमAGAINST('language' IN BOOLEAN MODE)- खोज शब्द 'language', बूलियन मोड में- केस-इनसेंसिटिव खोज (डिफ़ॉल्ट)
- 'language' और 'Language' दोनों मिलते हैं
- पहला रिकॉर्ड ('MySQL database') मेल नहीं खाता
फुलटेक्स्ट सर्च मोड्स
| मोड | विवरण |
|---|---|
IN NATURAL LANGUAGE MODE | डिफ़ॉल्ट, प्राकृतिक भाषा क्वेरी, संबंधितता क्रम |
IN BOOLEAN MODE | बूलियन ऑपरेटर्स (+, -, *, "") समर्थन |
WITH QUERY EXPANSION | खोज विस्तार (दो चरण) |
बूलियन मोड ऑपरेटर्स
+word- शब्द अनिवार्य-word- शब्द निषिद्धword*- वाइल्डकार्ड (प्रारंभ)"phrase"- सटीक वाक्यांश
आवश्यकताएं
- MyISAM या InnoDB (MySQL 5.6+)
- CHAR, VARCHAR, TEXT कॉलम
- न्यूनतम शब्द लंबाई (डिफ़ॉल्ट 4, कॉन्फ़िगर करने योग्य:
ft_min_word_len) - स्टॉपवर्ड सूची (कॉमन शब्द अनदेखे)
फुलटेक्स्ट सर्च बड़े टेक्स्ट डेटासेट पर खोज के लिए मानक समाधान है।