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

एकाधिक स्तंभों पर MySQL पूर्ण पाठ खोज:परिणाम भ्रम

ऐसा प्रतीत होता है कि InnoDB टेबल एक ही MATCH() में कई फुलटेक्स्ट इंडेक्स पर खोजों की अनुमति नहीं देते हैं हालत।

यहां आपके सभी फ़ील्ड एक ही टेबल से संबंधित नहीं हैं, इसलिए वे अलग-अलग इंडेक्स से आच्छादित हैं। ध्यान दें कि यदि आपके पास इस तरह की तालिका है तो वही सीमा लागू होती है:

CREATE TABLE t (
  f1 VARCHAR(20),
  f2 VARCHAR(20),
  FULLTEXT(f1), FULLTEXT(f2)
) ENGINE=InnoDB;

SELECT * FROM t
WHERE MATCH(f1, f2) AGAINST ('something in f2'); -- likely to return no row

यह ऐसा दिखता है एक पूर्ण-पाठ खोज केवल पहले पूर्ण-पाठ अनुक्रमणिका पर खोज कर सकती है जिसका सामना करना पड़ता है लेकिन यह केवल कुछ ऐसा है जिसे मैं घटाता हूं इस अनुभव से , कृपया इसे हल्के में न लें।

लब्बोलुआब यह है कि आपको अपनी खोज को विभाजित करना चाहिए ताकि प्रति MATCH() में एक एकल पूर्ण पाठ अनुक्रमणिका का उपयोग किया जा सके। खंड:

SELECT * FROM auction, user, gallery, ...
WHERE
    MATCH(auction.field1, auction.field2) AGAINST ('search query' IN BOOLEAN MODE) OR
    MATCH(auction.field3) AGAINST ('search query' IN BOOLEAN MODE) OR
    MATCH(user.field1, user.field2, user.field3) AGAINST...

यह एक संभावित क्वेरी का एक उदाहरण है यदि आपके पास auction . पर दो अलग-अलग इंडेक्स थे और एक user . पर . आपको इसे अपनी वास्तविक संरचना के अनुकूल बनाने की आवश्यकता है (यदि आपको अधिक मार्गदर्शन की आवश्यकता है तो कृपया अपनी तालिका का विवरण पोस्ट करें)।

ध्यान दें कि यह केवल InnoDB तालिकाओं पर लागू होता है। दिलचस्प बात यह है कि MyISAM टेबल समान सीमा नहीं दिखाते हैं

अपडेट:पता चला कि यह InnoDB इंजन में एक बग था। , 5.6.13/5.7.2 में नियत। उपरोक्त उदाहरण अब "स्तंभ सूची से मेल खाते FULLTEXT अनुक्रमणिका नहीं ढूंढ सकता" के साथ सही ढंग से विफल हो जाता है। दरअसल, (f1, f2) . पर कोई इंडेक्स नहीं है , लेकिन एक (f1) . पर और दूसरा (f2) . पर . जैसा कि चेंजलॉग सलाह देता है :

यह उल्लेखनीय है कि इस तरह की क्वेरीज़ MyISAM के साथ सेट किए गए सही परिणाम लौटाती हैं, लेकिन वे अपेक्षा से अधिक धीमी गति से चलती हैं, जैसे वे चुपचाप मौजूदा पूर्ण-पाठ अनुक्रमणिका को अनदेखा कर देते हैं




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL 5.7 में नेटिव JSON सपोर्ट:MYSQL में JSON डेटा टाइप के फायदे और नुकसान क्या हैं?

  2. नई ऑटो-इन्क्रीमेंट आईडी के साथ अपडेट कॉलम डालने से पहले MySQL ट्रिगर

  3. आपका पासवर्ड वर्तमान नीति आवश्यकताओं को पूरा नहीं करता है

  4. MySQL GROUP BY वरीयता के साथ

  5. एसक्यूएल:प्रति समूह अधिकतम रिकॉर्ड खोजें