2008-11-17 19 views
15

के लिए पूर्ण टेक्स्ट कैटलॉग/इंडेक्स खोज मैं अपने सिर को लपेटने की कोशिश कर रहा हूं कि किसी शब्द/अभिव्यक्ति के बीच में दिखाई देने वाली चीज़ की खोज कैसे करें - "जैसे%%%%" खोजना - लेकिन एसक्यूएल सर्वर (2005) में पूर्ण पाठ सूची में।% पुस्तक%

मैं यह कैसे कर सकता हूं? यह लगभग प्रतीत होता है जैसे CONTAINS और FREETEXT वास्तव में पर वाइल्डकार्ड का समर्थन नहीं करते हैं, एक खोज अभिव्यक्ति के - क्या वास्तव में यह हो सकता है?

मैंने कल्पना की होगी कि FREETEXT(*, "book") "पुस्तक" के अंदर कुछ भी मिलेगा, जिसमें "रीबुक" या कुछ ऐसा शामिल है।

+0

चेक एक सहायक वर्ग कि Sql सर्वर 2005 को FTS लिए बहुत उपयोगी है के लिए इस लिंक कर रहा हूँ: [http://ewbi.blogs.com/develops/2007 /05/normalizing_sql.html ](http://ewbi.blogs.com/develops/2007/05/normalizing_sql.html) –

उत्तर

3

यदि आप कुछ गंभीर पूर्ण पाठ खोज करना चाहते हैं तो मैं (और) Lucene.Net का उपयोग करूंगा। एमएस एसक्यूएल पूर्ण पाठ खोज मूल बातें के अलावा किसी अन्य चीज़ के लिए अच्छी तरह से काम नहीं करती है।

14

दुर्भाग्य से केवल शामिल हैं उपसर्ग वाइल्डकार्ड का समर्थन करता है:

CONTAINS(*, '"book*"') 
+0

हाँ, इस प्रकार मैं आईएफटीएस के साथ अपनी "पसंद" खोज कर रहा हूं। बहुत अच्छी तरह से काम करता है। –

7

एसक्यूएल सर्वर पूर्ण पाठ खोज शब्द में पाठ tokenizing पर आधारित है। एक शब्द के रूप में कोई छोटी इकाई नहीं है, इसलिए सबसे छोटी चीजें जिन्हें आप देख सकते हैं वे शब्द हैं।

आप कुछ वर्णों से शुरू होने वाले मैचों की तलाश करने के लिए prefix searches का उपयोग कर सकते हैं, जो संभव है क्योंकि शब्द सूचियों को वर्णानुक्रम में रखा जाता है और सभी सर्वर को मिलान करने के लिए सूची के माध्यम से स्कैन करना होता है।

LIKE '%book%' क्लॉज के साथ आप जो क्वेरी चाहते हैं उसे करने के लिए संभवतः तेज़ (या धीमी) होगी।

1

यहां एक सुझाव है जो उस वाइल्डकार्ड सीमा के लिए एक समाधान है। आप एक गणना वाले कॉलम बनाते हैं जिसमें एक ही सामग्री होती है लेकिन आप जिस कॉलम (ओं) को खोज रहे हैं, के विपरीत में।

यदि, उदाहरण के लिए, आप 'ProductTitle' नामक कॉलम पर खोज रहे हैं, तो ProductRev नामक कॉलम बनाएं। फिर उस क्षेत्र की 'गणना स्तंभ विशिष्टता' मान अपडेट होने के लिए:

(रिवर्स ([ProductTitle]))

आपकी खोज में 'ProductsRev' कॉलम शामिल करें और अब आप परिणाम है कि एक का समर्थन वापस जाने के लिए सक्षम होना चाहिए शब्द की शुरुआत में वाइल्डकार्ड। सौभाग्य!!

+1

जो रिवर्स के रूप में "रीबबुक" नहीं मिलेगा, यह "डेकोबर" और "कूब *" अभी भी मेल नहीं खाता है। – jerry

+0

यह रचनात्मक है, लेकिन जैसा कि अन्य टिप्पणी से पता चलता है, यह केवल उन शब्दों के साथ मदद करता है जो लक्ष्य में समाप्त होते हैं, न कि मध्य में लक्ष्य वाले शब्दों में। साथ ही, यह डेटा/कोड गंध की तरह बहुत अधिक लगता है जो मुझे लगता है कि नियोक्ता नियमित 'LIKE% blah%' या डीबी इंजन स्विचिंग का उपयोग कर बेहतर हैं। –

1

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

0

सभी गैर बार दोहराए गए प्रत्ययों की गणना करने के लिए सी # में एक असेंबली प्रोग्राम क्यों न करें। उदाहरण के लिए यदि आपके पास टेक्स्ट "लाल मांस खाएं" है, तो आप इस क्षेत्र में "फ़ील्ड में वह खा सकते हैं" वह ई लाल एड डी मांस पर खाते हैं "(ध्यान दें कि फिर से खाने और फिर से खाने के लिए नुकीला नहीं है) पूर्ण पाठ खोज का उपयोग करें। ऐसा करने के लिए एक कार्य आसानी से Csharp

x में आसानी से लिखा जा सकता है) मुझे पता है कि यह ओडी लगता है ...यह एक वर्कअराउंड x) मुझे पता है कि मैं सम्मिलित/अद्यतन में ओवरहेड जोड़ रहा हूं .... केवल तभी उचित है जब यह ओवरहेड खोज फ़ंक्शन x में सुधार के अलावा महत्वहीन है) मुझे पता है कि आकार के ऊपर एक ओवरहेड भी है संग्रहीत डेटा।

लेकिन मैं बहुत conffident कि काफी तेजी से हो जाएगा

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