检查Elasticsearch是否已经完成索引
Check if Elasticsearch has finished indexing
有没有办法检查 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 tasks and pending cluster tasks 个端点,但响应总是空的。
如果其中任何一个相关,我正在使用 Elasticsearch 5.4
、Laravel Scout 3.0.5
和 tamayo/laravel-scout-elastic 3.0.3
您可以等待回复;当您收到对更新请求的响应时,它就完成了(您不会在待处理或当前任务中看到它)。我认为您遇到的问题可能与刷新间隔有关(请参阅 dynamic settings)。索引文档不能立即用于搜索,这是它们可用之前的(最长)时间量。 (您可以根据您的用例更改此设置,或使用此设置让您知道在搜索集成测试之前需要睡多长时间。)
如果您想查看正在进行的任务,可以使用tasks api。
我找到了这个 PR:https://github.com/elastic/elasticsearch/pull/17986
您可以使用 refresh: wait_for
,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 tasks and pending cluster tasks 个端点,但响应总是空的。
如果其中任何一个相关,我正在使用 Elasticsearch 5.4
、Laravel Scout 3.0.5
和 tamayo/laravel-scout-elastic 3.0.3
您可以等待回复;当您收到对更新请求的响应时,它就完成了(您不会在待处理或当前任务中看到它)。我认为您遇到的问题可能与刷新间隔有关(请参阅 dynamic settings)。索引文档不能立即用于搜索,这是它们可用之前的(最长)时间量。 (您可以根据您的用例更改此设置,或使用此设置让您知道在搜索集成测试之前需要睡多长时间。)
如果您想查看正在进行的任务,可以使用tasks api。
我找到了这个 PR:https://github.com/elastic/elasticsearch/pull/17986
您可以使用 refresh: wait_for
,Elasticsearch 只会在您的数据可供搜索时响应。