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

मारियाडीबी में पूर्ण पाठ खोज का परिचय

डेटाबेस का उद्देश्य डेटा को कुशलतापूर्वक संग्रहीत और क्वेरी करना है। समस्या यह है कि हम कई अलग-अलग प्रकार के डेटा स्टोर कर सकते हैं:संख्याएं, तार, JSON, ज्यामितीय डेटा। डेटाबेस विभिन्न प्रकार के डेटा को स्टोर करने के लिए विभिन्न तरीकों का उपयोग करते हैं - टेबल स्ट्रक्चर, इंडेक्स। डेटा को संग्रहीत करने और क्वेरी करने का हमेशा एक ही तरीका इसके सभी प्रकारों के लिए कुशल नहीं होता है, जिससे एक-फिट-सभी समाधान का उपयोग करना काफी कठिन हो जाता है। नतीजतन, डेटाबेस विभिन्न डेटा प्रकारों के लिए विभिन्न दृष्टिकोणों का उपयोग करने का प्रयास करते हैं। उदाहरण के लिए, MySQL या MariaDB में हमारे पास InnoDB जैसा सामान्य, अच्छा प्रदर्शन करने वाला समाधान है, जो अधिकांश मामलों में ठीक काम करता है, लेकिन हमारे पास JSON डेटा के साथ काम करने के लिए अलग-अलग कार्य भी हैं, ज्यामितीय डेटा या फुलटेक्स्ट इंडेक्स को क्वेरी करने के लिए अलग-अलग स्थानिक इंडेक्स हैं। , पाठ डेटा के साथ मदद करना। इस ब्लॉग में, हम देखेंगे कि कैसे मारियाडीबी को पूर्ण टेक्स्ट डेटा के साथ काम करने के लिए इस्तेमाल किया जा सकता है।

InnoDB में नियमित B+ट्री इंडेक्स का उपयोग टेक्स्ट डेटा की खोज को गति देने के लिए भी किया जा सकता है। मुख्य मुद्दा यह है कि, उनकी संरचना और प्रकृति के कारण, वे केवल सबसे बाईं ओर उपसर्गों की खोज में मदद कर सकते हैं। पाठ के बड़े संस्करणों को अनुक्रमित करना भी महंगा है (जो, सबसे बाईं ओर उपसर्ग की सीमाओं को देखते हुए, वास्तव में समझ में नहीं आता है)। क्यों? आइए एक सरल उदाहरण देखें। हमारे पास निम्नलिखित वाक्य है:

"तेज़ भूरी लोमड़ी आलसी कुत्ते के ऊपर से कूद जाती है"

InnoDB में नियमित अनुक्रमणिका का उपयोग करके हम पूरे वाक्य को अनुक्रमित कर सकते हैं:

"तेज़ भूरी लोमड़ी आलसी कुत्ते के ऊपर से कूद जाती है"

मुद्दा यह है कि, इस डेटा की तलाश करते समय, हमें पूर्ण बाईं ओर उपसर्ग देखना होगा। तो एक प्रश्न जैसे:

SELECT text FROM mytable WHERE sentence LIKE “The quick brown fox jumps”;

इस इंडेक्स से लाभ होगा लेकिन एक प्रश्न जैसे:

SELECT text FROM mytable WHERE sentence LIKE “quick brown fox jumps”;

नहीं होगा। 'क्विक' से शुरू होने वाले इंडेक्स में कोई एंट्री नहीं होती है। सूचकांक में एक प्रविष्टि है जिसमें 'त्वरित' होता है लेकिन 'द' से शुरू होता है, इस प्रकार इसका उपयोग नहीं किया जा सकता है। नतीजतन, बी + ट्री इंडेक्स का उपयोग करके टेक्स्ट डेटा को कुशलतापूर्वक क्वेरी करना लगभग असंभव है। सौभाग्य से, MyISAM और InnoDB दोनों ने FULLTEXT इंडेक्स को लागू किया है, जिसका उपयोग वास्तव में MariaDB पर टेक्स्ट डेटा के साथ काम करने के लिए किया जा सकता है। सिंटैक्स नियमित चयनों की तुलना में थोड़ा अलग है, आइए देखें कि हम उनके साथ क्या कर सकते हैं। डेटा के लिए हमने विकिपीडिया डेटाबेस के डंप से यादृच्छिक अनुक्रमणिका फ़ाइल का उपयोग किया। डेटा संरचना इस प्रकार है:

