2010-06-08 19 views
8

मैं अपनी साइट पर एक खोज पेज के लिए django-haystack का उपयोग कर रहा हूँ। मैं मूल रूप से किया जाता हूं, लेकिन ऑर्डरिंग से काफी खुश नहीं हूं और यह सुनिश्चित नहीं करता कि कैसे हैस्टैक तय करता है कि सबकुछ कैसे ऑर्डर करें।django-haystack ऑर्डरिंग - मैं इसे कैसे संभाल सकता हूं?

मुझे पता है कि मैं order_by का उपयोग कर SearchQuerySet पर सवारी कर सकता हूं लेकिन यह पूरी तरह से सवारी करता है। आइए मान लें कि मैं स्टॉक (बूलेनफ़िल्ल्ड) द्वारा खोज को ऑर्डर करने के लिए मजबूर करना चाहता हूं, ताकि स्टॉक में मौजूद उत्पादों को शीर्ष पर दिखाया जा सके, लेकिन फिर सामान्य रूप से बाकी सब कुछ करें। मैं उसको कैसे करू?

मैंने order_by('-in_stock', 'content') आकृति सामग्री को डिफ़ॉल्ट रूप से उपयोग करने की कोशिश की, लेकिन यह बहुत अलग परिणाम उत्पन्न करता है अगर मैं इसे अपने स्वयं के आदेश के लिए छोड़ देता हूं।

इस मामले पर किसी भी इनपुट के लिए धन्यवाद!

उत्तर

18

आप in_stock के साथ अपने search_indexes.py में एक सूचकांक होना चाहिए:

class YourModel(indexes.SearchIndex): 
    in_stock = indexes.BooleanField(model_attr='model_in_stock') 

और अपने यूआरएल में:

sqs = SearchQuerySet().models(YourModel).order_by('-in_stock', 'score') # score is a field of haystack 

इस तरह, आप पहली बार परिणाम बताते हैं कि अगर वे स्टॉक में हैं और फिर स्कोर द्वारा!

+0

क्या होगा यदि मेरे कस्टम फ़ील्ड में समान नाम 'स्कोर' होता है? – eugene

+0

क्या यह संभव है कि हेस्टैक का वर्तमान संस्करण स्कोर द्वारा ऑर्डर करने का समर्थन नहीं करता है? मुझे 'KeyError:' score 'नामक कोई फ़ील्ड नहीं है – maciek

+0

मैंने अभी दस्तावेज़ों की जांच की है और इसे अभी भी काम करना चाहिए, क्या आप मुझे http://dpaste.com के साथ अपना कोड थोड़ा और दिखा सकते हैं? – diegueus9

2

एक चार फ़ील्ड को सॉर्ट करने के लिए, इसे स्टेरियल बनाएं, लेकिन अनुक्रमित नहीं।

sorted_name = indexes.CharField(indexed=False, stored=True) 

यदि आपको इसे क्रमबद्ध और अनुक्रमित करने की आवश्यकता है, तो खोज इंडेक्स में दो अलग-अलग फ़ील्ड का उपयोग करें।

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