2012-02-10 15 views
7

उतरते जोड़ा साथ आदेश Solr दस्तावेजों मैं खोज परिणामों करना चाहते हैं SOLR से इस तरह का आदेश दिया:दिनांक के आधार पर एक ही स्कोर

सभी दस्तावेज है कि एक ही स्कोर उतरते तिथि जोड़ी गई द्वारा आदेश दिया की जाएगी।

तो जब मैं सोलर से पूछता हूं तो मेरे पास एन दस्तावेज होंगे। इस परिणाम में सेट एक ही स्कोर के साथ दस्तावेजों के समूह होंगे। मैं चाहता हूं कि इस समूह के प्रत्येक समूह को तिथि के आधार पर उतरने का आदेश दिया जाए। Solr 1.4, ord() और rord (के रूप में) कर सकते हैं:

मैं चेतावनी

मैं समारोह प्रश्नों का उपयोग कर, और अधिक वास्तव में rord समारोह http://wiki.apache.org/solr/FunctionQuery#rord का उपयोग कर ऐसा कर सकते हैं, लेकिन के रूप में यह दस्तावेज में कहा गया है की खोज की अतिरिक्त स्मृति उपयोग का कारण बनता है क्योंकि उन्हें शीर्ष स्तर के पाठक पर फ़ील्ड कैश प्रविष्टि का उपयोग करना चाहिए, जबकि सॉर्टिंग और फ़ंक्शन क्वेरी अब सेगमेंट स्तर पर प्रविष्टियों का उपयोग करें। इसलिए ord()/rord() के अलावा, एक अलग फ़ंक्शन क्वेरी को सॉर्ट या उपयोग करना स्मृति उपयोग को दोगुना कर देगा।

इससे अतिरिक्त स्मृति उपयोग होगा।

मेरे पास अन्य विकल्प क्या हैं?

मैं recip(ms(NOW,startTime),1,1,0) का उपयोग करने के बारे में सोच रहा था। क्या यह सबसे अच्छा तरीका है?

यदि मैं व्यंजन और एमएस का उपयोग करता हूं तो क्या कोई नकारात्मक प्रदर्शन प्रभाव पड़ता है?

+0

क्या आप वाकई वाकई एक ही स्कोर के साथ दस्तावेज़ के लिए तारीख के अनुसार आदेश देना चाहते हैं? मेरे अनुभव में यह हमेशा गलत रहा है। हाल ही में आपके द्वारा वर्णित सॉर्टिंग की तुलना में फ़ंक्शन क्वेरी के साथ सोलर स्कोर को प्रभावित करने वाले हालिया दस्तावेज़ों को बेहतर बढ़ावा देना। – javanna

+0

यह एक बहुत अच्छा सवाल है, धन्यवाद। मेरे लिए सबसे महत्वपूर्ण खोज परिणाम वे हैं जो खोज वाक्यांश से कीवर्ड से मेल खाते हैं। इसके बाद यह महत्वपूर्ण है कि दस्तावेज़ कितना नया है। मैं भी इंडेक्स से पुराने दस्तावेजों को निरंतर हटा रहा हूं। – Dorin

+0

मदद करने के लिए खुशी हुई, मेरे उत्तर पर एक नज़र डालें। – javanna

उत्तर

16

आप एक से अधिक SORT शर्तों का उपयोग कर सकते हैं:

एकाधिक तरह orderings, अल्पविराम से अलग किया जा सकता है यानी: प्रकार = + [+] ...

http://wiki.apache.org/solr/CommonQueryParameters

तो, आपके मामले में: सॉर्ट = स्कोर डीईएससी, डेट_डेड डीईएससी

+0

बहुत स्मार्ट। धन्यवाद :) – Dorin

5

चूंकि आपके प्रश्न कहते हैं:

सभी दस्तावेज जिनके पास एक ही स्कोर है, उन्हें अवरुद्ध करने का आदेश दिया जाएगा।

आपके द्वारा प्राप्त अन्य उत्तर सही है।

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

इसलिए मैं स्कोर द्वारा क्रमबद्ध नहीं करता और फिर कुछ और नहीं, क्योंकि भविष्यवाणी करना मुश्किल है कि आपके पास अलग-अलग दस्तावेज़ों के लिए एक ही स्कोर होगा। मैं व्यक्तिगत रूप से केवल score पर सॉर्ट करता हूं और हाल के दस्तावेज़ों को बढ़ावा देने के लिए फ़ंक्शन का उपयोग करता हूं। आप solr wiki पर एक अच्छा उदाहरण पा सकते हैं, वहां इस्तेमाल किया गया फ़ंक्शन recip(ms(NOW,date_field),3.16e-11,1,1) है।

यदि आप प्रदर्शन के लिए चिंतित हैं तो आप इंडेक्स टाइम बूस्टिंग का प्रयास कर सकते हैं, जो क्वेरी समय बढ़ाने से तेज होना चाहिए। here देखें।

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