2017-08-29 19 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.5

答えて

1

あなたが応答を待つことができtamayo/laravel-scout-elastic 3.0.3を使用してい

。更新要求に対する応答を受け取ったら、完了しています(保留中または現在のタスクでは表示されません)。私はあなたが持っている問題はおそらくリフレッシュ間隔(dynamic settings参照)と考えています。索引付けされた文書はすぐには検索できません。これは、利用可能になるまでの(最大)時間です。 (この設定をユースケースに合うように変更するか、この設定を使用して、統合テストを検索する前にどれくらいの時間スリープ状態にするかを知ることができます)。

進行中に見たい場合はあなたはtasks apiを使うことができます。

+0

おかげさまで、私は 'index.refresh_interval'を' 1ms'に設定しています。そして600msの間スリープする1000回のテストランでは常に十分です。 –

0

私は、このPRが見つかりました:https://github.com/elastic/elasticsearch/pull/17986

あなたはrefresh: wait_forを使用することができますし、あなたのデータが検索のために利用可能になるとElasticsearchのみ対応させていただきます。

関連する問題