2009-09-28 25 views
8

के निकटतम है। मेरे पास एक सौर उदाहरण है जिसमें दस्तावेज़ हैं जिनमें पिछले महीने से लेकर एक वर्ष तक 'स्टार्टटाइम' फ़ील्ड है। मैं उन दस्तावेजों के स्कोर को बढ़ावा देने के लिए एक बूस्ट क्वेरी/फ़ंक्शन जोड़ना चाहता हूं जिनके स्टार्टटाइम फ़ील्ड वर्तमान समय के करीब है।एसओएलआर - दस्तावेजों के स्कोर को बढ़ाने के लिए बूस्ट फ़ंक्शन (बीएफ) जिसका दिनांक अब

अब तक मैंने कई उदाहरण देखे हैं जो नए हैं जो दस्तावेजों को बढ़ावा देने के लिए रॉर्ड का उपयोग करते हैं लेकिन मैंने कभी ऐसा कुछ नहीं देखा है।

क्या कोई मुझे बता सकता है कि कृपया इसे कैसे करें?

धन्यवाद

+0

क्या आपने सोलर-उपयोगकर्ता से पूछने की कोशिश की? –

उत्तर

15

आप Solr पर 1.4 + रहे हैं, तो आप रीसेंसी के आधार को बढ़ाने के लिए समारोह प्रश्नों में "एमएस" समारोह, और मानक, पाठ्यपुस्तक दृष्टिकोण के लिए उपयोग किया है:

recip(ms(NOW,startTime),3.16e-11,1,1) 

एमएस अपने दो तर्कों के बीच मिलीसेकंड की संख्या देता है। पूरी तरह से अभिव्यक्ति 1 साल पहले डॉक्स के लिए स्कोर द्वारा बढ़ाती है, 1 साल पहले डॉक्स के लिए 1/2 द्वारा, 2 साल पहले डॉक्स के लिए 1/3 तक .. (http://wiki.apache.org/solr/FunctionQuery#Date_Boosting देखें, क्योंकि शॉन टिम ने बताया।)

आपके मामले में आप भविष्य में दिनांकित डॉक्स है, और उन लोगों के ऊपर समारोह से एक नकारात्मक स्कोर सौंपा जाएगा, तो आप शायद एक निरपेक्ष मान में फेंक करना चाहते हैं, इस तरह:

recip(abs(ms(NOW,startTime)),3.16e-11,1,1) 

abs (एमएस (अब, स्टार्टटाइम)) स्टार्टटाइम के बीच # मिलीसेकंड देगा और अब, गैर-नकारात्मक होने की गारंटी है।

यह एक अच्छी शुरुआत होगी। यदि आप चाहते हैं, तो आप 3.16e-11 को ट्विक कर सकते हैं यदि यह बहुत आक्रामक है या पर्याप्त आक्रामक नहीं है।

टेंगेंशियल रूप से, एमएस फ़ंक्शन केवल ट्रीडेट श्रेणी के आधार पर फ़ील्ड पर काम करेगा, न कि क्लासिक डेट और लेगेसीडेट क्लास। यदि आपकी schema.xml उदाहरण 1.4 पर Solr 1.4 के लिए आधारित थी, तो आपका दिनांक फ़ील्ड शायद पहले से ही सही प्रारूप में है।

+1

यह एक अच्छा जवाब है। मुझे एक और मिला जो यह भी बताता है कि वे 3.16e-11 का उपयोग क्यों करते हैं और अपनी आवश्यकताओं के अनुरूप इसे कैसे बदल सकते हैं: http://stackoverflow.com/a/22213417/241367 – thekingoftruth

+0

यदि यह काम नहीं करता है तो आप कोशिश कर सकते हैं: {! बूस्ट बी = रेसिपी (रॉर्ड (कंटेंटडेट), 1,1000,1000)} –

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