2010-09-05 9 views
19

शीर्षक कहता है, फुलटेक्स्ट इंडेक्स क्या है और मुझे इसका उपयोग कब करना चाहिए?फुलटेक्स्ट इंडेक्स क्या है और मुझे इसका उपयोग कब करना चाहिए?

+1

कृपया अपने प्रश्न का पुन: प्रयास करें। तुम क्या जानना चाहते हो? "पूर्ण टेक्स्ट इंडेक्स का उपयोग कब करें" के द्वारा आपका क्या मतलब है - स्पष्ट उत्तर के अलावा "जब आप पूर्ण टेक्स्ट खोज करने की योजना बनाते हैं"? –

उत्तर

13

डेटाबेस में इंडेक्स आमतौर पर आपके क्लॉज में परिभाषित कुछ की तलाश करते समय प्रदर्शन को बढ़ाने के लिए उपयोग किए जाते हैं। हालांकि जब कुछ पाठ फ़िल्टर करने की बात आती है, उदा। WHERE TextColumn LIKE '%searchstring%' जैसे कुछ का उपयोग करके खोज धीमी होती है, क्योंकि जिस तरह से नियमित डेटाबेस इंडेक्स काम करता है, कॉलम की 'पूरी सामग्री' के खिलाफ मैचों के लिए अनुकूलित किया जाता है और न केवल इसका एक हिस्सा। विशेष रूप से LIKE खोज जिसमें वाइल्डकार्ड शामिल हैं, किसी भी प्रकार की अनुक्रमणिका का उपयोग नहीं कर सकते हैं।

जैसा कि नीचे दिए गए टिप्पणी में बताया गया है MySQL को पूर्ण टेक्स्ट सूचकांक में खोजने के लिए MATCH() ... AGAINST वाक्यविन्यास की आवश्यकता है; बीटीडब्लू यह डेटाबेस विक्रेता के आधार पर भिन्न होता है। एमएस एसक्यूएल में आप CONTAINS का उपयोग कर सकते हैं, इसलिए जब आप अन्य डेटाबेस का समर्थन करने की योजना बनाते हैं तो इसे ध्यान में रखें।

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

+6

FULLTEXT इंडेक्स LIKE क्लॉज के लिए कुछ भी नहीं करेंगे - वे केवल 'MATCH() ... के खिलाफ खंडों के लिए उपयोग किए जाएंगे। जैसे कि '%' वाइल्डकार्ड से शुरू होने वाले क्लॉज को प्रभावी रूप से * किसी * प्रकार के इंडेक्स द्वारा नहीं बढ़ाया जा सकता है और हमेशा धीमा होगा। इस कारण से इस तरह के LIKE खंड को टालना चाहिए जब तक कि पहले से ही रिकॉर्ड्स की एक छोटी संख्या को फ़िल्टर न किया जाए। – thomasrutter

+2

तो दूसरे शब्दों में, यदि आप पूरे स्ट्रिंग के खिलाफ सटीक मिलान की तलाश में हैं, तो FULLTEXT अनुक्रमणिका का उपयोग करने के लिए गलत बात है? – aroth

+1

@aroth पूरे स्तंभ सामग्री पर खोज करते समय एक पूर्ण टेक्स्ट सूचकांक लाभकारी नहीं होगा, हां। – Alex

10

एक पूर्ण पाठ अनुक्रमणिका एक इंडेक्स है जो आप एक MySQL डेटाबेस में उन पाठ फ़ील्ड में लागू करते हैं जिन्हें आप पूर्ण टेक्स्ट खोज चलाने की योजना बनाते हैं। एक पूर्ण पाठ खोज match(field) against('text') वाक्यविन्यास का उपयोग करती है। यदि आप एक पूर्ण पाठ खोज को चलाने के लिए चाहते हैं तो आपके पास कॉलम पर एक पूर्ण टेक्स्ट इंडेक्स होना चाहिए जिसके विरुद्ध आप इसे चलाएंगे।

तीन प्रकार की पूर्ण पाठ खोज हैं। मैं मैन्युअल बोली होगा, क्योंकि मुझे लगता है कि यह सबसे अच्छा कहते हैं:

  • बूलियन खोज खोज एक विशेष क्वेरी भाषा के नियमों का उपयोग कर स्ट्रिंग व्याख्या करता है। स्ट्रिंग में खोजने के लिए शब्द शामिल हैं। यह में ऑपरेटरों को भी शामिल किया जा सकता है कि ऐसी आवश्यकताओं को निर्दिष्ट करें जैसे पंक्तियों से मेल खाने में मौजूद या अनुपस्थित होना चाहिए, या इसे सामान्य से अधिक या कम भारित किया जाना चाहिए। सामान्य "कुछ" या "फिर" जैसे शब्द स्टॉपवर्ड हैं और यदि खोज स्ट्रिंग में मौजूद हैं तो मेल नहीं खाते। IN BOOLEAN मोड संशोधक एक बूलियन खोज निर्दिष्ट करता है। अधिक जानकारी के लिए, अनुभाग 11.9.2, "बूलियन पूर्ण-पाठ खोजें" देखें।

  • एक प्राकृतिक भाषा खोज प्राकृतिक मानव भाषा में वाक्यांश के रूप में खोज स्ट्रिंग को व्याख्या करती है ( वाक्यांश मुक्त पाठ में)। विशेष ऑपरेटर नहीं हैं। स्टॉपवर्ड सूची लागू होती है। इसके अतिरिक्त, पंक्तियों में से 50% या अधिक पंक्तियों में मौजूद सामान्य मानते हैं और मेल नहीं खाते हैं। पूर्ण-पाठ खोज प्राकृतिक भाषा खोज हैं यदि कोई संशोधक दिया गया है।

  • एक प्रश्न विस्तार खोज प्राकृतिक भाषा खोज का एक संशोधन है। खोज स्ट्रिंग का उपयोग पर किया जाता है, जो एक प्राकृतिक भाषा खोज करता है। फिर खोज द्वारा लौटाए गए सबसे प्रासंगिक पंक्तियों से शब्द खोज स्ट्रिंग में जोड़ा गया है और खोज फिर से की गई है। क्वेरी दूसरी खोज से पंक्तियों देता है। QUERY विस्तार संशोधक एक क्वेरी विस्तार खोज निर्दिष्ट करता है। अधिक जानकारी के लिए, अनुभाग 11.9.3, देखें "क्वेरी विस्तार के साथ पूर्ण-पाठ खोजें"।

अधिक जानकारी के लिए Full Text Search Reference Page पर एक हंस ले।

संबंधित मुद्दे

 संबंधित मुद्दे