2013-06-26 4 views
5

Ich mag würde ein Skript verwenden, um die folgenden Funktionen ausführen:Typumwandlung in Elasticsearch Skripte

{ 
    "query": { 
    "match_all": {} 
}, 
    "facets": { 
    "user_facet": { 
     "terms": { 
     "field": "user_id", 
     "script": "term + \"_\" + _source.code" 
     } 
    } 
    } 
} 

Dies ist ähnlich wie die Antwort auf diese Frage gegeben: elastic search double facet

Das einzige Problem, das ich habe ist Meine user_id- und code-Felder sind lange Typen anstatt Strings. Gibt es eine Möglichkeit, sie zu Strings zu machen, damit sie mit dem Skript kombiniert werden können?

Der besondere Fehler ich dies bin immer:

nested: ClassCastException[java.lang.String cannot be cast to java.lang.Number]; 
+0

Ich sehe nicht aus Ihrem Beispiel, wie eine lange user_id jemals mit dem Begriff übereinstimmen kann, den Sie im Skript berechnen, was ein Stich ist, selbst wenn Sie ihn konvertiert haben. Ich muss etwas verpassen. – Phil

+0

Ein Gedanke zu versuchen ... Vielleicht würde die Verwendung von 'doc ['user_id']' für das Feld funktionieren? – Phil

+0

Sie können Java auch in einem MVEL-Skript verwenden. Ich würde sie dann einfach mit Java in Strings konvertieren;) – javanna

Antwort

3

Dies könnte lächerlich klingen, aber ich hatte das gleiche Problem, und die Art, wie ich es (für eine sehr ähnliche Probleme) fixiert war das "fallen zu lassen Feld“Spezifikation, so dass es wie folgt aussieht:

{ 
    "query": { 
    "match_all": {} 
}, 
    "facets": { 
    "user_facet": { 
     "terms": { 
     "script": "term + \"_\" + _source.code" 
     } 
    } 
    } 
} 

ich denke, es wurde versucht, die Ausgabe der konvertieren‚script‘Ausführung in die Art des Feldes zurück, die Klasse Guss Ausnahme verursacht.