2013-04-13 1 views
4

Utilisation de Django & Haystack avec ElasticSearch.AttributeError: l'objet 'module' n'a pas d'attribut 'ElasticSearchError': Utilisation de Haystack Elasticsearch

Après avoir installé botte de foin et ES, et reconstruction Index

./manage.py rebuild_index 

AVERTISSEMENT: Cela supprimera irréparablement tout de votre index de recherche dans le cadre « par défaut ». Vos choix après cela sont à restaurer à partir des sauvegardes ou reconstruire via la commande rebuild_index. Etes-vous sûr de vouloir continuer? [Y/N] y

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' 

index de mise à jour a le même problème

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

index clair fonctionne très bien que (probablement parce qu'il n'y a pas d'index)

./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 

Suppression de tous les documents de votre index parce que vous l'avez dit. Tous les documents ont été supprimés.

Versions

django-botte de foin == 2.0.0-beta
pyelasticsearch == 0,5
ElasticSearch == 0.20.6

localhost: 9200 dit:

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

Paramètres de foin:

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 

Toute aide - pourquoi je reçois une erreur?

+0

pouvez-vous coller une version coupée de vos paramètres et vos modèles de recherche de botte de foin, s'il vous plaît? –

Répondre

2

Résolu!

Après mise au point du procédé utilisant pdb

./manage.py rebuild_index 

A la ligne 222 - in/botte de foin/backend/elasticsearch_backend.py

Changé

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

Pour

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

J'ai découvert l'erreur de base est ce

'ElasticSearch' object has no attribute 'from_python'. 

Pour que j'ai trouvé la solution ici - https://github.com/toastdriven/django-haystack/issues/514#issuecomment-4058230

La version de pyelasticsearch j'utilisais était de http://github.com/rhec/pyelasticsearch,

J'installé pyelasticsearch à partir d'une fourchette - http://github.com/toastdriven/pyelasticsearch en utilisant:

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

et qui ont fixé ce & indice a été construit!

+0

Je suis confronté au même problème. J'ai initialement installé pyelasticsearch à travers pip. Je l'ai enlevé et ensuite installé à partir du repo de toastdriven. Maintenant, je cours: "AttributeError: l'objet 'module' n'a pas d'attribut 'ElasticHttpError'". Des idées ici? – Chris

+0

Hey @Chris, avez-vous utilisé exactement cela - 'pip install --upgrade git + https: // github.com/toastdriven/pyelasticsearch.git @ 3bfe1a90eab6c2dfb0989047212f4bc9fb814803 # oeuf = pyelasticsearch'. C'est une version très spécifique qui a fonctionné pour moi. Ce qui se passe est pyelasticsearch qui est installé, n'est pas accessible ou ne correspond pas à la version requise par ElasticSearch. Pouvez-vous partager la version de: django-haystack pyelasticsearch elastiquerecherche – flyankur

Questions connexes