Ich habe einige Probleme bei der Durchführung mehrere get_or_create
Anfragen an ES. Elasticsearch scheint nach der Reaktion auf die POST
eine Weile zu dauern, um ein Dokument zu indizieren, so viel, dass GET
kurz nach keine Ergebnisse zurückgibt.Elasticsearch GET nur nach POST
Dieses Beispiel reproduziert das Problem:
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" }
}
}'
Die POST
gut geht:
{
"ok": true,
"_index": "twitter",
"_type": "tweet",
"_id": "yaLwtgSuQcWg5lzgFpuqHQ",
"_version": 1
}
Der erste GET
passt nicht jedes Ergebnis:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
Und nach einer kurze Pause, zeigt das Ergebnis (zweite 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"
}
}]
}
}
Ist das Verhalten normal?
Gibt es eine Möglichkeit, das Ergebnis sofort zu erhalten, auch wenn die Antwort langsamer ist?
Danke!
Ihre Indexanforderung verursacht, dass ein neuer Index erstellt wird, richtig? Sie erstellen es nicht im Voraus mit dem create index api, wenn ich es richtig verstanden habe. – javanna
Ja, aber dieses Beispiel basiert auf denen von Elasticsearch im Dokument. Tatsache ist, dass dies in meiner Umgebung mit zuvor erstellten Indizes passiert ist. Die beiden unten genannten Personen haben gute Antworten gegeben: Die Verwendung der GET-API wäre in einem solchen Fall sicherer. –
Sicher, das hatte ich nicht bemerkt, die Hauptstadt http GET-Methode verwirrte mich :) wie die Antworten sagen, benutze get oder explizit Call Refresh. Prost! – javanna