2011-03-31 8 views
5

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

<doc> 
<add> 
    <field name="cat">a|b|c<field> 
</add> 
</doc> 

एक बहु महत्वपूर्ण क्षेत्र के लिए

<field name="cat" type="str_split_on_pipe" indexed="true" stored="true" multiValued="true" omitNorms="true" /> 

रूप में घोषित किया और पाइप प्रकार पर विभाजन

<fieldType name="str_split_on_pipe" class="solr.TextField" positionIncrementGap="100" > 
    <analyzer type="index"> 
     <tokenizer class="solr.PatternTokenizerFactory" pattern="\|\s*" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <!--<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>--> 
     <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes 
    possible with WordDelimiterFilter in conjuncton with stemming. --> 
     <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.PatternTokenizerFactory" pattern="\|\s*" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <!--<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>--> 
     <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes 
    possible with WordDelimiterFilter in conjuncton with stemming. --> 
     <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 
</fieldType> 

मैं इस एक ही होने की अपेक्षा करेंगे जैसे मैं दस्तावेज़ भेज है तीन अलग cat फ़ील्ड के साथ, हालांकि यह बहुत कुछ नहीं लगता है और केवल मेरी पाइप से अलग सूची लौटता रहता है।

क्या मैं संभव करने की कोशिश कर रहा हूं, और यदि ऐसा है तो मैं गलत कहां गया हूं?

धन्यवाद, अमर

उत्तर

9

एक PatternTokenizer का उपयोग केवल आंतरिक प्रतिनिधित्व और नहीं संग्रहीत मूल्य बदल जाएगा। यदि आप चाहते हैं कि सोलर इसे कई मूल्यवान मानों के साथ बहु-मूल्यवान फ़ील्ड के रूप में पेश करे, तो आपको 3 अलग-अलग cat फ़ील्ड में भेजने की आवश्यकता है।

यदि आप DataImportHandler का उपयोग कर रहे हैं, तो आप डेटा को विभाजित करने के लिए RegexTransformer का उपयोग कर सकते हैं।

+0

धन्यवाद, 'डेटा इंपोर्ट हैंडलर' बस यही था जो मैं बाद में था! – amarsuperstar

+0

याद रखें कि RegexTransformer एक रेगेक्स है इसलिए यदि आपको उदाहरण के लिए पाइप द्वारा विभाजित करने की आवश्यकता है, तो आपको उन्हें बचाना होगा (splitBy = "\ |") – KinSlayerUY

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