/ / AttributeError: l'oggetto 'module' non ha attributo 'ElasticSearchError': Using Haystack Elasticsearch - django, elasticsearch, django-haystack, attributeerror

AttributeError: l'oggetto 'module' non ha attributo 'ElasticSearchError': Using Haystack Elasticsearch - django, elasticsearch, django-haystack, attributeerror

Utilizzo di Django e Haystack con ElasticSearch.

Dopo aver installato pagliaio e ES, e ricostruire indice

./manage.py rebuild_index

ATTENZIONE: Questo rimuoverà irreparabilmente TUTTO dal tuo indice di ricerca in connessione "default". Le tue scelte dopo questo sono per ripristinare dai backup o ricostruire tramite il rebuild_index comando. Sei sicuro di voler continuare? [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"

L'aggiornamento dell'indice ha lo stesso problema

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

L'indice chiaro funziona bene (probabilmente perché non c'è un indice)

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

Rimozione di tutti i documenti dal tuo indice perché hai detto così. Tutti i documenti rimossi

versioni

django-pagliaio == 2.0.0-beta
== pyelasticsearch 0.5
elasticsearch == 0.20.6

localhost: 9200 dice:

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

Impostazioni del pagliaio:

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

Qualsiasi aiuto: perché sto ricevendo un errore?

risposte:

2 per risposta № 1

Risolto!

Dopo il debug del processo usando pdb

./manage.py rebuild_index

Alla riga 222 - in /haystack/backend/elasticsearch_backend.py

Cambiato

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

A

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

Ho scoperto che l'errore principale era questo

"ElasticSearch" object has no attribute "from_python".

A cui ho trovato la soluzione qui - https://github.com/toastdriven/django-haystack/issues/514#issuecomment-4058230

La versione di pyelasticsearch che stavo usando proveniva da http://github.com/rhec/pyelasticsearch,

Così ho installato pyelasticsearch da una forchetta - http://github.com/toastdriven/pyelasticsearch usando:

pip install --upgrade  git+https://github.com/toastdriven/pyelasticsearch.git@3bfe1a90eab6c2dfb0989047212f4bc9fb814803#egg=pyelasticsearch

e che l'ha riparato e l'indice è stato costruito!