2012-04-11 10 views
2

ich django bin mit 1.4, django-Heuhaufen 2.0 und Elasticsearch 0.19.1 Ich habe einen Suchindex wie folgt aus:Django Heuhaufen, um nach Entfernung von Elasticsearch Backend, kein geo_point Feldfehler

from haystack import indexes 
from core.models import Project 

class ProjectIndex(indexes.RealTimeSearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    location = indexes.LocationField(model_attr='get_location') 

    def get_model(self): 
     return Project 

und Projektmodell wie folgt aus:

class Project(BaseModel): 
    name = models.CharField(_(u'Proje Adı'), max_length=50) 
    latitude = models.FloatField() 
    longitude = models.FloatField() 

    def get_location(self): 
     # Remember, longitude FIRST! 
     return Point(self.longitude, self.latitude) 

Deshalb möchte ich Projektobjekte nach Entfernung bestimmten Koordinaten abzufragen von nah bis fern:

.... 
location = Point(project.longitude, project.latitude) 
projects = SearchQuerySet().models(Project).distance('location', location).order_by('distance') 

Aber ich diesen Fehler:

fehlgeschlagen Elasticsearch mit ':': abzufragen Nicht-OK-Statuscode zurückgegeben (500) u'SearchPhaseExecutionException enthält [Es konnte keine Phase auszuführen [Abfrage], Totalausfall; shardFailures {[jmUkmHkDTX-bo9DhFJdtSw] [skp] [2]: AbfragePhaseExecutionException [[skp] [2]: Abfrage [gefiltert (ConstantScore (NotDeleted (cache (QueryWrapperFilter (django_ct: core.project))))) -> cache (_type : modelresult)], aus [0], size [10], sort []: Abfrage fehlgeschlagen [Fehler beim Ausführen der Hauptabfrage]]; verschachtelt: ElasticSearchIllegalArgumentException [field [location] ist kein geo_point-Feld]; } {[jmUkmHkDTX-bo9DhFJdtSw] [skp] [4]: ​​QueryPhaseExecutionException [[skp] [4]: ​​Abfrage [gefiltert (ConstantScore (NotDeleted (cache (QueryWrapperFilter (django_ct: core.project))))) -> cache (_type : modelresult)], aus [0], size [10], sort []: Abfrage fehlgeschlagen [Fehler beim Ausführen der Hauptabfrage]]; verschachtelt: ElasticSearchIllegalArgumentException [field [location] ist kein geo_point-Feld]; }] '.

Was ist los?

Antwort

4

Wahrscheinlich ist der "Typ" -Aspekt Ihres Standortfelds falsch zugeordnet. Dies könnte durch die API verursacht werden, die Sie für die Zuordnung verwendet haben. Einige Aspekte in einem Mapping können geändert werden, nicht jedoch der "Typ" -Aspekt eines Felds. Daher müssen Sie ein neues Mapping mit dem Standortfeld im Typ geo_point erstellen und Ihre Dokumente neu indizieren.

+1

Ich bereinigte meinen Index und erstellte Schema manuell erklärt in http://www.elasticsearch.org/guide/reference/api/admin-indices-put-mapping Dann habe ich index mit 'python manage.py update_index' und dann aktualisiert Problem ist weg. Vielen Dank! –

+0

PUT Mapping Docs Link im obigen Kommentar jetzt 404s (2 Jahre später). Aktueller Link ist: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-put-mapping.html –

Verwandte Themen