मैं अपने खोज परिणामों को स्कोर द्वारा क्रमबद्ध करना चाहता हूं, जो वे कर रहे हैं, लेकिन स्कोर की गणना अनुचित रूप से की जा रही है। यह कहना है, अनुचित रूप से, लेकिन उम्मीद से अलग नहीं है और मुझे यकीन नहीं है कि क्यों। मेरा लक्ष्य स्कोर को बदल रहा है जो भी हटाना है।सोलर: फ़ील्ड नॉर्म अलग-अलग दस्तावेज़, बिना किसी दस्तावेज़ को
यदि मैं ऐसी खोज करता हूं जो दो ऑब्जेक्ट्स से मेल खाता है (जहां ऑब्जेक्टए ऑब्जेक्टबी से उच्च स्कोर होने की उम्मीद है), ऑब्जेक्टबी पहले वापस लौटाया जा रहा है।
मान लें कि, इस उदाहरण के लिए, मेरी क्वेरी एक शब्द है: "सेब"।
ObjectA के शीर्षक: "सेब सेब हैं" (2/3 शब्द)
ObjectA का वर्णन: "वहाँ सेब-सेब में सेब थे और अब सेब सभी सेब पर सभी सेब चला गया" (6/18 शब्द)
ऑब्जेक्टबी का शीर्षक: "सेब बहुत अच्छे हैं" (1/3 शब्द)
ऑब्जेक्टबी का वर्णन: "सेब के कमरे में सेब थे और अब सेब सभी सेब में खराब हो गए!" (4/18 शर्तें)
शीर्षक फ़ील्ड में कोई बढ़ावा नहीं है (या बल्कि, 1 का बढ़ावा) और विवरण फ़ील्ड में 0.8 का बढ़ावा है। मैंने solrconfig.xml या उस क्वेरी के माध्यम से एक दस्तावेज़ को बढ़ावा नहीं दिया है जिसे मैं गुजर रहा हूं। यदि दस्तावेज़ बूस्ट निर्दिष्ट करने का कोई और तरीका है, तो मुझे एक मौका है कि मुझे एक याद आ रही है।
explain
प्रिंटआउट विश्लेषण करने के बाद, यह ObjectA तरह है लग रहा है ठीक से ObjectB तुलना में एक उच्च स्कोर की गणना है, जैसे मैं चाहता हूँ, के लिए एक अंतर को छोड़कर: ObjectB के शीर्षक fieldNorm हमेशा ObjectA की तुलना में अधिक है।
यहाँ explain
प्रिंटआउट इस प्रकार है। जैसा कि आप जानते हैं: शीर्षक क्षेत्र mditem5_tns
है और वर्णन क्षेत्र mditem7_tns
है:
ObjectB:
1.3327172 = (MATCH) sum of:
1.0352166 = (MATCH) max plus 0.1 times others of:
0.9766194 = (MATCH) weight(mditem5_tns:appl in 0), product of:
0.53929156 = queryWeight(mditem5_tns:appl), product of:
1.8109303 = idf(docFreq=3, maxDocs=9)
0.2977981 = queryNorm
1.8109303 = (MATCH) fieldWeight(mditem5_tns:appl in 0), product of:
1.0 = tf(termFreq(mditem5_tns:appl)=1)
1.8109303 = idf(docFreq=3, maxDocs=9)
1.0 = fieldNorm(field=mditem5_tns, doc=0)
0.58597165 = (MATCH) weight(mditem7_tns:appl^0.8 in 0), product of:
0.43143326 = queryWeight(mditem7_tns:appl^0.8), product of:
0.8 = boost
1.8109303 = idf(docFreq=3, maxDocs=9)
0.2977981 = queryNorm
1.3581977 = (MATCH) fieldWeight(mditem7_tns:appl in 0), product of:
2.0 = tf(termFreq(mditem7_tns:appl)=4)
1.8109303 = idf(docFreq=3, maxDocs=9)
0.375 = fieldNorm(field=mditem7_tns, doc=0)
0.2975006 = (MATCH) FunctionQuery(1000.0/(1.0*float(top(rord(lastmodified)))+1000.0)), product of:
0.999001 = 1000.0/(1.0*float(1)+1000.0)
1.0 = boost
0.2977981 = queryNorm
ObjectA:
1.2324848 = (MATCH) sum of:
0.93498427 = (MATCH) max plus 0.1 times others of:
0.8632177 = (MATCH) weight(mditem5_tns:appl in 0), product of:
0.53929156 = queryWeight(mditem5_tns:appl), product of:
1.8109303 = idf(docFreq=3, maxDocs=9)
0.2977981 = queryNorm
1.6006513 = (MATCH) fieldWeight(mditem5_tns:appl in 0), product of:
1.4142135 = tf(termFreq(mditem5_tns:appl)=2)
1.8109303 = idf(docFreq=3, maxDocs=9)
0.625 = fieldNorm(field=mditem5_tns, doc=0)
0.7176658 = (MATCH) weight(mditem7_tns:appl^0.8 in 0), product of:
0.43143326 = queryWeight(mditem7_tns:appl^0.8), product of:
0.8 = boost
1.8109303 = idf(docFreq=3, maxDocs=9)
0.2977981 = queryNorm
1.6634457 = (MATCH) fieldWeight(mditem7_tns:appl in 0), product of:
2.4494898 = tf(termFreq(mditem7_tns:appl)=6)
1.8109303 = idf(docFreq=3, maxDocs=9)
0.375 = fieldNorm(field=mditem7_tns, doc=0)
0.2975006 = (MATCH) FunctionQuery(1000.0/(1.0*float(top(rord(lastmodified)))+1000.0)), product of:
0.999001 = 1000.0/(1.0*float(1)+1000.0)
1.0 = boost
0.2977981 = queryNorm
क्या आप विस्तारित कर सकते हैं, या संभवतः एक लिंक प्रदान कर सकते हैं? "स्टेमर" मेरे क्षेत्र को उस चीज़ पर क्यों बढ़ाएगा जो यह * नहीं है? ऐसा लगता है कि प्रतिद्वंद्वी लगता है! :) – JMTyler
जब तक आपके द्वारा लिखा गया पहला "सेब" तब तक "सेब" नहीं माना जाता था? सिर्फ तंग दिखने के बाद, यह समझ में आएगा, अगर "सेब" को अपने मूल रूप में तोड़ दिया जा रहा है। तो - अगर मुझे यह अधिकार है तो मुझे बताएं - आप कह रहे हैं कि अगर मैं "सेब" के सभी संदर्भों को बदलता हूं और केवल "सेब" की खोज करता हूं, तो मुझे परिणाम क्रम में प्राप्त करना चाहिए? – JMTyler
मैंने अपनी पोस्ट संपादित की, इसलिए अब यह स्पष्ट होना चाहिए। स्टेमर "सेब" और "सेब" के लिए रूट फॉर्म के रूप में "सेब" का उपयोग करता है। इसलिए यदि आप स्टेमिंग अक्षम करते हैं तो आपको परिणाम प्राप्त करना चाहिए। आप उन्हें protwords.txt में जोड़कर स्टेम किए गए शब्दों को भी बहिष्कृत कर सकते हैं और schema.xml <फ़िल्टर श्रेणी = "solr.EnglishPorterFilterFactory" संरक्षित = "protwords.txt" /> – Jem