617:11539268:Arthur Hamerschlag
617:11539269:Rooster Cogburn (character)
617:11539275:Membership function
617:11539282:Secondarily Generalized Tonic-Clonic Seizures
617:11539283:Corporate Challenge
617:11539285:Perimeter Mall
617:11539286:1994 St. Louis Cardinals season

परिणामस्वरूप, हमने दो BIG INT कॉलम और एक VARCHAR के साथ तालिका बनाई।

MariaDB [(none)]> CREATE TABLE ft_data.ft_table (c1 BIGINT, c2 BIGINT, c3 VARCHAR, PRIMARY KEY (c1, c2);

बाद में हमने डेटा लोड किया:

MariaDB [ft_data]> LOAD DATA INFILE '/vagrant/enwiki-20190620-pages-articles-multistream-index17.txt-p11539268p13039268' IGNORE INTO  TABLE ft_table COLUMNS TERMINATED BY ':';
MariaDB [ft_data]> ALTER TABLE ft_table ADD FULLTEXT INDEX idx_ft (c3);
Query OK, 0 rows affected (5.497 sec)
Records: 0  Duplicates: 0  Warnings: 0

हमने FULLTEXT इंडेक्स भी बनाया है। जैसा कि आप देख सकते हैं, इसके लिए सिंटैक्स नियमित इंडेक्स के समान है, हमें बस इंडेक्स प्रकार के बारे में जानकारी पास करनी थी क्योंकि यह बी + ट्री के लिए डिफ़ॉल्ट है। तब हम कुछ प्रश्नों को चलाने के लिए तैयार थे।

MariaDB [ft_data]> SELECT * FROM ft_data.ft_table WHERE MATCH(c3) AGAINST ('Starship');
+-----------+----------+------------------------------------+
| c1        | c2       | c3                                 |
+-----------+----------+------------------------------------+
| 119794610 | 12007923 | Starship Troopers 3                |
| 250627749 | 12479782 | Miranda class starship (Star Trek) |
| 250971304 | 12481409 | Starship Hospital                  |
| 253430758 | 12489743 | Starship Children's Hospital       |
+-----------+----------+------------------------------------+
4 rows in set (0.009 sec)

जैसा कि आप देख सकते हैं, SELECT का सिंटैक्स हमारे द्वारा उपयोग किए जाने वाले से थोड़ा अलग है। पूर्ण पाठ खोज के लिए आपको MATCH() … AGAINST () सिंटैक्स का उपयोग करना चाहिए, जहां MATCH() में आप उस कॉलम या कॉलम को पास करते हैं जिसे आप खोजना चाहते हैं और AGAINST() में आप कीवर्ड की कोमा-सीमांकित सूची पास करते हैं। आप आउटपुट से देख सकते हैं कि डिफ़ॉल्ट रूप से खोज केस असंवेदनशील है और यह पूरी स्ट्रिंग को खोजता है, न कि केवल शुरुआत के रूप में यह बी + ट्री इंडेक्स के साथ है। आइए तुलना करें कि अगर हम 'c3' कॉलम पर सामान्य इंडेक्स जोड़ेंगे तो यह कैसा दिखेगा - FULLTEXT और B+ट्री इंडेक्स बिना किसी समस्या के एक ही कॉलम पर सह-अस्तित्व में आ सकते हैं। किसका उपयोग किया जाएगा यह SELECT सिंटैक्स के आधार पर तय किया जाता है।

MariaDB [ft_data]> ALTER TABLE ft_data.ft_table ADD INDEX idx_c3 (c3);
Query OK, 0 rows affected (1.884 sec)
Records: 0  Duplicates: 0  Warnings: 0

अनुक्रमणिका बनने के बाद, आइए खोज आउटपुट पर एक नज़र डालें:

MariaDB [ft_data]> SELECT * FROM ft_data.ft_table WHERE c3 LIKE 'Starship%';
+-----------+----------+------------------------------+
| c1        | c2       | c3                           |
+-----------+----------+------------------------------+
| 253430758 | 12489743 | Starship Children's Hospital |
| 250971304 | 12481409 | Starship Hospital            |
| 119794610 | 12007923 | Starship Troopers 3          |
+-----------+----------+------------------------------+
3 rows in set (0.001 sec)

जैसा कि आप देख सकते हैं, हमारी क्वेरी ने केवल तीन पंक्तियाँ लौटाईं। यह अपेक्षित है क्योंकि हम उन पंक्तियों की तलाश कर रहे हैं जो केवल एक स्ट्रिंग 'स्टारशिप' से शुरू होती हैं।

MariaDB [ft_data]> EXPLAIN SELECT * FROM ft_data.ft_table WHERE c3 LIKE 'Starship%'\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: ft_table
         type: range
possible_keys: idx_c3,idx_ft
          key: idx_c3
      key_len: 103
          ref: NULL
         rows: 3
        Extra: Using where; Using index
1 row in set (0.000 sec)

जब हम EXPLAIN आउटपुट की जांच करते हैं तो हम देख सकते हैं कि डेटा को देखने के लिए इंडेक्स का उपयोग किया गया है। लेकिन क्या होगा अगर हम उन सभी पंक्तियों को देखना चाहते हैं जिनमें स्ट्रिंग 'स्टारशिप' है, चाहे वह शुरुआत में हो या नहीं। हमें निम्नलिखित क्वेरी लिखनी है:

MariaDB [ft_data]> SELECT * FROM ft_data.ft_table WHERE c3 LIKE '%Starship%';
+-----------+----------+------------------------------------+
| c1        | c2       | c3                                 |
+-----------+----------+------------------------------------+
| 250627749 | 12479782 | Miranda class starship (Star Trek) |
| 253430758 | 12489743 | Starship Children's Hospital       |
| 250971304 | 12481409 | Starship Hospital                  |
| 119794610 | 12007923 | Starship Troopers 3                |
+-----------+----------+------------------------------------+
4 rows in set (0.084 sec)

आउटपुट हमें पूर्ण-पाठ खोज से जो मिला है उससे मेल खाता है।

MariaDB [ft_data]> EXPLAIN SELECT * FROM ft_data.ft_table WHERE c3 LIKE '%Starship%'\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: ft_table
         type: index
possible_keys: NULL
          key: idx_c3
      key_len: 103
          ref: NULL
         rows: 473367
        Extra: Using where; Using index
1 row in set (0.000 sec)

हालांकि EXPLAIN अलग है - जैसा कि आप देख सकते हैं कि यह अभी भी इंडेक्स का उपयोग करता है लेकिन इस बार यह एक पूर्ण इंडेक्स स्कैन करता है। यह संभव है क्योंकि हमने पूर्ण c3 कॉलम को अनुक्रमित किया है ताकि सभी डेटा इंडेक्स में उपलब्ध हो। इंडेक्स स्कैन के परिणामस्वरूप तालिका से यादृच्छिक रूप से पढ़ा जाएगा लेकिन ऐसी छोटी तालिका के लिए मारियाडीबी ने पूरी तालिका को पढ़ने की तुलना में इसे अधिक कुशल बनाने का निर्णय लिया। कृपया निष्पादन समय पर ध्यान दें:हमारे नियमित चयन के लिए 0.084s। फुलटेक्स्ट क्वेरी से इसकी तुलना करना, यह खराब है:

MariaDB [ft_data]> SELECT * FROM ft_data.ft_table WHERE MATCH(c3) AGAINST ('Starship');
+-----------+----------+------------------------------------+
| c1        | c2       | c3                                 |
+-----------+----------+------------------------------------+
| 119794610 | 12007923 | Starship Troopers 3                |
| 250627749 | 12479782 | Miranda class starship (Star Trek) |
| 250971304 | 12481409 | Starship Hospital                  |
| 253430758 | 12489743 | Starship Children's Hospital       |
+-----------+----------+------------------------------------+
4 rows in set (0.001 sec)

जैसा कि आप देख सकते हैं, FULLTEXT इंडेक्स का उपयोग करने वाली क्वेरी को निष्पादित करने में 0.001s लगे। हम यहां परिमाण अंतर के क्रम के बारे में बात कर रहे हैं।

MariaDB [ft_data]> EXPLAIN SELECT * FROM ft_data.ft_table WHERE MATCH(c3) AGAINST ('Starship')\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: ft_table
         type: fulltext
possible_keys: idx_ft
          key: idx_ft
      key_len: 0
          ref:
         rows: 1
        Extra: Using where
1 row in set (0.000 sec)

यहां बताया गया है कि FULLTEXT इंडेक्स का उपयोग करके क्वेरी के लिए EXPLAIN आउटपुट कैसा दिखता है - यह तथ्य प्रकार द्वारा इंगित किया गया है:fulltext।

फुलटेक्स्ट प्रश्नों में कुछ अन्य विशेषताएं भी होती हैं। उदाहरण के लिए, उन पंक्तियों को वापस करना संभव है जो खोज शब्द के लिए प्रासंगिक हो सकती हैं। मारियाडीबी उस पंक्ति के पास स्थित शब्दों की तलाश करता है जिसे आप खोजते हैं और फिर उनके लिए एक खोज भी चलाते हैं।

MariaDB [(none)]> SELECT * FROM ft_data.ft_table WHERE MATCH(c3) AGAINST ('Starship');
+-----------+----------+------------------------------------+
| c1        | c2       | c3                                 |
+-----------+----------+------------------------------------+
| 119794610 | 12007923 | Starship Troopers 3                |
| 250627749 | 12479782 | Miranda class starship (Star Trek) |
| 250971304 | 12481409 | Starship Hospital                  |
| 253430758 | 12489743 | Starship Children's Hospital       |
+-----------+----------+------------------------------------+
4 rows in set (0.001 sec)

हमारे मामले में, 'स्टारशिप' शब्द 'ट्रूपर्स', 'क्लास', 'स्टार ट्रेक', 'हॉस्पिटल' आदि शब्दों से संबंधित हो सकता है। इस सुविधा का उपयोग करने के लिए हमें "क्वेरी एक्सपेंशन के साथ" संशोधक के साथ क्वेरी चलानी चाहिए:

MariaDB [(none)]> SELECT * FROM ft_data.ft_table WHERE MATCH(c3) AGAINST ('Starship' WITH QUERY EXPANSION) LIMIT 10;
+-----------+----------+-------------------------------------+
| c1        | c2       | c3                                  |
+-----------+----------+-------------------------------------+
| 250627749 | 12479782 | Miranda class starship (Star Trek)  |
| 119794610 | 12007923 | Starship Troopers 3                 |
| 253430758 | 12489743 | Starship Children's Hospital        |
| 250971304 | 12481409 | Starship Hospital                   |
| 277700214 | 12573467 | Star ship troopers                  |
|  86748633 | 11886457 | Troopers Drum and Bugle Corps       |
| 255120817 | 12495666 | Casper Troopers                     |
| 396408580 | 13014545 | Battle Android Troopers             |
|  12453401 | 11585248 | Star trek tos                       |
|  21380240 | 11622781 | Who Mourns for Adonais? (Star Trek) |
+-----------+----------+-------------------------------------+
10 rows in set (0.002 sec)

आउटपुट में बड़ी संख्या में पंक्तियाँ थीं लेकिन यह नमूना यह देखने के लिए पर्याप्त है कि यह कैसे काम करता है। क्वेरी ने पंक्तियाँ लौटा दीं जैसे:

"ट्रूपर्स ड्रम एंड बिगुल कॉर्प्स"

"बैटल एंड्रॉइड ट्रूपर्स"

वे 'ट्रूपर्स' शब्द की खोज पर आधारित हैं। यह पंक्तियों के साथ पंक्तियों को भी लौटाता है जैसे:

"स्टार ट्रेक टू"

"कौन एडोनाइस के लिए शोक करता है? (स्टार ट्रेक)”

जो, जाहिर तौर पर, 'स्टार्ट ट्रेक' शब्द की खोज पर आधारित हैं।

यदि आपको उस शब्द पर अधिक नियंत्रण की आवश्यकता है जिसे आप खोजना चाहते हैं, तो आप "इन बूलियन मोड" का उपयोग कर सकते हैं। यह अतिरिक्त ऑपरेटरों का उपयोग करने की अनुमति देता है। पूरी सूची दस्तावेज़ीकरण में है, हम केवल कुछ उदाहरण दिखाएंगे।

मान लें कि हम न केवल 'स्टार' शब्द की खोज करना चाहते हैं, बल्कि 'स्टार' से शुरू होने वाले अन्य शब्दों को भी खोजना चाहते हैं:

MariaDB [(none)]> SELECT * FROM ft_data.ft_table WHERE MATCH(c3) AGAINST ('Star*' IN BOOLEAN MODE) LIMIT 10;
+----------+----------+---------------------------------------------------+
| c1       | c2       | c3                                                |
+----------+----------+---------------------------------------------------+
| 20014704 | 11614055 | Ringo Starr and His third All-Starr Band-Volume 1 |
|   154810 | 11539775 | Rough blazing star                                |
|   154810 | 11539787 | Great blazing star                                |
|   234851 | 11540119 | Mary Star of the Sea High School                  |
|   325782 | 11540427 | HMS Starfish (19S)                                |
|   598616 | 11541589 | Dwarf (star)                                      |
|  1951655 | 11545092 | Yellow starthistle                                |
|  2963775 | 11548654 | Hydrogenated starch hydrolysates                  |
|  3248823 | 11549445 | Starbooty                                         |
|  3993625 | 11553042 | Harvest of Stars                                  |
+----------+----------+---------------------------------------------------+
10 rows in set (0.001 sec)

जैसा कि आप देख सकते हैं, आउटपुट में हमारे पास ऐसी पंक्तियाँ होती हैं जिनमें 'स्टार्स', 'स्टारफ़िश' या 'स्टार्च' जैसे तार होते हैं।

बूलियन मोड के लिए एक और उपयोग केस। मान लें कि हम उन पंक्तियों की खोज करना चाहते हैं जो पेंसिल्वेनिया में प्रतिनिधि सभा के लिए प्रासंगिक हैं। यदि हम नियमित क्वेरी चलाएंगे, तो हमें इनमें से किसी भी स्ट्रिंग से संबंधित परिणाम प्राप्त होंगे:

MariaDB [ft_data]> SELECT COUNT(*) FROM ft_data.ft_table WHERE MATCH(c3) AGAINST ('House, Representatives, Pennsylvania');
+----------+
| COUNT(*) |
+----------+
|     1529 |
+----------+
1 row in set (0.005 sec)
MariaDB [ft_data]> SELECT * FROM ft_data.ft_table WHERE MATCH(c3) AGAINST ('House, Representatives, Pennsylvania') LIMIT 20;
+-----------+----------+--------------------------------------------------------------------------+
| c1        | c2       | c3                                                                       |
+-----------+----------+--------------------------------------------------------------------------+
| 198783294 | 12289308 | Pennsylvania House of Representatives, District 175                      |
| 236302417 | 12427322 | Pennsylvania House of Representatives, District 156                      |
| 236373831 | 12427423 | Pennsylvania House of Representatives, District 158                      |
| 282031847 | 12588702 | Pennsylvania House of Representatives, District 47                       |
| 282031847 | 12588772 | Pennsylvania House of Representatives, District 196                      |
| 282031847 | 12588864 | Pennsylvania House of Representatives, District 92                       |
| 282031847 | 12588900 | Pennsylvania House of Representatives, District 93                       |
| 282031847 | 12588904 | Pennsylvania House of Representatives, District 94                       |
| 282031847 | 12588909 | Pennsylvania House of Representatives, District 193                      |
| 303827502 | 12671054 | Pennsylvania House of Representatives, District 55                       |
| 303827502 | 12671089 | Pennsylvania House of Representatives, District 64                       |
| 337545922 | 12797838 | Pennsylvania House of Representatives, District 95                       |
| 219202000 | 12366957 | United States House of Representatives House Resolution 121              |
| 277521229 | 12572732 | United States House of Representatives proposed House Resolution 121     |
|  20923615 | 11618759 | Special elections to the United States House of Representatives          |
|  20923615 | 11618772 | List of Special elections to the United States House of Representatives  |
|  37794558 | 11693157 | Nebraska House of Representatives                                        |
|  39430531 | 11699551 | Belgian House of Representatives                                         |
|  53779065 | 11756435 | List of United States House of Representatives elections in North Dakota |
|  54048114 | 11757334 | 2008 United States House of Representatives election in North Dakota     |
+-----------+----------+--------------------------------------------------------------------------+
20 rows in set (0.003 sec)

जैसा कि आप देख सकते हैं, हमें कुछ उपयोगी डेटा मिला लेकिन हमें वह डेटा भी मिला जो हमारी खोज के लिए पूरी तरह से प्रासंगिक नहीं है। सौभाग्य से, हम ऐसी क्वेरी को परिष्कृत कर सकते हैं:

MariaDB [ft_data]> SELECT * FROM ft_data.ft_table WHERE MATCH(c3) AGAINST ('+House, +Representatives, +Pennsylvania' IN BOOLEAN MODE);
+-----------+----------+-----------------------------------------------------+
| c1        | c2       | c3                                                  |
+-----------+----------+-----------------------------------------------------+
| 198783294 | 12289308 | Pennsylvania House of Representatives, District 175 |
| 236302417 | 12427322 | Pennsylvania House of Representatives, District 156 |
| 236373831 | 12427423 | Pennsylvania House of Representatives, District 158 |
| 282031847 | 12588702 | Pennsylvania House of Representatives, District 47  |
| 282031847 | 12588772 | Pennsylvania House of Representatives, District 196 |
| 282031847 | 12588864 | Pennsylvania House of Representatives, District 92  |
| 282031847 | 12588900 | Pennsylvania House of Representatives, District 93  |
| 282031847 | 12588904 | Pennsylvania House of Representatives, District 94  |
| 282031847 | 12588909 | Pennsylvania House of Representatives, District 193 |
| 303827502 | 12671054 | Pennsylvania House of Representatives, District 55  |
| 303827502 | 12671089 | Pennsylvania House of Representatives, District 64  |
| 337545922 | 12797838 | Pennsylvania House of Representatives, District 95  |
+-----------+----------+-----------------------------------------------------+
12 rows in set (0.001 sec)

जैसा कि आप देख सकते हैं, '+' ऑपरेटर जोड़कर हमने यह स्पष्ट कर दिया कि हम केवल उस आउटपुट में रुचि रखते हैं जहां दिया गया शब्द मौजूद है। परिणामस्वरूप हमें जो डेटा प्रतिक्रिया में मिला वह ठीक वही है जिसकी हम तलाश कर रहे थे।

हम शब्दों को खोज से बाहर भी कर सकते हैं। मान लीजिए कि हम उड़ने वाली चीजों की तलाश कर रहे हैं लेकिन हमारे खोज परिणाम अलग-अलग उड़ने वाले जानवरों से दूषित हैं जिनमें हमें कोई दिलचस्पी नहीं है। हम लोमड़ियों, गिलहरियों और मेंढकों से आसानी से छुटकारा पा सकते हैं:

MariaDB [ft_data]> SELECT * FROM ft_data.ft_table WHERE MATCH(c3) AGAINST ('+flying -fox* -squirrel* -frog*' IN BOOLEAN MODE) LIMIT 10;
+----------+----------+-----------------------------------------------------+
| c1       | c2       | c3                                                  |
+----------+----------+-----------------------------------------------------+
| 13340153 | 11587884 | List of surviving Boeing B-17 Flying Fortresses     |
| 16774061 | 11600031 | Flying Dutchman Funicular                           |
| 23137426 | 11631421 | 80th Flying Training Wing                           |
| 26477490 | 11646247 | Kites and Kite Flying                               |
| 28568750 | 11655638 | Fear of Flying                                      |
| 28752660 | 11656721 | Flying Machine (song)                               |
| 31375047 | 11666654 | Flying Dutchman (train)                             |
| 32726276 | 11672784 | Flying Wazuma                                       |
| 47115925 | 11728593 | The Flying Locked Room! Kudou Shinichi's First Case |
| 64330511 | 11796326 | The Church of the Flying Spaghetti Monster          |
+----------+----------+-----------------------------------------------------+
10 rows in set (0.001 sec)

अंतिम विशेषता जो हम दिखाना चाहते हैं, वह है सटीक उद्धरण की खोज करने की क्षमता:

MariaDB [ft_data]> SELECT * FROM ft_data.ft_table WHERE MATCH(c3) AGAINST ('"People\'s Republic of China"' IN BOOLEAN MODE) LIMIT 10;
+-----------+----------+------------------------------------------------------------------------------------------------------+
| c1        | c2       | c3                                                                                                   |
+-----------+----------+------------------------------------------------------------------------------------------------------+
|  12093896 | 11583713 | Religion in the People's Republic of China                                                           |
|  25280224 | 11640533 | Political rankings in the People's Republic of China                                                 |
|  43930887 | 11716084 | Cuisine of the People's Republic of China                                                            |
|  62272294 | 11789886 | Office of the Commissioner of the Ministry of Foreign Affairs of the People's Republic of China in t |
|  70970904 | 11824702 | Scouting in the People's Republic of China                                                           |
| 154301063 | 12145003 | Tibetan culture under the People's Republic of China                                                 |
| 167640800 | 12189851 | Product safety in the People's Republic of China                                                     |
| 172735782 | 12208560 | Agriculture in the people's republic of china                                                        |
| 176185516 | 12221117 | Special Economic Zone of the People's Republic of China                                              |
| 197034766 | 12282071 | People's Republic of China and the United Nations                                                    |
+-----------+----------+------------------------------------------------------------------------------------------------------+
10 rows in set (0.001 sec)

जैसा कि आप देख सकते हैं, मारियाडीबी में फुलटेक्स्ट सर्च काफी अच्छी तरह से काम करता है, यह बी + ट्री इंडेक्स का उपयोग करके खोज से भी तेज और अधिक लचीला है। कृपया ध्यान रखें कि यह किसी भी तरह से बड़ी मात्रा में डेटा को संभालने का एक तरीका नहीं है - डेटा वृद्धि के साथ, इस समाधान की व्यवहार्यता कम हो जाएगी। फिर भी, छोटे डेटा सेट के लिए यह समाधान पूरी तरह से मान्य है। यह निश्चित रूप से आपको स्फिंक्स या ल्यूसीन जैसे समर्पित पूर्ण पाठ खोज समाधानों को लागू करने के लिए और अधिक समय दे सकता है। बेशक, हमारे द्वारा वर्णित सभी सुविधाएं क्लस्टर कंट्रोल से तैनात मारियाडीबी क्लस्टर में उपलब्ध हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे QUOTE () मारियाडीबी में काम करता है

  2. डेटाबेस बैकअप एन्क्रिप्शन - सर्वोत्तम अभ्यास

  3. मारियाडीबी में एक सीमा के भीतर एक यादृच्छिक पूर्णांक कैसे उत्पन्न करें

  4. क्लस्टर नियंत्रण की घोषणा 1.7.4:क्लस्टर-टू-क्लस्टर प्रतिकृति - अंतिम आपदा पुनर्प्राप्ति

  5. ड्रॉप टेबल अगर मारियाडीबी में मौजूद है