2013-04-13 5 views
4

Использование Django & Хейстак с ElasticSearch.AttributeError: объект 'module' не имеет атрибута 'ElasticSearchError': Использование Haystack Elasticsearch

После установки стог и ES, и Перестроение индекса

./manage.py rebuild_index 

ВНИМАНИЕ: Это необратимо удалить все из вашего поискового индекса в связи «по умолчанию». После этого вы можете восстановить из резервных копий или перестроить команду rebuild_index. Вы действительно хотите продолжить? [Y/N] у

Removing all documents from your index because you said so. 
All documents removed. 
Indexing 1039 <django.utils.functional.__proxy__ object at 0x10ca3ded0>. 

AttributeError: 'module' object has no attribute 'ElasticSearchError' 

индекс Обновление имеет ту же проблему

/manage.py update_index 
Indexing 1039 <django.utils.functional.__proxy__ object at 0x10ea49d90>. 
AttributeError: 'module' object has no attribute 'ElasticSearchError' 

Clear индекс работает нормально, хотя (вероятно потому, что нет индекса)

./manage.py clear_index 

WARNING: This will irreparably remove EVERYTHING from your search index in connection 'default'. 
Your choices after this are to restore from backups or rebuild via the `rebuild_index` command. 
Are you sure you wish to continue? [y/N] y 

Удаление всех документов из ваш индекс, потому что вы так сказали. Все документы удалены.

Версии

Джанго-стог == 2.0.0 бета-
pyelasticsearch == 0,5
elasticsearch == 0.20.6

локальный: 9200 говорит:

{ 
    "ok" : true, 
    "status" : 200, 
    "name" : "Jigsaw", 
    "version" : { 
    "number" : "0.20.6", 
    "snapshot_build" : false 
    }, 
    "tagline" : "You Know, for Search" 
} 

Уставки сена:

HAYSTACK_CONNECTIONS = { 
    'default': { 
     'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine', 
     'URL': 'http://127.0.0.1:9200/', 
     'INDEX_NAME': 'haystack', 
    }, 
} 

search_indexes.py:

import datetime 
import haystack 
from haystack import indexes 
from app.models import City 

class CityIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    name = indexes.CharField(model_attr='name') 
    state = indexes.CharField(model_attr='state') 
    country = indexes.CharField(model_attr='country') 
    lat = indexes.FloatField(model_attr='latitude') 
    lon = indexes.FloatField(model_attr='longitude') 
    alt = indexes.FloatField(model_attr='altitude') 
    pop = indexes.IntegerField(model_attr='population') 

    def get_model(self): 
     return City 

Любая помощь - почему я получаю сообщение об ошибке?

+0

Вы могли бы вставить устаревшую версию своих настроек и ваши поисковые модели сена, пожалуйста? –

ответ

2

Решено!

После отладки процесса с использованием PDB

./manage.py rebuild_index 

В строке 222 - в/стоге/бэкэндом/elasticsearch_backend.ру

Изменено

except (requests.RequestException, pyelasticsearch.ElasticSearchError), e: 

Для

# except (requests.RequestException, pyelasticsearch.ElasticSearchError), e: 
except Exception as inst: 
    import pdb; pdb.set_trace() 

Я узнал, что ошибка керн это

'ElasticSearch' object has no attribute 'from_python'. 

На что я нашел решение здесь - https://github.com/toastdriven/django-haystack/issues/514#issuecomment-4058230

Версия pyelasticsearch я использовал был из http://github.com/rhec/pyelasticsearch,

Так я установил pyelasticsearch с вилкой - http://github.com/toastdriven/pyelasticsearch с помощью:

pip install --upgrade git+https://github.com/toastdriven/[email protected]#egg=pyelasticsearch 

и что установил его & индекс был построен!

+0

Я столкнулся с той же проблемой. Первоначально я установил pyelasticsearch через pip. Я удалил его, а затем установил из репозитория toastdriven. Теперь я сталкиваюсь: «Объект AttributeError: 'module' не имеет атрибута« ElasticHttpError ». Есть идеи? – Chris

+0

Привет @Chris, Вы точно использовали это - 'pip install --upgrade git + https: // github.com/toastdriven/pyelasticsearch.git @ 3bfe1a90eab6c2dfb0989047212f4bc9fb814803 # egg = pyelasticsearch'. Это очень конкретная версия, которая работала для меня. Происходит то, что установлен pyelasticsearch, либо недоступен, либо не соответствует версии, требуемой ElasticSearch. Вы можете поделиться версией: django-haystack pyelasticsearch elasticsearch – flyankur