2013-06-26 12 views
5

Vorrei utilizzare uno script per effettuare le seguenti operazioni:Tipo di conversione in script elasticsearch

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

Questo è simile alla risposta data in questa domanda: elastic search double facet

L'unico problema che ho è i miei campi user_id e code sono di tipo long invece di stringhe. C'è un modo per renderli stringhe in modo che possano essere combinati con la sceneggiatura?

L'errore particolare sto ottenendo è questo:

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

Non vedo dal vostro esempio come un utente_id lungo possa mai eguagliare il termine che si sta calcolando nello script, che è un pungiglione, anche se lo si è convertito. Devo mancare qualcosa. – Phil

+0

Un pensiero da provare ... Forse l'uso di 'doc ['user_id']' per il campo funzionerebbe? – Phil

+0

Puoi anche usare Java all'interno di uno script Mvel. Vorrei semplicemente convertirli in stringhe usando java poi;) – javanna

risposta

3

Questo potrebbe sembrare ridicolo, ma ho avuto lo stesso problema, e il modo in cui ho riparato (per problemi molto simili) è stato quello di far cadere il " campo" specifica in modo che assomiglia a questo:

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

penso che stava cercando di convertire l'uscita della 'esecuzione dello script' di nuovo nel tipo di campo, causando l'eccezione di classe cast.