2012-02-17 7 views
10

नियमित अभिव्यक्ति नीचे दिखाए गए पैटर्न मिलान वाक्यविन्यास के लिए अनुमति देता है। मैं एक शक्तिशाली खोज उपकरण को लागू करने की कोशिश कर रहा हूं जो जितना संभव हो उतना लागू करता है। मुझे बताया गया है कि नौकरी के लिए edismax सबसे लचीला उपकरण है। नीचे दिए गए पैटर्न मिलान अभिव्यक्तियों में से कौन सा संस्करण edismax के साथ पूरा किया जा सकता है? क्या मैं edismax से बेहतर कर सकता हूँ? क्या आप सुझाव दे सकते हैं कि इस कार्यक्षमता को प्राप्त करने के लिए मैं कौन से फ़िल्टर और पार्सर पैच का उपयोग कर सकता हूं? क्या मैं सपना देख रहा हूं अगर मुझे लगता है कि सोलर इस प्रकार की खोजों के स्वीकार्य प्रदर्शन (यानी सर्वर-साइड प्रसंस्करण समय) प्राप्त कर सकता है?सोलर एडिस्मैक्स द्वारा नियमित रूप से अभिव्यक्ति सुविधाओं का समर्थन किया जाता है?

नियमित अभिव्यक्ति वाक्यविन्यास & mysql

  1. ^मैच स्ट्रिंग की शुरुआत से उदाहरण हैं। 'fofo' REGEXP '^fo' => true
  2. $ स्ट्रिंग का मिलान अंत। 'fo\no' REGEXP '^fo\no$' => true
  3. * 0-असीमित वाइल्डकार्ड। 'Baaaan' REGEXP 'Ba*n' => true
  4. ? 0-1 वाइल्डकार्ड। 'Baan' REGEXP '^Ba?n => false'
  5. + 1-असीमित वाइल्डकार्ड। 'Bn' REGEXP 'Ba+n' => false
  6. | या। 'pi' REGEXP 'pi|apa' => true
  7. () * अनुक्रम मिलान। 'pipi' REGEXP '^(pi)*$' => true
  8. [एक-dX], [^ एक-dX] चरित्र रेंज/सेट 'aXbc' REGEXP '[a-dXYZ]' => true
  9. {n} या {मी, n} प्रमुखता अंकन 'abcde' REGEXP 'a[bcd]{3}e' => true
  10. [: character_class:] 'justalnums' REGEXP '[[:alnum:]]+' => true

उत्तर

15

ल्यूसीन का संस्करण 4.0 विशेष वाक्यविन्यास का उपयोग कर मानक क्वेरी पार्सर में सीधे रेगेक्स प्रश्नों का समर्थन करेगा। मैंने सत्यापित किया कि यह फरवरी में सबवर्सन ट्रंक से निर्मित सौर I के उदाहरण पर काम करता है।

Jira ticket 2604 विशेष रेगेक्स सिंटैक्स का उपयोग करके मानक क्वेरी पार्सर के विस्तार का वर्णन करता है, जो जावास्क्रिप्ट में सिंटैक्स के समान रेगेक्स को सीमित करने के लिए आगे की स्लैश का उपयोग करता है। ऐसा लगता है कि अंतर्निहित RegexpQuery पार्सर का उपयोग कर रहा है।

तो एक संक्षिप्त उदाहरण:

body:/[0-9]{5}/ 

शाब्दिक कोष अनुक्रणित है में एक पांच अंकों ज़िप कोड पर से मेल खाएगी। लेकिन, विचित्र रूप से, शरीर:/\ d {5}/मेरे लिए काम नहीं किया, और^असफल भी।

रेगेक्स बोली को जावा होना होगा, लेकिन मुझे यकीन नहीं है कि इसमें सबकुछ काम करता है, क्योंकि मैंने केवल एक कर्सर परीक्षा की है। क्या काम करता है और क्या नहीं समझने के लिए शायद आपको RegexpQuery कोड पर ध्यान से देखना होगा।

+0

मैंने थोड़ा आगे खोला। एक [पृष्ठ है जो समर्थित वाक्यविन्यास का वर्णन करता है] (https://builds.apache.org/job/Lucene-trunk/javadoc/core/org/apache/lucene/util/automaton/RegExp.html)। रेगेक्स इंजन जावा के बाद नहीं है, लेकिन एक lusene में org.apache.lucene.util.automaton पैकेज में कार्यान्वित किया गया है। [RegexpQuery] (https://builds.apache.org/job/Lucene-trunk/javadoc/core/org/apache/lucene/search/RegexpQuery.html) के लिए दस्तावेज़ भी देखें। –

+0

बस स्ट्रिंग फ़ील्ड पर सोलर 4.0 में '\ d {4}' की कोशिश की। यह काम नहीं करता। ऐसा लगता है कि हम केवल '[0-9] {4} 'का उपयोग कर सकते हैं। हालांकि मुझे लगता है कि^की आवश्यकता नहीं है, क्योंकि किसी भी क्वेरी जैसे '/ [0-9] {5} /' वास्तव में पर्ल-संगत रेगेक्स '/^[0-9] {5} $ /' यानी उपयोग नहीं कर रही है '। *' उपसर्ग के रूप में आप पहले चार से मैच को मजबूर कर रहे हैं। – arun

+1

@RonaldWood आपके द्वारा पोस्ट किए गए दोनों लिंक अब मर चुके हैं। – BlackVegetable

4

नियमित अभिव्यक्तियां और (ई) निराशा वास्तव में तुलनीय नहीं हैं। डिसमैक्स सामान्य अंत उपयोगकर्ता इनपुट के साथ सीधे काम करने के लिए है, जबकि नियमित अभिव्यक्ति सामान्य अंत उपयोगकर्ता इनपुट नहीं हैं।

इसके अलावा, नियमित रूप से अभिव्यक्ति जैसी चीज़ों को मिलान करना, विघटन के साथ text analysis settings और स्कीमा डिज़ाइन पर निर्भर करता है, न कि खुद को नष्ट करने पर। सोलर के साथ आप आम तौर पर कंक्रीट खोज की ज़रूरत के लिए स्कीमा और टेक्स्ट विश्लेषण को तैयार करते हैं, संभवतः इंडेक्स-टाइम पर अधिकतर काम कर रहे हैं। इसके साथ नियमित अभिव्यक्तियां और लुसीन उलटा सूचकांक की मूल संरचना के साथ भी बाधाएं हैं।

फिर भी, लुसेन RegexQuery और नए RegexpQuery प्रदान करता है। जहां तक ​​मुझे पता है, इन्हें सोलर के साथ एकीकृत नहीं किया गया है, लेकिन वे हो सकते हैं। Solr issue tracker में एक नया आइटम शुरू करें और कोडिंग को खुश करें! :)

ध्यान रखें कि रेगेक्स प्रश्न शायद धीमे हो जाएंगे ... लेकिन वे आपके मामले में स्वीकार्य प्रदर्शन कर सकते हैं।