2012-07-17 17 views
8

मैं फर्स्टनाम नामक कुछ रिकॉर्ड के लिए एक एसओएलआर खोज का उपयोग करने की कोशिश कर रहा हूं;एसओएलआर खोज क्वेरी केस संवेदनशीलता

abcd 
Abcd 
abcD 
ABcd 
abCd 
abCD 

अब मैं वाइल्डकार्ड वर्ण समर्थन के साथ एक खोज करने के लिए कोशिश कर रहा हूँ। मुझे समझने की जरूरत है कि केस संवेदनशील होने के मामले में खोज वास्तव में कैसे काम करती है।

उदा अगर मैं फर्स्टनाम पैरामीटर को अब * वीएस एबी * के रूप में पास करता हूं, तो कौन से रिकॉर्ड वापस किए जाएंगे?

क्या खोज को केस-सेंसिव या केस-प्रेसिस्टिव बनाने के लिए कोई तरीका है?

कृपया मदद करें। धन्यवाद।

उत्तर

6

यह इस बात पर निर्भर करता है कि आप schema.xml में अपने फ़ील्ड को कैसे परिभाषित करते हैं। यदि आप इंडेक्सिंग और पूछताछ करते समय LowerCaseFilterFactory का उपयोग करते हैं, तो सभी प्रश्न केस-असंवेदनशील होंगे। अन्यथा यह मामला संवेदनशील होगा।

<filter class="solr.LowerCaseTokenizerFactory"/> 
7

आप इसे अपनी स्कीमा में कॉन्फ़िगर करते हैं। उदाहरण के लिए:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
<analyzer type="query"> 
<filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 

का अर्थ है कि क्षेत्र को प्रश्नों के लिए कम मामला माना जाता है, इससे इंप्रेशन केस-असंवेदनशील खोज हो जाता है।

+0

, यह एक tokenizer की आवश्यकता होगी - chrismarx

2

डिफ़ॉल्ट रूप से, एक मूल्य संग्रहीत मूल्य के ठीक विपरीत मिलान किया जाता है। यदि आप एक क्षेत्र को असंवेदनशील होना चाहते हैं, तो सामान्य तरीका एक फ़ील्ड प्रकार होना चाहिए जो लोअरकेस फ़िल्टर का उपयोग करता है, सभी अनुक्रमित सामग्री को एक ही केस बनाते हैं और व्यावहारिक रूप से खोज केस असंवेदनशील बनाते हैं (क्योंकि क्वेरी मान भी कम किया जाएगा)।

उदाहरण सामग्री 'लेख' और 'text_en' फ़ील्ड प्रकार के लिए ऐसा करता है:

<filter class="solr.LowerCaseFilterFactory"/> 

वहाँ लेकिन कुछ विशेष क्षेत्रों है जहां वाइल्ड कार्ड प्रश्नों के लिए lowercasing की automagic हैंडलिंग मुसीबतों का कारण हो सकता है, और MultitermQueryAnalysis was introduced in Solr 3.6 and 4.0 to handle those situations । 3.6 और 4.0 को वन्य कार्ड खोज स्वचालित रूप से सही तरीके से करना चाहिए यदि फ़ील्ड पहले से कम हो।

मैं वाइल्डकार्ड का उपयोग करते समय क्वेरी में नाम को कम करने का सुझाव देता हूं (जब तक आप लोअरकेसफिल्टरफैक्टरी को इंडेक्सिंग करते हैं) यदि आपको सही व्यवहार पूर्व-3.6 नहीं मिल रहा है।

2

सौर स्कीमा में डिफ़ॉल्ट परिभाषित फ़ील्ड बहुत अलग तरीके से काम करता है।

डेटा प्रकार 'string' एक शब्द को सटीक स्ट्रिंग के रूप में पूरा नहीं करता है।

जबकि 'text_general' आमतौर पर टोकननाइज़ेशन और माध्यमिक प्रसंस्करण (जैसे केस असंवेदनशील और संपूर्ण स्ट्रिंग मैच) करता है। जब हम किसी वाक्य के भाग से मेल खाते हैं तो यह सभी परिदृश्यों के लिए बहुत उपयोगी है।

हैं निम्नलिखित नमूना, "वाक्य में खोजें", दोनों क्षेत्रों हम वाक्य में के लिए वास्तव में खोजें खोज स्ट्रिंग फ़ील्ड से एक हिट पाने के लिए करना होगा करने के लिए अनुक्रमित की गई है, जबकि यह के मामले में अलग-अलग परिणाम वापस आ जाएगी text_general।

यहां विक्रेता का नाम खोज स्ट्रिंग में बिल्कुल मेल खाता होगा, जबकि उत्पाद का नाम उपर्युक्त वाक्य में खोजेगा।

उदाहरण:

Solr 5 के रूप में
<field name="seller_name" type="string" indexed="true" stored="true"/> 
<field name="product_name" type="text_general" indexed="true" stored="true"/> 
संबंधित मुद्दे