2017-08-29 125 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就足够了。 –

相关问题