對ES執行幾個get_or_create
請求時遇到一些問題。 Elasticsearch在回覆POST
以索引文檔之後似乎需要一段時間,因此在之後的GET
被稱爲返回沒有結果。Elasticsearch在POST後立即登錄
這個例子重現問題:
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" }
}
}'
的POST
得好:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
又過了:
{
"ok": true,
"_index": "twitter",
"_type": "tweet",
"_id": "yaLwtgSuQcWg5lzgFpuqHQ",
"_version": 1
}
第一GET
沒有任何結果匹配短暫的停頓,顯示結果(第二個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"
}
}]
}
}
這種行爲是否正常?
即使響應較慢,是否可以立即得到結果?
謝謝!
您的索引請求會導致創建一個新的索引?如果我理解正確,你不會使用create index api預先創建它。 – javanna
是的,但該示例基於Elasticsearch的文檔。事實是,我的環境中發生了以前創建的索引。 下面兩個人做出了很好的答案:使用GET API對於這種情況會更安全。 –
當然,我沒有注意到,大寫的http GET方法困惑了我:)如答案所述,使用get或者顯式調用refresh。乾杯! – javanna