Natural Language Full-Text Search In MySQL In Hindi

📔 : MySQL 🔗

पिछले topic में आपने FULLTEXT search (FTS) का concept समझा , और इस topic में हम सीखेंगे कि FULLTEXT Index का use करके records को किस तरह से filter करते हैं।

MySQL natural-language full-text search

natural language full-text searches में MySQL Table से वही records fetch होते हैं जो search की गयी query के लिए सबसे relevant हों।

Most relevant records के लिए MySQL Relevance calculate करती है , basically Relevance एक floating point number होता है जब relevance 0 होता है तो इसका मतलब है कि कोई match नहीं है। MySQL कई factors के bases पर Relevance calculate करता है जैसे , row में कितने words हैं , कितने unique words हैं , total words कितने है और total rows कितनी है जिसमे वो particular word है।

***

MySQL में natural-language full-text searches perform करने के लिए WHERE Clause के साथ MATCH() और AGAINST() functions का use किया जाता है।

MySQL full-text search syntax

SELECT * FROM table_name WHERE MATCH(column_name) AGAINST('YOUR SEARCH QUERY');

MATCH() में हम वो column name pass करते हैं जिसमे FULLTEXT Index है , और AGAINST() function में को keywords रखते हैं , जिनके bases पर records filter करने हैं।

MySQL natural language full-text search example

natural-language full-text search के Example के लिए हम पिछले topic में बनाई हुई blogs table का use करेंगे जिसका structure कुछ इस तरह से है -

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| title       | varchar(255) | NO   |     | NULL    |                |
| description | text         | YES  | MUL | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

full-text search के लिए सबसे पहले title और description column में FULLTEXT Index add कर देते हैं।

ALTER TABLE blogs ADD FULLTEXT(title, description);

Example के लिए "PHP" word के bases पर records search करके देखते हैं -

SELECT title FROM blogs WHERE MATCH(title) AGAINST('PHP');
+---------------------+
| title               |
+---------------------+
| PHP Introduction    |
| PHP Variables       |
| PHP Magic Constants |
| PHP Operators       |
| Python Vs PHP       |
+---------------------+

FULLTEXT search की सबसे अच्छी बात यही है कि सबसे relevant records ही पहले आते हैं , जैसे कि आप output में देख सकते हैं जिन records PHP पहले हैं वो top पर हैं।

MySQL natural language mode

By default AGAINST() function , IN NATURAL LANGUAGE MODE को use करता है -

SELECT title FROM blogs WHERE MATCH(title) AGAINST('PHP', IN NATURAL LANGUAGE MODE);

ऊपर दी गयी query run करने पर भी आपको same result मिलेगा।

हालाँकि आप चाहे तो IN BOOLEAN MODE भी use कर सकते हैं , BOOLEAN mode थोड़ा advance search functionality provide करता है।

MySQL Sort records by relevance

आप multiple words को comma separated करके AGAINST() function में pass करके filter होने वाले records का order भी sort कर सकते हैं , जिस order में आप values pass करेंगे MySQL उसी order में records को show कर देगा।

SELECT title FROM blogs WHERE MATCH(title) AGAINST('php,python');

इससे सबसे पहले वो records आएंगे जिनमे PHP , Python दोनों होगा , फिर जिसमे सिर्फ Python होगा उसके बाद वो records होंगे जिनमे सिर्फ PHP होगा।

+---------------------+
| title               |
+---------------------+
| Python Vs PHP       |
| Python Tutorials    |
| PHP Introduction    |
| PHP Variables       |
| PHP Magic Constants |
| PHP Operators       |
+---------------------+

Hey ! I'm Rahul founder of learnhindituts.com. Working in IT industry more than 4.5 years. I love to talk about programming as well as writing technical tutorials and blogs that can help to others .... keep learning :)

Get connected with me - LinkedIn Twitter Instagram Facebook