2013-01-23 27 views
6

Tôi đang cố gắng thực hiện kết quả lãi suất cho tìm kiếm chỉ một phần của từ (được gọi là autocomplete theo Haystack tài liệu nếu tôi không nhầm lẫn).Django-haystack: rebuild_index không thành công (haystack.exceptions.SearchFieldError) sau khi thêm dòng `content_auto` cần thiết để tự động hoàn thành

Ví dụ:

Tìm kiếm "gol"

quả "goldfish"

Tôi đã cố gắng gì?

tôi đã làm như hỏi trong step 1 of the docs, tôi đã thêm dòng sau trong lớp Index của tôi:

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

Sau đó đã làm python manage.py rebuild_index.

Xây dựng lại các chỉ số tuy nhiên sản xuất một lỗihaystack.exceptions.SearchFieldError: The model '<Person: Reginald>' does not have a model_attr 'content'. Với Reginald là entry đầu tiên trong bảng chỉ mục của tôi và Person là mô hình tôi lập chỉ mục.

Hiện tại mô hình của tôi không có trường được gọi là content nhưng như được hiển thị trong tài liệu, nó không cần phải có trường như vậy.

Tôi đang sử dụng Whoosh 2.4.1, Django-haystack 1.2.7Django 1.4.

+0

Tôi biết đây là một câu hỏi cũ, nhưng bạn đã bao giờ con số này ra? –

+0

Không. Tôi đã không làm việc về vấn đề này từ lâu. – Bentley4

Trả lời

3

Vì vậy, đây là cách tôi giải quyết này ngay bây giờ.

Thay vì:

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

Sử dụng:

content_auto = indexes.EdgeNgramField(use_template=True)

Sau đó, bạn có thể tạo ra một khuôn mẫu cho các. Ví dụ: tôi có một số ItemIndex trong ứng dụng catalog của mình, nơi tôi muốn tìm kiếm namedescription. Vì vậy, tôi đã thực hiện một tập tin trong templates/search/indexes/catalog/ gọi item_content_auto.txt, trong đó có những điều sau đây trong nó:

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

Điều này có vẻ như hoạt động như thế nào tôi muốn nó. Một chút tẻ nhạt hơn nếu 'content' làm việc, nhưng nó là đủ.

0

model_attr được sử dụng để tham chiếu đến một thuộc tính mô hình hiện có, có thể được gọi hay liên quan:

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

Có, nhưng hãy xem điều này: http://django-haystack.readthedocs.org/en/v2.1.0/autocomplete.html Họ nói rằng bạn chỉ cần sử dụng 'nội dung', nhưng điều đó không hiệu quả. Họ phải thay đổi nó và không cập nhật tài liệu. –

1

Dưới đây là một ví dụ được cập nhật để tham khảo (xem 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) 
Các vấn đề liên quan