2014-06-18 2 views
1

나는 Elasticsearch 서버에 연결된 Django (마스터 브랜치)와 Haystack (마스터 브랜치)을 사용하고 있습니다. Python 버전은 3.4입니다.Haystack with Elasticsearch 검색 색인 생성을 거부합니다.

는 검색 인덱스 클래스는 다음과 같습니다

class PageIndex(indexes.SearchIndex, indexes.Indexable): 
    text = fields.EdgeNgramField(document=True) 
    name = fields.EdgeNgramField(model_attr='name', boost=2) 
    tags = fields.EdgeNgramField(model_attr='tags', boost=1.5) 
    description = fields.EdgeNgramField(model_attr='description_summary', boost=0.9) 

    def get_model(self): 
     return Page 

    def index_queryset(self, using=None): 
     return self.get_model().objects.filter(created__lte=datetime.datetime.now()) 

내가 인덱스를 만들려고, 나는 다음과 같은 오류 얻을 :

> python manage.py update_index                                                            Indexing 7 communities 
PUT /haystack [status:400 request:0.013s] 
ERROR:root:Error updating page using default 
Traceback (most recent call last): 
    File "/env/lib/python3.4/site-packages/haystack/management/commands/update_index.py", line 221, in handle_label 
    self.update_backend(label, using) 
    File "/env/lib/python3.4/site-packages/haystack/management/commands/update_index.py", line 266, in update_backend 
    do_update(backend, index, qs, start, end, total, self.verbosity) 
    File "/env/lib/python3.4/site-packages/haystack/management/commands/update_index.py", line 89, in do_update 
    backend.update(index, current_qs) 
    File "/env/lib/python3.4/site-packages/haystack/backends/elasticsearch_backend.py", line 158, in update 
    prepped_data = index.full_prepare(obj) 
    File "/env/lib/python3.4/site-packages/haystack/indexes.py", line 204, in full_prepare 
    self.prepared_data = self.prepare(obj) 
    File "/env/lib/python3.4/site-packages/haystack/indexes.py", line 187, in prepare 
    ID: get_identifier(obj), 
    File "/env/lib/python3.4/site-packages/haystack/utils/__init__.py", line 33, in default_get_identifier 
    obj_or_string._meta.module_name, 
AttributeError: 'Options' object has no attribute 'module_name' 

답변

2

당신이 오류 메시지를 수신하는 장고 때문에> = 1.6 Options.module_name이 .model_name으로 변경되었습니다 (이것은 widley 학대 된 비공개 API입니다). haystack 코드를 변경하기 만하면됩니다. module_name

0

모델에 "이름"이라는 속성이 있어야합니다.

models.py

class Page(models.Model): 
    name = models.CharField(max_length=20) 

search_index.py

class PageIndex(indexes.SearchIndex, indexes.Indexable): 
    name = fields.EdgeNgramField(model_attr='name', boost=2) 
관련 문제