MariaDB
 sql >> डेटाबेस >  >> RDS >> MariaDB

कैसे MATCH AGAINST MariaDB . में काम करता है

मारियाडीबी में, MATCH AGAINST एक विशेष निर्माण है जिसका उपयोग पूर्ण-पाठ अनुक्रमणिका पर पूर्ण-पाठ खोज करने के लिए किया जाता है।

सिंटैक्स

वाक्य रचना इस प्रकार है:

MATCH (col1,col2,...) AGAINST (expr [search_modifier])

उदाहरण

मान लीजिए हमारे पास Products . नामक एक टेबल है जिसमें निम्न डेटा शामिल है:

+----+---------------------------------+-----------------------------------------+
| Id | ProductName                     | ProductDescription                      |
+----+---------------------------------+-----------------------------------------+
|  1 | Left handed screwdriver         | Purple. Includes left handed carry box. |
|  2 | Right handed screwdriver        | Blue. Includes right handed carry box.  |
|  3 | Long Weight (blue)              | Approximate 45 minute waiting period.   |
|  4 | Long Weight (green)             | Approximate 30 minute waiting period.   |
|  5 | Sledge Hammer                   | Wooden handle. Free wine glasses.       |
|  6 | Chainsaw                        | Orange. Includes spare fingers.         |
|  7 | Straw Dog Box                   | Tied with vines. Very chewable.         |
|  8 | Bottomless Coffee Mugs (4 Pack) | Brown ceramic with solid handle.        |
+----+---------------------------------+-----------------------------------------+

इस तालिका के ProductDescription . पर एक पूर्ण-पाठ अनुक्रमणिका है कॉलम। इसका मतलब है कि हम MATCH AGAINST . का उपयोग कर सकते हैं उस कॉलम के सामने एक पूर्ण-पाठ खोज करने के लिए।

उदाहरण:

SELECT 
    ProductId AS "Id",
    ProductName,
    ProductDescription
FROM Products 
WHERE MATCH(ProductDescription) AGAINST('includes')
ORDER BY ProductId ASC;

परिणाम:

+----+--------------------------+-----------------------------------------+
| Id | ProductName              | ProductDescription                      |
+----+--------------------------+-----------------------------------------+
|  1 | Left handed screwdriver  | Purple. Includes left handed carry box. |
|  2 | Right handed screwdriver | Blue. Includes right handed carry box.  |
|  6 | Chainsaw                 | Orange. Includes spare fingers.         |
+----+--------------------------+-----------------------------------------+

स्कोर प्राप्त करें

हम MATCH AGAINST . शामिल कर सकते हैं SELECT . में खोजे गए कॉलम में कीवर्ड का प्रासंगिकता स्कोर वापस करने के लिए सूची:

SELECT 
    ProductDescription,
    MATCH(ProductDescription) AGAINST ('includes') AS Score
FROM Products 
WHERE MATCH(ProductDescription) AGAINST ('includes')
ORDER BY Score DESC;

परिणाम:

+-----------------------------------------+---------------------+
| ProductDescription                      | Score               |
+-----------------------------------------+---------------------+
| Orange. Includes spare fingers.         |  0.4883610010147095 |
| Blue. Includes right handed carry box.  |  0.4883610010147095 |
| Purple. Includes left handed carry box. | 0.48305025696754456 |
+-----------------------------------------+---------------------+

इस मामले में हमने ORDER BY . का भी उपयोग किया है अवरोही क्रम में स्कोर के आधार पर छाँटने के लिए क्लॉज (यानी सबसे पहले सबसे प्रासंगिक)।

बिना पूर्ण-पाठ अनुक्रमणिका वाले स्तंभ

पिछले उदाहरण के काम करने का कारण यह है कि मैंने पहले ProductDescription पर एक पूर्ण-पाठ अनुक्रमणिका बनाई थी कॉलम। अगर मैंने ऐसा नहीं किया होता, तो मुझे एक त्रुटि मिली होती।

यहां बताया गया है कि जब हम MATCH AGAINST . का उपयोग करने का प्रयास करते हैं तो क्या होता है उस कॉलम के सामने जिसमें पूर्ण-पाठ अनुक्रमणिका नहीं है:

SELECT 
    ProductId,
    ProductName,
    ProductPrice
FROM Products 
WHERE MATCH(ProductName) AGAINST('screwdriver')
ORDER BY ProductId ASC;

परिणाम:

ERROR 1191 (HY000): Can't find FULLTEXT index matching the column list

आइए ProductName . पर एक पूर्ण-पाठ अनुक्रमणिका जोड़ें कॉलम:

ALTER TABLE Products
ADD FULLTEXT(ProductName);

अब क्वेरी को फिर से चलाएँ:

SELECT 
    ProductId,
    ProductName,
    ProductPrice
FROM Products 
WHERE MATCH(ProductName) AGAINST('screwdriver')
ORDER BY ProductId ASC;

परिणाम:

+-----------+--------------------------+--------------+
| ProductId | ProductName              | ProductPrice |
+-----------+--------------------------+--------------+
|         1 | Left handed screwdriver  |        25.99 |
|         2 | Right handed screwdriver |        25.99 |
+-----------+--------------------------+--------------+

इस बार इसने काम किया।

एकाधिक स्तंभों पर पूर्ण-पाठ अनुक्रमणिका

हम एक से अधिक स्तंभों पर पूर्ण-पाठ अनुक्रमणिका जोड़ सकते हैं।

उदाहरण:

ALTER TABLE Products
ADD FULLTEXT(ProductName, ProductDescription);

अब हम MATCH AGAINST run चला सकते हैं उस पूर्ण-पाठ अनुक्रमणिका के विरुद्ध।

SELECT 
    ProductId AS Id, 
    ProductName, 
    ProductDescription
FROM Products 
WHERE MATCH(ProductName, ProductDescription) AGAINST ('weight')
OR MATCH(ProductName, ProductDescription) AGAINST ('ceramic')
ORDER BY Id ASC;

परिणाम:

+----+---------------------------------+---------------------------------------+
| Id | ProductName                     | ProductDescription                    |
+----+---------------------------------+---------------------------------------+
|  3 | Long Weight (blue)              | Approximate 45 minute waiting period. |
|  4 | Long Weight (green)             | Approximate 30 minute waiting period. |
|  8 | Bottomless Coffee Mugs (4 Pack) | Brown ceramic with solid handle.      |
+----+---------------------------------+---------------------------------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मारियाडीबी में एक तिथि से लघु माह का नाम कैसे प्राप्त करें

  2. मारियाडीबी CURRENT_DATE() समझाया गया

  3. मारियाडीबी संस्करण () समझाया गया

  4. SQL इंजेक्शन से अपने MySQL या MariaDB डेटाबेस को कैसे सुरक्षित रखें:भाग एक

  5. मारियाडीबी क्या है? मारियाडीबी कैसे काम करता है?