Ho riscontrato alcuni problemi durante l'esecuzione di più richieste get_or_create
in ES. Elasticsearch sembra richiedere un po 'di tempo dopo aver risposto allo POST
per indicizzare un documento, così tanto che un GET
chiamato subito dopo non restituisce risultati.Elasticsearch GET subito dopo POST
Questo esempio riproduce il problema:
curl -XPOST 'http://localhost:9200/twitter/tweet/' -d '{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elastic Search"
}' && \
curl -XGET 'http://localhost:9200/twitter/tweet/_search' -d '{
"query" : {
"term" : { "user" : "kimchy" }
}
}' && \
sleep 1 && \
curl -XGET 'http://localhost:9200/twitter/tweet/_search' -d '{
"query" : {
"term" : { "user" : "kimchy" }
}
}'
Il POST
va bene:
{
"ok": true,
"_index": "twitter",
"_type": "tweet",
"_id": "yaLwtgSuQcWg5lzgFpuqHQ",
"_version": 1
}
Il primo GET
non corrisponde alcun risultato:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
E dopo una breve pausa, mostra il risultato (secondo GET
):
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.30685282,
"hits": [{
"_index": "twitter",
"_type": "tweet",
"_id": "yaLwtgSuQcWg5lzgFpuqHQ",
"_score": 0.30685282,
"_source": {
"user": "kimchy",
"post_date": "2009-11-15T14:12:12",
"message": "trying out Elastic Search"
}
}]
}
}
è che il comportamento normale?
Esiste la possibilità di ottenere immediatamente il risultato, anche se la risposta è più lenta?
Grazie!
La tua richiesta di indice fa sì che venga creato un nuovo indice giusto? Non lo stai creando in anticipo utilizzando l'API di creazione dell'indice se ho capito correttamente. – javanna
Sì, ma quell'esempio è basato su quelli di Elasticsearch sul documento. Il fatto è che sono felice nel mio ambiente con indici precedentemente creati. Le due persone sottostanti hanno ottenuto buone risposte: utilizzare l'API GET sarebbe più sicuro per un caso del genere. –
Certo, non l'avevo notato, il metodo GET http di capitale mi ha confuso :) come le risposte dicono, usa get o richiama esplicitamente il refresh. Saluti! – javanna