2016-02-04 2 views
5

Sto tentando di inviare un JSON a elasticSearch. Ho provato con Postman e SoapUI i dati sonoErrore ElasticSearch durante l'invio di dati

[{"column1": "abc", "column2": "def", "column3": "dghi", "column4": "jkl", "column5": "mno"}, {"column1": "pqr", "column2": "stu", "column3": "vwx", "column4": "", "column5": ""}] 

sto ottenendo il seguente errore schiena

{ 
    "error": { 
    "root_cause": [ 
     { 
     "type": "mapper_parsing_exception", 
     "reason": "failed to parse" 
     } 
    ], 
    "type": "mapper_parsing_exception", 
    "reason": "failed to parse", 
    "caused_by": { 
     "type": "not_x_content_exception", 
     "reason": "Compressor detection can only be called on some xcontent bytes or compressed xcontent bytes" 
    } 
    }, 
    "status": 400 
} 

Ma quando inserisco un singolo array JSON Vale a dire

{"column1": "abc", "column2": "def", "column3": "dghi", "column4": "jkl", "column5": "mno"} 

Quindi funziona correttamente. Sono nuovo di ElasticSearch, quindi non sono sicuro di cosa sta andando storto.

risposta

5

Provare prima utilizzando le parentesi graffe, quindi denominare l'array. Si chiama JSON per un motivo, quindi provalo e vedi se funziona.

Ad esempio:

{root:[1, 2, 3, 4, 5]} 

potrebbe funzionare perché è contenuta all'interno di un oggetto.

Ancora meglio; mentre stavo sperimentando con JSON.stringify();, ho trovato che ripari gli array a JSON in questo modo:

{1, 2, 3, 4, 5} 
+1

grazie per la risposta, ma non sicuro di quello che vuoi dire – noobEngineer

+9

-1, mentre questo sta portando verso la risposta corretta, non è davvero esplicativo e il tono negativo non è veramente utile. La domanda originale ha JSON valido, è un array a elemento singolo. Il problema a cui risponde questa domanda è che ElasticSearch richiede che il documento più esterno sia un oggetto JSON, non un array JSON o un valore scalare. Esempio di refactoring sarebbe anche buono e non richiedere troppo tempo in questo caso. –

5

grazie @ hellol11

ha funzionato quando ho cambiato a

{root : 
[ 
    {"column1": "abc", "column2": "def", "column3": "dghi", "column4": "jkl", "column5": "mno"}, 
    {"column1": "pqr", "column2": "stu", "column3": "vwx", "column4": "", "column5": ""} 

]} 
+1

Quale comando hai usato per pubblicare il tuo json? – Techiee

0

In ambiente Windows, Ho risolto questo problema.

-d plus double quotation(") 

e surround nome con il backslash più doppio quotaton (\ ")

comando>

curl (more-option) -d "{\"column1\": \"abc\", \"column2\": \"def\", \"column3\": \"dghi\", \"column4\": \"jkl\", \"column5\": \"mno\"}" 
0

Alla ricerca elastica, se si desidera inviare i dati bulk allora ogni oggetto elenco deve essere in New line .so se si utilizza il sense quindi creare tutto in New line o se si utilizza dal codice quindi aggiungere carattere New line \ n ...

0

Recentemente mi sono imbattuto in questo usando curl ed era un semplice refuso. Non stavo usando in linea JSON, ma da un file. Ho dimenticato di includere il simbolo @ prima del nome del file.

curl -XPUT -H'Content-Type:application/json' localhost:9200/twitter [email protected]