ईमेल पते की खोज के लिए लुसेन का उपयोग


5

मैं ईमेल पता डोमेन खोजने के लिए लुसीन (विशेष रूप से, लुसीन.NET) का उपयोग करना चाहता हूं।

उदा। मैं एक जीमेल पते पर भेजे गए सभी ईमेल खोजने के लिए "@ gmail.com" खोजना चाहता हूं।

"*@gmail.com" के लिए ल्यूसीन क्वेरी चलाने में एक त्रुटि होती है, तारांकन प्रश्नों की शुरुआत में नहीं हो सकते हैं। "@ Gmail.com" के लिए एक क्वेरी चलाने से कोई भी मिलान नहीं आता है, क्योंकि "[email protected]" पूरे शब्द के रूप में देखा जाता है, और आप किसी शब्द के केवल हिस्सों की खोज नहीं कर सकते हैं।

मैं यह कैसे कर सकता हूं?

10

किसी ने भी संतोषजनक उत्तर नहीं दिया, इसलिए हमने लुसीन दस्तावेज के चारों ओर घूमना शुरू कर दिया और पाया कि हम इसे कस्टम विश्लेषक और टोकनकारों का उपयोग करके पूरा कर सकते हैं।

उत्तर यह है: एक व्हाइटस्पेस एंडएटसिम्बोल्ट टोकनाइज़र और एक व्हाइटस्पेस एंडएटसिंबोलएनाइज़र बनाएं, फिर इस विश्लेषक का उपयोग करके अपनी अनुक्रमणिका को फिर से बनाएं। एक बार ऐसा करने के बाद, "@ gmail.com" की खोज सभी जीमेल पते वापस कर देगी, क्योंकि इसे टोकनाइज़र के लिए एक अलग शब्द धन्यवाद के रूप में देखा गया है जिसे हमने अभी बनाया है।

यहाँ स्रोत कोड है, यह वास्तव में बहुत सरल है:

class WhitespaceAndAtSymbolTokenizer : CharTokenizer 
{ 
    public WhitespaceAndAtSymbolTokenizer(TextReader input) 
     : base(input) 
    { 
    } 

    protected override bool IsTokenChar(char c) 
    { 
     // Make whitespace characters and the @ symbol be indicators of new words. 
     return !(char.IsWhiteSpace(c) || c == '@'); 
    } 
} 


internal class WhitespaceAndAtSymbolAnalyzer : Analyzer 
{ 
    public override TokenStream TokenStream(string fieldName, TextReader reader) 
    { 
     return new WhitespaceAndAtSymbolTokenizer(reader); 
    } 
} 

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

IndexWriter index = new IndexWriter(indexDirectory, new WhitespaceAndAtSymbolAnalyzer()); 
index.AddDocument(myDocument); 

प्रदर्शन खोजों के साथ-साथ विश्लेषक का उपयोग करना चाहिए:

IndexSearcher searcher = new IndexSearcher(indexDirectory); 
Query query = new QueryParser("TheFieldNameToSearch", new WhitespaceAndAtSymbolAnalyzer()).Parse("@gmail.com"); 
Hits hits = query.Search(query); 
  0

मैं लोअरकेसफिल्टर, या शायद एक अनुकूलित लोअरकेसफ़िल्टर के माध्यम से टोकननाइज़र भी पास करूंगा जो केवल @ GmAil.COM टोकन 07 may. 142014-05-07 06:33:45


5

मैं देख रहा हूँ आप अपने समाधान है, लेकिन मेरा यह बचा है और एक क्षेत्र को शामिल किया है होगा जिन दस्तावेजों को आप अनुक्रमणित कर रहे हैं उन्हें ईमेल_डोमेन कहा जाता है, जिसमें मैंने ईमेल पते का पार्स आउट डोमेन जोड़ा होगा। यह मूर्खतापूर्ण लग सकता है, लेकिन इसके साथ जुड़े भंडारण की मात्रा काफी कम है। यदि आप फैनसीयर प्राप्त करना चाहते हैं, तो कहें कि कुछ डोमेन में कई सबडोमेन थे, आप इसके बजाय एक ऐसा क्षेत्र बना सकते हैं जिसमें उल्टा डोमेन चला गया हो, तो आप com.gmail, com.company.department, या ae.eim स्टोर करेंगे ताकि आप पा सकें सभी संयुक्त अरब अमीरात संबंधित 'ए' की उपसर्ग क्वेरी के साथ संबोधित पते।


0

आप कर सकते थे एक अलग क्षेत्र है कि अनुक्रमित ईमेल पता निरस्त किया गया: सूचकांक '[email protected]' '[email protected]' जो तुम "[email protected]*"

के लिए एक प्रश्न करने के लिए सक्षम बनाता है के रूप में
  0

हम्म को कम करेगा। यह वास्तव में हैक लगता है। 05 oct. 082008-10-05 21:15:13


2

वहाँ भी setAllowLeadingWildcard

लेकिन सावधान होना है। यह बहुत ही महंगा महंगा हो सकता है (यही कारण है कि यह डिफ़ॉल्ट रूप से अक्षम है)। शायद कुछ मामलों में यह एक आसान समाधान होगा, लेकिन मैं Judah Himango द्वारा बताए गए कस्टम टोकनाइज़र को भी पसंद करूंगा।