2013-06-26 8 views
5

Chciałbym użyć skryptu, aby wykonać następujące czynności:Typ konwersji skryptów elasticsearch

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

ta jest podobna do odpowiedzi udzielonej w tej kwestii: elastic search double facet

Jedyny problem mam jest Moje pola user_id i code są długimi typami, a nie ciągami. Czy istnieje sposób na ich stworzenie, aby można je było połączyć ze scenariuszem?

Konkretny błąd otrzymuję to:

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

Nie widzę z twojego przykładu, jak długi user_id może kiedykolwiek pasować do terminu, który obliczasz w skrypcie, który jest żądłem, nawet jeśli go przekonwertowałeś. Muszę czegoś przegapić. – Phil

+0

Jedna myśl, by spróbować ... Może użycie "doc ['user_id']" działałoby? – Phil

+0

Możesz również używać Javy w skrypcie mvel. Po prostu zamieniłbym je na Strings używając java;) – javanna

Odpowiedz

3

Może to wydawać śmieszne, ale miałem ten sam problem, i drogę Naprawiłem go (na bardzo podobnych problemów) było upuść " pole”specyfikacja tak, że wygląda tak:

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

myślę, że starał się przekształcić wyjście«skrypt»wykonanie z powrotem do typu pola, powodując wyjątku klasy elementami plastikowymi.