MySQL पूर्ण पाठ खोज

आज मैं एक धीमी गति से ऑप्टिमाइज़ करने के लिए खेला SQL अनुरोध प्रकार

SELECT * FROM 'table' WHERE `field` LIKE '%word%'

जहां परेशानी एक पल यहाँ है – पिछले भाग शब्द % ‘ %’ और अधिक से अधिक concreteness वर्णों में भी % पहले शब्द, उस के लिए हम क्या. वाइल्डकार्ड प्रतीक % ,कोई भी मान से पहले, हमारे आवेदन सीधे सीधे एक धीमी में तब्दील, क्योंकि इस रास्ते में अनुप्रयोग की अनुक्रमणिका का उपयोग करने के लिए हमें रोकता है. हमेशा की तरह वहाँ समाधान कर रहे हैं, लेकिन हमेशा स्पष्ट 😆 आम तौर पर नहीं कर रहे हैं माई एसक्यूएल आप के साथ इस समस्या का समाधान है पूर्णपाठ खोज का अनुक्रमण. कैसे वहाँ फ़ील्ड के परिवर्तन है एक बहुत दस्तावेज़ में लिखा है, लेकिन जल्दी में मैं का वर्णन करेंगे कैसे मैं शीर्ष अनुरोध बदलें, क्योंकि हम एक छोटा सा नाटक के अंत में मिल जाएगा. एक प्यारा पूर्णपाठ फ़ील्ड के लिए लागू के रूप में श्रृंगार, क्वेरी के रूप में परिवर्तित किया जा करने के लिए की जरूरत है:

SELECT * FROM `table` WHERE MATCH (field) AGAINST ('word')

तो संरचना स्पष्ट है और अनावश्यक चर्चा के लिए कोई जरूरत नहीं है. इसके बाद के संस्करण क्वेरी बल में प्रवेश करेंगे, यदि शब्द, जिसके लिए आपको कम से कम एक अनुरोध कर रहे हैं 4 प्रतीक, यह डिफ़ॉल्ट मान है, यदि आप इसे संशोधित करने के लिए चाहते हैं, तो आप मान निर्दिष्ट करना होगा, която желаете в my.cnf в частта [mysqld] घोषणा के साथ ft_min_word_len= 3 या 2, 1 не е добър избор очевидно 😉 . के बाद आप मान परिवर्तित करें और mysql सर्वर-टेबल के एक सुधार करने के लिए की आवश्यकता को पुनरारंभ करें, नई अनुक्रमणिका के लिए क्रम में सेना में प्रवेश करती है.. यहाँ सब साफ़ करें: आप बदल सकता हूँ, मैं रीसेट करें, rebildvam सूचकांक और मेरे अनुरोध और रिटर्न 0 😀 साथ लाइन की जाँच

SHOW VARIABLES

मैं देखना है कि मानों, मैंने पूछा है बल में दर्ज किया गया है, rebildvam अनुक्रमणिका फिर से – एक ही परिणाम. 🙄 से नफरत, बहुत ही असहज. ОТ ТУК НАТАТЪК ЗАПОЧНА ЕДНО ГОЛЯМО РУГАЕНЕ И РОВЕНЕ ЗА КЛЮЧА ЗА БАРАКАТА 😀 КОЙТО СЕ ОКАЗА ДОСТА, ДОСТА ИНТЕРЕСЕН. КАТО ЦЯЛО, КАТО ЗАПОЧНАХ ДА ЧЕТА ДОКУМЕНТАЦИЯТА ЗА НЕ ЗНАМ КОЙ ПЪТ И СТИГНАХ ДО ЕДИН ИНТЕРЕСЕН ПАСАЖ

Such a technique works best with large collections (वास्तव में, यह सावधानी से इस तरह परिचित था). के लिए बहुत छोटी तालिकाएँ, शब्द वितरण उनके अर्थ मान पर्याप्त रूप से प्रतिबिंबित नहीं, और इस मॉडल कभी-कभी विचित्र परिणाम का उत्पादन कर सकते हैं. उदाहरण के लिए, हालांकि शब्द "MySQL" लेख पहले से दिखाई गई तालिका की प्रत्येक पंक्ति में मौजूद है, एक खोज शब्द के लिए कोई परिणाम देता है

ГРЕДА 😳 Дам табличката ми беше малка – यह अभी भी एक परीक्षण किया गया. बड़े अनुप्रयोग Naših के साथ एक मेज पर में 2 000 000 आदेश और वहाँ बातें सो रहे हैं. अच्छी तरह से यह पहले से ही स्पष्ट है समस्या. यह समाधान स्पष्ट बनाने के लिए, मैं संक्षेप में उल्लेख करना होगा, कि पूर्ण पाठ खोज समर्थन 3 उन्नत मोड बूलियन , अभिव्यक्तियाँ और प्राकृतिक भाषा अंतिम काम करता है के रूप में डिफ़ॉल्ट रूप से. विभिन्न साधनों के बारे में आप दस्तावेज़ देखें कर सकते हैं, मैं के साथ समझाता हूँ 2-3 क्योंकि यह महत्वपूर्ण है करने के लिए बूलियन शब्द. यह प्रकार के तार्किक ऑपरेटर्स का समर्थन करता है और, या , नहीं और इतने पर और खोज वाक्यांश के साथ कुछ जादू कर सकते हैं, करने के लिए एक, दूसरा, आदि है।. का समर्थन करता है और प्रतीक *, कि वाइल्डकार्ड वर्णों के बराबर है % यह उपयोगी है 😉, जब खोज शब्द की लंबाई में है ft_min_word_len या छोटे ट्रे ;). कम से कम मुझे मेज पर के साथ के बारे में 100 रेखा एक सही काम कर रहा है. देखने के लिए केवल एक ही चीज़ छोड़ दिया और खत्म आवेदन:

SELECT * FROM `table` WHERE MATCH (field)
AGAINST ('*word*' IN BOOLEAN MODE)

अब यहाँ हमें वाइल्डकार्ड वर्णों के साथ काम करता है अनुक्रमण एक समय आता है – मैं नहीं जानता जवाब है. Принципно мисля, че да, защото не е казано друго в документацията, но в документацията очевидно не се казват или показват много неща 😀

Zemanta द्वारा बढ़ाया

2 टिप्पणियाँ

उत्तर छोड़ दें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. अपेक्षित स्थानों को रेखांकित कर दिया गया है *

विरोधी स्पैम *