मारियाडीबी में, 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. | +----+---------------------------------+---------------------------------------+