2010-12-01 13 views
5

का कारण बनता है मैंने एक एमएसएसक्लसे सर्वर डेटाबेस, विचारों और संग्रहीत प्रक्रियाओं को एक निर्देशिका संरचना में लिखा है जिसे मैं Lucene.net के साथ अनुक्रमणित कर रहा हूं। मेरी अधिकांश तालिका, दृश्य और प्रक्रिया नामों में अंडरस्कोर होते हैं।ल्यूकेन.Net अंडरस्कोर टोकन स्प्लिट

मैं मानक विश्लेषक का उपयोग करता हूं। अगर मैं tIr_ चालान BtnWtn01 नाम की एक तालिका के लिए पूछताछ करता हूं, उदाहरण के लिए, मैं tIr _InvoiceBtnWtn01 के बजाय, TIr और InvoiceBtnWtn01 के लिए हिट वापस प्राप्त करता हूं।

मुझे लगता है कि समस्या यह है कि टोकननाइज़र _ (अंडरस्कोर) पर विभाजित है क्योंकि यह विराम चिह्न है।

क्या विराम चिह्न सूची से अंडरस्कोर को निकालने का एक (सरल) तरीका है या क्या कोई अन्य विश्लेषक है जिसे मुझे एसक्यूएल और प्रोग्रामिंग भाषाओं के लिए उपयोग करना चाहिए?

+0

मैं StopAnalyzer और WhitespaceAnalyzer अब कोशिश कर रहा हूँ। तो ऐसा लगता है कि व्हाइटस्पेस विश्लेषक जाने का रास्ता हो सकता है। – automatic

उत्तर

4

हां, मानक विश्लेषक अंडरस्कोर पर विभाजित होता है। Whitespace विश्लेषक नहीं करता है। ध्यान दें कि आप प्रत्येक फ़ील्ड के लिए विभिन्न विश्लेषकों का उपयोग करने के लिए एक PerFieldAnalyzerWrapper का उपयोग कर सकते हैं - आप टेबल/कॉलम नाम को छोड़कर सबकुछ के लिए कुछ मानक विश्लेषक की कार्यक्षमता रखना चाह सकते हैं।

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

संपादित करें: सरल कस्टम विश्लेषक (सी # में है, लेकिन आप बहुत आसानी से जावा के लिए यह अनुवाद कर सकते हैं):

// Chains together standard tokenizer, standard filter, and lowercase filter 
class MyAnalyzer : Analyzer 
{ 
    public override TokenStream TokenStream(string fieldName, System.IO.TextReader reader) 
    { 
     StandardTokenizer baseTokenizer = new StandardTokenizer(Lucene.Net.Util.Version.LUCENE_29, reader); 
     StandardFilter standardFilter = new StandardFilter(baseTokenizer); 
     LowerCaseFilter lcFilter = new LowerCaseFilter(standardFilter); 
     return lcFilter; 
    } 
} 
+1

मुझे लगता है कि मैं लोअरकेस टोकन चाहता हूं। मुझे लगता है कि व्हाइटस्पेस और लोअरकेस के संयोजन का "गैर-स्रोत संकलन" तरीका नहीं है। लोअरकेसफिल्टर और लोअरकेस टोकनाइज़र का उपयोग करने के बीच क्या अंतर है? – automatic

+0

@automatic: मैंने एक उदाहरण जोड़ा है कि चेन फ़िल्टर/टोकननाइज़र को एक साथ कैसे करें। आम तौर पर, सोलर का उद्देश्य ल्यूसीन के "उपयोग में आसान" संस्करण होना है, इसलिए हां, ऐसा करने का कोई तरीका नहीं है, जिसे आप केवल ल्यूसीन का उपयोग करते हुए लेखन कोड की आवश्यकता नहीं होती है। लेकिन यह अर्ध-जानबूझकर है। – Xodarap

+0

@automatic: इसके अलावा, लोअरकेस टोकनाइज़र लोअरकेसफिल्टर + लेटर टोकनाइज़र है; हालांकि LetterTokenizer को देखकर, यह अंडरस्कोर पर भी विभाजित होगा। तो यह वही नहीं है जो आप चाहते हैं। माफ़ कीजिये। – Xodarap