检查 Elasticsearch 是否已完成索引

Kub*_*ski 7 testing integration-testing elasticsearch laravel-scout

有没有办法检查 Elasticsearch 是否已完成处理我的请求?
我想为我的应用程序执行集成测试,检查插入后是否可以找到记录。例如,如果我提出以下请求:

POST /_all/_bulk
{  
   "update":{  
      "_id":419,
      "_index":"popc",
      "_type":"offers"
   }
}
{  
   "doc":{  
      "id":"419",
      "author":"foo bar",
      "number":"642-00419"
   },
   "doc_as_upsert":true
}
Run Code Online (Sandbox Code Playgroud)

而且我马上检查,测试失败,因为Elasticsearch需要一些时间才能完成我的请求。
如果我在断言前睡 1 秒钟,它大部分时间都可以工作,但并非总是如此。
我可以将睡眠时间延长到例如。3 秒,但它使测试非常缓慢,因此我的问题。

我曾尝试使用cat 挂起任务挂起集群任务端点,但响应始终为空。

如果其中任何一个是相关的,我正在使用Elasticsearch 5.4,Laravel Scout 3.0.5tamayo/laravel-scout-elastic 3.0.3

olv*_*lvl 7

我找到了这个公关:https : //github.com/elastic/elasticsearch/pull/17986

您可以使用refresh: wait_for并且 Elasticsearch 只会在您的数据可供搜索时做出响应。


小智 2

您可以等待回复;当您收到更新请求的响应时,它就完成了(并且您不会在待处理或当前任务中看到它)。我认为您遇到的问题可能与刷新间隔有关(请参阅动态设置)。索引文档无法立即用于搜索,这是它们可用之前的(最长)时间。(您可以根据您的用例更改此设置,或者使用此设置让您知道在搜索集成测试之前需要睡眠多长时间。)

如果您想查看正在进行的任务,可以使用任务 api