2011-11-23 24 views
15

मुझे एसओएलआर खोज में कोई समस्या है।
enter image description hereएसओएलआर केस असंवेदनशील खोज

मैं Solr व्यवस्थापक का उपयोग इस जैसी क्वेरी का उपयोग इस डेटा को खोजने के लिए:
मैं इस तरह के आंकड़े उपलब्ध नहीं हैं

address_s:*Nadi* 

और उन डेटा नहीं मिला। लेकिन जब मैं इस क्वेरी का उपयोग करता हूं:

address_s:*nadi* 

यह कुछ भी नहीं मिला है।
मैं googling है और मैं निम्न स्क्रिप्ट के साथ एक क्षेत्र बनाने के लिए एक जवाब मिला:

<fieldType name="c_text" class="solr.TextField"> 
    <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 

    <analyzer type="query"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

मैं प्रतिलिपि Schema.xml में उन स्क्रिप्ट पेस्ट है, लेकिन यह अभी भी काम नहीं करता। मुझे क्या करना चाहिए? क्या कोई मेरी मदद कर सकता है?

उत्तर

11

address_s क्षेत्र के रूप में परिभाषित किया जाना चाहिए -

<field name="address_s" type="c_text" indexed="true" stored="true"/> 

आप डिफ़ॉल्ट Schema.xml उपयोग कर रहे हैं, इस defination आना चाहिए से पहले -

<dynamicField name="*_s" type="string" indexed="true" stored="true"/> 

जो इसे एक स्ट्रिंग फ़ील्ड प्रकार के रूप में परिभाषित करता है कोई विश्लेषण प्रदर्शन के साथ।

वाइल्डकार्ड प्रश्न विश्लेषण से गुजरते नहीं हैं।
तो यदि आप सूचकांक समय क्वेरी address_s:*nadi* पर कम केस फ़िल्टर लागू करते हैं तो काम करेगा।
हालांकि, address_s:*Nadi * क्वेरी Nadi सूचकांक में nadi से मेल नहीं खाती है और आपको क्लाइंट पक्ष में प्रश्नों को कम करने की आवश्यकता होगी।

+1

मैंने आपके निर्देश का पालन किया है, लेकिन यह अभी भी काम नहीं कर सकता है। मैं पेस्ट ' 'schema.xml पर कॉपी करता हूं, और' java -jar start.jar' को फिर से चलाता हूं और क्वेरी का प्रयास करता हूं । क्षमा करें, मैं पहले पूछना चाहता हूं, मैंने schema.xml का उपयोग किया .. \ solr_302 \ example \ solr \ conf, क्या यह सही है,? – Praditha

+0

अरे यह काम है, मुझे पहले दस्तावेज़ को फिर से सम्मिलित करने की आवश्यकता है। धन्यवाद,। क्या आप जानते हैं कि PHP के माध्यम से उन फ़ील्ड को कैसे परिभाषित किया जाए। इसलिए मुझे इसे schema.xml मैन्युअल रूप से परिभाषित करने की आवश्यकता नहीं है। – Praditha

+5

'हालांकि, क्वेरी पता_एस: * नदी * नहीं, क्योंकि नदी इंडेक्स में नडी से मेल नहीं खाएगी - लेकिन यह नहीं है कि' <विश्लेषक प्रकार = "क्वेरी" /> 'में' लोअरकेसफिल्टर फैक्टरी 'रखने का बिंदु है, इसलिए कि * प्रश्न * स्वचालित रूप से कम कर रहे हैं? – Madbreaks

5

क्या आपका पता_एस फ़ील्ड इस schema.xml में c_text फ़ील्ड प्रकार का उपयोग करता है?

यदि आपकी अनुक्रमणिका पिछले कॉन्फ़िगरेशन के साथ बनाई गई है, तो आपको परिवर्तनों को ध्यान में रखने के लिए सबकुछ फिर से अनुक्रमणित करने की आवश्यकता है।

+0

यह कैसे करें,। क्योंकि मैं php का उपयोग कर सभी फ़ील्ड बना देता हूं। मैं सभी फ़ील्ड इस तरह सरणी में दर्ज करता हूं: $ data = array (..., 'address_s' => 'value', 'city_name_s' => 'value', ...); और addDocument ($ डेटा) फ़ंक्शन का उपयोग करें। कोई उपाय।,? – Praditha

+3

फिर आपको इंडेक्स में जोड़े गए सभी दस्तावेजों के लिए इन आदेशों को फिर से चलाने की आवश्यकता है। सूचकांक में डेटा का प्रतिनिधित्व विश्लेषक पर निर्भर करता है जिसका उपयोग किया गया है। इसलिए, यदि आप इंडेक्सिंग के लिए उपयोग किए गए विश्लेषक को अपडेट करते हैं, तो आपको अपने सभी दस्तावेज़ों को फिर से अनुक्रमणित करने की आवश्यकता है। – jpountz

+0

क्षमा करें, मुझे अभी भी समझ में नहीं आता कि मुझे क्या करना चाहिए, क्या आप इसे चरण-दर-चरण का वर्णन कर सकते हैं: डी और जब मैं अपने php कमांड को फिर से चलाता हूं, तो मुझे सभी इंडेक्स में 'c_text' फ़ील्ड प्रकार का उपयोग करना चाहिए।' – Praditha

5

मैं फ़ील्ड प्रकार के रूप में इस का उपयोग किया है:

<fieldType name="string" class="solr.TextField"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

और उपयोग करते हुए मेरे खेतों में परिभाषित किया गया:

<field name="address" type="string" indexed="true" stored="true"/> 

परिणाम: मेरे दस्तावेज़ सही मामले में खेतों रिटर्न (डाला की तरह) और मैं केस-असंवेदनशील (दोनों ऊपरी और लोअरकेस अक्षरों का उपयोग करके) खोज सकता हूं ...

संस्करण: सौर 3.6

+0

यह आपको एक त्रुटि देगा –

1

मैंने इस तरह कुछ उपयोग किया है ... स्कीमा में।एक्सएमएल i 'एक नया fieldType डाल दिया है

<fieldType name="newType" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ReversedWildcardFilterFactory" /> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ReversedWildcardFilterFactory" /> 
     </analyzer> 
</fieldType> 

कि आप बनाना चाहते क्षेत्र के लिए नए प्रकार निरुपित यह मामला & खाली स्थान के असंवेदनशील तो फिर तुम रूप में Solr क्वेरी बना करने के लिए है: fieldName:(*fieldValue\ *)

1

type="string" के बजाय क्षेत्र type="text_general" परिभाषित करें (जैसा कि डिफ़ॉल्ट schema.xml में परिभाषित किया गया है)। इसकी संपत्ति पर ignore case=true

-2

आप एक गतिशील स्कीमा (या डेटा संचालित स्कीमा) का उपयोग करने वाले संग्रह को असंवेदनशील कैसे बनाते हैं? संग्रह इस तरह बनाया गया था: su - solr -c "/opt/solr/bin/solr create -c Mock2 -n data_driven_schema_configs"

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