2009-07-02 13 views
6

मैं जावा ल्यूसीन का PHP पोर्ट Zend_Search_Lucene का उपयोग कर रहा हूं। मेरे पास वर्तमान में कुछ कोड है जो तारों की सरणी के आधार पर एक खोज क्वेरी तैयार करेगा, जिसके परिणामस्वरूप कम से कम एक इंडेक्स फ़ील्ड सबमिट किए गए प्रत्येक स्ट्रिंग से मेल खाता है। सरलीकृत, यह इस तरह दिखता है:ल्यूसीन में मल्टी-टर्म वाइल्डकार्ड प्रश्न?

(नोट: $ शब्द एक सरणी उपयोगकर्ता इनपुट से निर्मित है।)

$query = new Zend_Search_Lucene_Search_Query_Boolean(); 
foreach ($words as $word) { 
    $term1 = new Zend_Search_Lucene_Index_Term($word, $fieldname1); 
    $term2 = new Zend_Search_Lucene_Index_term($word, $fieldname2); 
    $multiq = new Zend_Search_Lucene_Search_Query_MultiTerm(); 
    $multiq->addTerm($term1); 
    $multiq->addTerm($term2); 
    $query->addSubquery($multiq, true); 
} 
$hits = $index->find($query); 

क्या मैं की तरह करने के लिए होता है के साथ ($ $ शब्द की जगह है शब्द। '*') - प्रत्येक शब्द के अंत में एक तारांकन जोड़ना, इसे वाइल्डकार्ड शब्द में बदलना।

लेकिन फिर भी, $ multiq एक Zend_Search_Lucene_Search_Query_Wildcard बजाय एक Zend_Search_Lucene_Search_Query_MultiTerm होना जरूरी होता है, और मुझे नहीं लगता कि मैं अभी भी प्रत्येक $ multiq करने के लिए कई Index_Terms जोड़ने के लिए सक्षम होगा।

क्या कोई वाइल्डकार्ड और मल्टीटर्म दोनों क्वेरी बनाने का कोई तरीका है?

धन्यवाद!

उत्तर

5

नहीं रास्ते में आप इसे प्राप्त करने के लिए उम्मीद कर रहे हैं, दुर्भाग्य से:

Lucene एकल शर्तों के भीतर एकल और एकाधिक चरित्र वाइल्डकार्ड खोजों का समर्थन करता है (लेकिन वाक्यांश के भीतर नहीं क्वेरी)।

वाइल्डकार्ड, रेंज और फजी खोज प्रश्नों भी कई शब्दों से मेल खाते हो सकते हैं:

और यहां तक ​​कि अगर यह संभव थे, शायद नहीं एक अच्छा विचार होगा। यह अविश्वसनीय खोज प्रदर्शन डाउनग्रेड का कारण बन सकता है।

मैं जाने के लिए यदि आप कई वाइल्डकार्ड शब्द पर जोर देते हैं जिस तरह से कल्पना, दो दो अलग-अलग खोज करता है, प्रत्येक में वाइल्डकार्ड अवधि के लिए एक निष्पादित, और साथ में परिणाम बंडल किया जाएगा।

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