2017-08-29 154 views
0

有沒有辦法檢查Elasticsearch是否已完成處理我的請求?
我想爲我的應用程序執行集成測試,檢查插入後是否可以找到記錄。 例如,如果我做出以下請求:檢查Elasticsearch是否已完成索引

POST /_all/_bulk 
{ 
    "update":{ 
     "_id":419, 
     "_index":"popc", 
     "_type":"offers" 
    } 
} 
{ 
    "doc":{ 
     "id":"419", 
     "author":"foo bar", 
     "number":"642-00419" 
    }, 
    "doc_as_upsert":true 
} 

我立即檢查,測試失敗,因爲它需要一段時間Elasticsearch完成我的要求。
如果我在斷言之前睡了1秒,它大部分時間都有效,但並非總是如此。
我可以將睡眠時間延長至例如。 3秒,但它使測試非常緩慢,因此我的問題。

我嘗試過使用cat pending taskspending cluster tasks端點,但響應總是空的。

如果任何這是相關的,我使用Elasticsearch 5.4Laravel Scout 3.0.5tamayo/laravel-scout-elastic 3.0.3

回答

1

您可以等待響應;當你收到對更新請求的響應時,它就完成了(你將不會在待處理或當前任務中看到它)。我認爲您遇到的問題可能是刷新間隔(請參閱dynamic settings)。索引文件不能立即搜索,這是他們可用之前的(最長)時間量。 (您可以更改此設置以確定您的用例是合理的,還是使用此設置可以讓您知道在搜索集成測試之前需要多長時間休眠)。

如果您想查看正在進行任務,你可以使用tasks api

+0

謝謝,我已將'index.refresh_interval'設置爲'1ms',並且1000次測試運行時間爲600ms就足夠了。 –

相關問題