2013-01-23 15 views
6

के लिए आवश्यक 'content_auto` लाइन जोड़ने के बाद विफल रहता है (haystack.exceptions.SearchFieldError) मैं एक शब्द के केवल एक हिस्से के लिए उपज करने के परिणामों को लागू करने की कोशिश कर रहा हूं (जिसे autocomplete कहा जाता है) Haystack दस्तावेज़ अगर मैं गलत नहीं हूँ)।Django-haystack: reuild_index स्वत: पूर्ण

उदाहरण:

खोजें "gol"

परिणाम "goldfish"

मैं क्या कोशिश की है?

रूप step 1 of the docs में पूछा मैंने किया था, मैं अपने सूचकांक कक्षा में निम्न पंक्ति कहा:

content_auto = indexes.EdgeNgramField(model_attr='content') 

फिर python manage.py rebuild_index किया था।

सूचकांक पुनर्निर्माण लेकिन एक त्रुटिhaystack.exceptions.SearchFieldError: The model '<Person: Reginald>' does not have a model_attr 'content'. उत्पादित Reginald मेरी अनुक्रमित तालिका में पहले प्रवेश और Person मॉडल अनुक्रणित होने जा रहा है।

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

मैं Whoosh 2.4.1, Django-haystack 1.2.7 और Django 1.4 का उपयोग कर रहा हूं।

+0

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन क्या आपने कभी यह पता लगा था? –

+0

नहीं। हालांकि मैंने लंबे समय तक समस्या पर काम नहीं किया। – Bentley4

उत्तर

3

तो यह है कि कैसे मैं अब इस अधिकार को सुलझाने कर रहा हूँ है।

बजाय:

content_auto = indexes.EdgeNgramField(model_attr='content')

उपयोग:

content_auto = indexes.EdgeNgramField(use_template=True)

फिर आप इन के लिए एक टेम्पलेट बना सकते हैं। उदाहरण के लिए, मेरे catalog ऐप में ItemIndex है, जहां मैं name और description खोजना चाहता हूं।

{{ object.name }} 
{{ object.description }} 

यह कार्य करने के लिए मैं इसे कैसे करना चाहते हैं लगता है: तो, मैं item_content_auto.txt बुलाया templates/search/indexes/catalog/ में एक फ़ाइल है, जो इसे में निम्नलिखित है बनाया है। 'content' की तुलना में थोड़ा अधिक कठिन, लेकिन यह पर्याप्त होना चाहिए।

0

model_attr संदर्भ के लिए एक मौजूदा मॉडल विशेषता, प्रतिदेय या संबंध प्रयोग किया जाता है:

http://django-haystack.readthedocs.org/en/v1.2.7/searchfield_api.html#SearchField.model_attr http://django-haystack.readthedocs.org/en/v2.1.0/searchfield_api.html#model-attr

+0

हां, लेकिन इसे देखें: http://django-haystack.readthedocs.org/en/v2.1.0/autocomplete.html वे कहते हैं कि आपको केवल 'सामग्री' का उपयोग करने की आवश्यकता है, लेकिन यह काम नहीं करता है। उन्होंने इसे बदल दिया होगा और दस्तावेज़ों को अपडेट नहीं किया होगा। –

1

यहाँ संदर्भ के लिए एक अद्यतन उदाहरण है (here देखें):

#search_indexes.py 
class Book(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.EdgeNgramField(document=True, use_template=True) 

    def get_model(self): 
     return Book 

#template 
{{object.name}} 

#query 
SearchQuerySet().autocomplete(text=my_query) 
संबंधित मुद्दे