2011-06-09 3 views
5

हम किसी उपयोगकर्ता को दिए गए डेटा के लिए एक निःशुल्क टेक्स्ट खोज बॉक्स विकसित करने के लिए लुसीन का उपयोग कर रहे हैं, जैसे ईमेल इनबॉक्स के मामले में। हम बॉक्स को तारीखों को संभालने की अनुमति देना चाहते हैं, उदाहरण के लिए 5/1/2011। चीजों को आसान बनाने के लिए, हम सिर्फ दो तारीख प्रारूपों के विशेषता के वर्तमान संस्करण को सीमित कर रहे:लुसीन मुक्त टेक्स्ट खोज क्वेरी में दिनांक का पता कैसे लगाएं?

mm/dd/yy 
mm/dd/yyyy 

हमारे प्रोटोटाइप के लिए हम क्वेरी विश्लेषण प्रक्रिया काट दिया-प्रक्रिया पूर्व क्वेरी स्ट्रिंग इन दोनों को देखने के लिए प्रयास करने के लिए तारीख पैटर्न यह लगभग 2 साल पहले था, और हम लुसीन 2.4 पर थे। मैं यह देखने के लिए उत्सुक हूं कि डेटफॉर्मेट को स्वीकार करने के लिए ल्यूसीन आउट ऑफ़ द बॉक्स में कोई उपकरण हैं और किसी भी पहचान की गई तिथियों के साथ टोकनस्ट्रीम लौटाएं। Lucene 2.9 के लिए javadocs के माध्यम से देख रहे हैं, मैं कक्षा पाया:

org.apache.lucene.analysis.sinks.DateRecognizerSinkFilter 

जो मैं क्या जरूरत है ऐसा करने के लिए लगता है, लेकिन यह एक SinkFilter, एक अवधारणा जो Lucene विकी में प्रलेखित किया जाना प्रतीत नहीं होता लागू करता है। क्या किसी ने पहले इस फ़िल्टर का उपयोग किया है, और यदि हां, तो इसका उपयोग करने का सबसे प्रभावी तरीका क्या है?

उत्तर

1

TeeSinkTokenFilter के लिए प्रलेखन में नमूना कोड (जो स्वीकार्य रूप से, अधिक जटिल) है। ध्यान दें कि DateRecognizerSinkFilter जिस तरह से डिज़ाइन किया गया है, यह वास्तविक दिनांक को संग्रहीत नहीं करता है; यह सिर्फ यह पता लगाता है कि टोकन एक तारीख है जो निर्दिष्ट प्रारूप के अनुरूप है। मैं कोशिश करता हूं कि DateFermognizerSinkFilter क्लास को डेटफॉर्मेट उदाहरणों की एक सरणी लेने के लिए पुन: कार्यान्वित करना है, डेटएट्रिब्यूट (या कुछ-ऐसे) नामक एक नई विशेषता वर्ग बनाएं और दिनांक पहचानकर्ता उपशीर्षक का उपयोग दिनांकित दिनांक में दिनांकित करें इसके प्रारूप मेल खाते हैं। इस तरह, आप हमेशा परीक्षण कर सकते हैं कि डेटएट्रिब्यूट पूछताछ करके आपके पास वैध तिथि है या नहीं, और दिनांक प्रारूप को एक वर्ग में स्थानांतरित करें। एक और फायदा यह है कि आपको कई सिंकों को संभालना नहीं होगा, जिससे लिंक किए गए उदाहरण से कोड को सरल बनाना होगा।

+0

उत्तर के लिए धन्यवाद! मैं आपका समाधान एक कोशिश दूंगा और अपने परिणाम पोस्ट करूंगा। –

+0

ग्रेट! आप इसे एक नियमित इन-लाइन टोकनेज़र के रूप में भी कार्यान्वित कर सकते हैं जो मूल स्ट्रिंग और उसी स्थिति में दिनांक को उत्सर्जित करता है। इस तरह, यदि, उदाहरण के लिए, आपके दिनांक प्रारूप में महीने या दिनांक के नाम थे, तो आप अभी भी उन पर सीधे खोज सकते हैं। –

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