Full-Text Search
In this page:
FULLTEXT (column_name)
SELECT * FROM table_name
WHERE MATCH(column_name) AGAINST('search text' [IN BOOLEAN MODE]);
एक FULLTEXT Index क्या है?
एक regular index सिर्फ exact values match करता है, लेकिन एक FULLTEXT index किसी text column के अंदर words analyze करता है ताकि आप एक term search कर सकें जो एक लंबे paragraph में कहीं भी दिखे, सिर्फ field की शुरुआत में नहीं।
उदाहरण: What is a FULLTEXT Index?
CREATE TABLE articles (id INT, body TEXT, FULLTEXT (body)) ENGINE=InnoDB;
INSERT INTO articles VALUES (1, 'MySQL supports full text search on text columns');
SELECT * FROM articles WHERE MATCH(body) AGAINST('search');
NATURAL LANGUAGE Mode इस्तेमाल करना
NATURAL LANGUAGE mode एक typical search engine जैसा behave करता है — यह आपके search phrase को interpret करता है, matching words वाली rows ढूँढता है, और automatically results को rank करता है इसके आधार पर कि हर match कितना relevant है।
उदाहरण: Using NATURAL LANGUAGE Mode
CREATE TABLE articles (id INT, body TEXT, FULLTEXT (body)) ENGINE=InnoDB;
INSERT INTO articles VALUES (1, 'MySQL full text search ranks results by relevance');
SELECT *, MATCH(body) AGAINST('full text search' IN NATURAL LANGUAGE MODE) AS relevance
FROM articles;
BOOLEAN Mode इस्तेमाल करना
BOOLEAN mode special operators इस्तेमाल करके explicit control देता है: एक word को plus sign से prefix करना इसे appear करने की माँग करता है, जबकि एक minus sign उस word वाली rows को पूरी तरह exclude करता है।
उदाहरण: Using BOOLEAN Mode
CREATE TABLE articles (id INT, body TEXT, FULLTEXT (body)) ENGINE=InnoDB;
INSERT INTO articles VALUES (1, 'MySQL search'), (2, 'PostgreSQL search');
SELECT * FROM articles WHERE MATCH(body) AGAINST('+search -PostgreSQL' IN BOOLEAN MODE);
Query Expansion Mode
Query expansion mode छोटी, vague searches के लिए designed है — यह आपकी search एक बार चलाता है, top matches से commonly associated words निकालता है, फिर उन extra terms को शामिल करके search फिर चलाता है results broaden करने के लिए।
उदाहरण: Query Expansion Mode
CREATE TABLE articles (id INT, body TEXT, FULLTEXT (body)) ENGINE=InnoDB;
INSERT INTO articles VALUES (1, 'database indexing basics');
SELECT * FROM articles WHERE MATCH(body) AGAINST('database' WITH QUERY EXPANSION);
Performance और FULLTEXT Best Practices
FULLTEXT indexes real overhead add करते हैं, इसलिए इन्हें सिर्फ उन columns पर apply करना उचित है जिन्हें genuinely text search चाहिए, और आप अपनी query results में सीधे हर row को MySQL द्वारा assign किया गया relevance score inspect कर सकते हैं।
उदाहरण: Performance and FULLTEXT Best Practices
CREATE TABLE articles (id INT, body TEXT, FULLTEXT (body)) ENGINE=InnoDB;
INSERT INTO articles VALUES (1, 'MySQL full text search');
SELECT id, MATCH(body) AGAINST('MySQL') AS relevance_score FROM articles;
- बड़े data पर search के लिए एक
FULLTEXTindex के बजायLIKE '%word%'इस्तेमाल करना। - एक ऐसे column पर
MATCH(col)इस्तेमाल करना जो एकFULLTEXTindex में नहीं है, जो एक error देता है। - बहुत छोटे words या common stopwords search करना, जिन्हें index ignore करता है।
Chapter Quiz — Complete all 5 topics to unlock
0/5 topics done
Complete these topics first: