2011-12-15 14 views
7

के साथ प्रतिस्थापित नहीं कर रहा है इसलिए मैं सोलर में बहुत नया हूं लेकिन मैं एक फोन नंबर स्ट्रिंग पर कुछ प्री-प्रोसेसिंग करने के लिए पैटर्नरप्लेस चेहरफिल्टर फैक्टरी का उपयोग करने की कोशिश कर रहा हूं। यहाँ क्षेत्र के लिए विन्यास है:सोलर पैटर्न रीप्लेस कैरफिल्टर फैक्टरी निर्दिष्ट पैटर्न

<fieldType name="phone_number" class="solr.TextField" > 
    <analyzer> 
    <charFilter class="solr.PatternReplaceCharFilterFactory" 
       pattern="\(?(\d{3})?\)?[-. ]?(\d{3})[-. ]?(\d{4})" 
       replaceWith="$1-$2-$3"/> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    </analyzer> 
</fieldType> 

मैं regex परीक्षण किया है और यह सबसे मेल खाता मैं इसे (जैसे 555.444.1234, (555) 444-1234, +५५५४४४१२३४, 4,441,234, 444-1234 की उम्मीद करेंगे। , आदि)।

अब मेरी समझ यह है कि रेगेक्स को जो भी पारित किया जाना चाहिए उससे मेल खाना चाहिए और निर्दिष्ट पैटर्न के साथ इसे प्रतिस्थापित करना चाहिए। तो अगर उन्होंने मुझे 555.123.4444 पास कर दिया तो मुझे उम्मीद है कि इसका परिणाम 555-123-4444 को मानक टोकननाइज़र फैक्ट्री में पारित किया जाएगा। वहां से यह टोकन 555,123,4444 में टूट जाएगा।

यह देखते हुए कि मैंने इस पर कितना समय व्यतीत किया है, मुझे यकीन है कि एक छोटा कॉन्फ़िगरेशन समस्या है जो मुझे याद आ रही है लेकिन उपलब्ध दस्तावेज (जो मैंने देखा है) से मुझे कोई संकेत नहीं है कि यह क्या है।

अग्रिम धन्यवाद।

+0

शायद आप अन्य उपयोगकर्ताओं के लिए इसे और अधिक उपयोगी बनाने के लिए अपने प्रश्न (इसे संपादित करना) में कुछ विवरण जोड़ सकते हैं। आप अपने उत्तर को स्वतः भी स्वीकार कर सकते हैं। – javanna

+0

@javanna, यह वास्तव में मुझे 2 दिनों के लिए अपना जवाब स्वीकार नहीं करेगा या मैं चाहता हूं। मुझे यकीन नहीं था कि मैं संपादित करना या जवाब देना चाहता हूं। मैं जवाब पर बस गया, प्रतीक्षा अवधि एक बार प्रतीक्षा अवधि – Jared

+0

से अधिक है, धन्यवाद! – javanna

उत्तर

6

ठीक तो मैं इसे एक 'भाग्यशाली' गूगल खोज मैं इस लिंक Solr filters: PatternReplaceCharFilter भर में और बहुत तल पर आया वे उन्नत पैरामीटर जो मुझे लगता है बताते हैं पर चर्चा के बाद पता लगा बेहतर कैसे फिल्टर वास्तव में काम करता है:

चारफिल्टर एक ही चरित्र पर काम करता है, और पैटर्न मिलान के लिए अधिक वर्ण पढ़ने के लिए एक आंतरिक बफर की आवश्यकता होती है। MaxBlockChars आपको बफर के आकार को निर्दिष्ट करने की अनुमति देता है।

मेरी समस्या यह है कि यह एक ही चरित्र में पढ़ रहा है जो पूरी स्ट्रिंग नहीं है। यह उन उदाहरणों के विपरीत था जो मैंने पोस्ट किए थे। तो समाधान मेरे charFilter पर था I मैक्सब्लॉक चेहर विशेषता और voila यह काम करता है। ल्यूसिड इमेजिनेशन की साइट पर और न ही सोलर विकी (जो मैं पार आया) पर इस विशेषता का कोई उल्लेख नहीं था।

+0

मजेदार, मुझे 'अज्ञात पैरामीटर मिल गए: {maxBlockChars = 10000} जब मैंने इसे फ़िल्टर नोड में जोड़ने का प्रयास किया। –

+0

@TimBezhashvyly यह solr 3.1 के लिए था, अगर मुझे याद है, तो संभव है कि चीजें बदल गई हैं क्योंकि वे संस्करण 6 पर हैं – Jared

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