2016-08-25 2 views
0

Ich habe ein Problem, bei dem Elasticsearch auf Amazon Elasticsearch Service (v1.5 und v2. 3) hält den folgenden Fehler zurückgegeben:ClassCastException [java.lang.Long kann nicht in java.lang.Double] in Elasticsearch umgewandelt werden, wenn versucht wird, nach einem zusätzlichen Feld zu sortieren

{u'status': 503, u'error': u'ReduceSearchPhaseException[Failed to execute phase [query], [reduce] ]; nested: ClassCastException[java.lang.Long cannot be cast to java.lang.Double]; '} 

Hier ist die Elasticsearch Abfrage in python:

def search_es(q, indices): 
    es = get_search_client() 
    search_body = { 
     "sort": [ {'importance_score': 'desc'}, '_score', ], 
     "query": { 
      "match": { 
       "display_name": q 
      } 
     } 
    } 
    try: 
     res = es.search(index=indices, body=search_body) 
    except TransportError as e: 
     assert False, e.info 

    data = [] 
    for hit in res['hits']['hits']: 
     data.append(hit['_source']) 
    return data 

der obige Code perfekt läuft, wenn ich ein Elasticsearch docker Behälter haben lokal ausgeführt. In unserer Testumgebung mit AWS-Version von ES schlägt es jedoch irgendwie fehl.

Wenn ich den fett gedruckten Teil hier entfernen, wird die Abfrage ohne Fehler (wenn auch mit unerwünschter Ordnung):

"sort": [{ 'importance_score': 'desc'}, '_score',] ,

Das führt mich zu der Annahme, dass etwas mit dieser Punktzahl ist. WichtigerScore ist nur ein normaler Schlüssel, der vor der Indizierung berechnet wird, und er hat einen maximalen Wert von 19. Ich habe Variationen davon versucht, indem ich ihn als float, int und lange vor der Indexierung geworfen habe. Alle arbeiten lokal, geben aber den gleichen Fehler bei Test env zurück.

Das Upgrade auf ES v2.3 ändert die Struktur der Fehlermeldung, gibt aber im Wesentlichen den gleichen Fehler zurück.

Was könnte das verursachen? Danke für die Hilfe.

+0

Wie lautet die Zuordnung des Felds 'Wichtigkeit_Score'? Haben Sie andere Typen, die dasselbe Feld haben? Und was ist der Fehler in ES 2.3? –

+0

Entschuldigung für die Verzögerung bei der Beantwortung dieser Frage, aber das Problem war, dass "lancement_score" auf verschiedene Arten basierend auf dem Dokument automatisch zugeordnet wurde. Durch explizites Mapping wurde alles unterbunden, um das Problem zu lösen. – ShravanP

Antwort

0

Es stellte sich heraus, dass die Wichtigkeitsbewertung für verschiedene Dokumenttypen dynamisch verschiedenen primitiven Typen zugeordnet wurde. Durch das Erzwingen der Verwendung aller Zuordnungen für "groory_score" wurde das Problem behoben.

Verwandte Themen