CASE WHEN के साथ कस्टम प्रासंगिकता क्रम
MySQL में खोज परिणामों को **प्रासंगिकता (relevance)** के अनुसार क्रमबद्ध करने के लिए CASE WHEN अभिव्यक्ति का उपयोग करके कस्टम प्राथमिकता परिभाषित करें।
उदाहरण परिदृश्य
उपयोगकर्ता नाम में 'Carol' खोजें, प्राथमिकता क्रम में:
- नाम 'Carol' से **शुरू** होता है (सबसे प्रासंगिक)
- नाम में ' Carol ' **बीच में** है (मध्यम)
- नाम 'Carol' पर **खत्म** होता है (कम)
- अन्य
व्यावहारिक उदाहरण
1. टेबल बनाएं और डेटा डालें
mysql> CREATE TABLE OrderByRelevance (
-> UserId INT,
-> UserName VARCHAR(200)
-> );
Query OK, 0 rows affected (0.51 sec)
mysql> INSERT INTO OrderByRelevance VALUES
-> (101, 'Carol Smith'),
-> (102, 'Carol Adams'),
-> (103, 'Carolnathan Todd'),
-> (104, 'John Smith'),
-> (105, 'Sam Carol Bond');
2. डेटा देखें
mysql> SELECT * FROM OrderByRelevance;
+--------+------------------+
| UserId | UserName |
+--------+------------------+
| 101 | Carol Smith |
| 102 | Carol Adams |
| 103 | Carolnathan Todd |
| 104 | John Smith |
| 105 | Sam Carol Bond |
+--------+------------------+
5 rows in set (0.00 sec)
3. प्रासंगिकता के अनुसार क्रमबद्ध करें
mysql> SELECT MAX(UserId) AS Id, UserName
-> FROM OrderByRelevance
-> WHERE UserName LIKE '%Carol%'
-> GROUP BY UserName
-> ORDER BY
-> CASE
-> WHEN UserName LIKE 'Carol%' THEN 0
-> WHEN UserName LIKE '% Carol %' THEN 1
-> WHEN UserName LIKE '%Carol' THEN 2
-> ELSE 3
-> END,
-> UserName;
+------+------------------+
| Id | UserName |
+------+------------------+
| 102 | Carol Adams |
| 101 | Carol Smith |
| 103 | Carolnathan Todd |
| 105 | Sam Carol Bond |
+------+------------------+
4 rows in set (0.00 sec)
व्याख्या
Carol%- 'Carol' से शुरू (प्राथमिकता 0)% Carol %- बीच में स्पेस के साथ ' Carol ' (प्राथमिकता 1)%Carol- 'Carol' पर खत्म (प्राथमिकता 2)ELSE 3- अन्य (प्राथमिकता 3)- द्वितीयक क्रम:
UserName(वर्णानुक्रम)
उन्नत: फुल-टेक्स्ट खोज प्रासंगिकता (MySQL 5.6+)
बड़े टेक्स्ट खोज के लिए MATCH() AGAINST() उपयोग करें:
SELECT *, MATCH(title, body) AGAINST('search term' IN NATURAL LANGUAGE MODE) AS relevance
FROM articles
WHERE MATCH(title, body) AGAINST('search term' IN NATURAL LANGUAGE MODE)
ORDER BY relevance DESC;
सर्वोत्तम अभ्यास
- सरल केस के लिए
CASE WHENठीक है - बड़े डेटा/जटिल खोज के लिए फुल-टेक्स्ट इंडेक्स +
MATCH AGAINST - ElasticSearch/Solr जैसे समर्पित खोज इंजन पर विचार करें