0

Gibt es eine Möglichkeit zu überprüfen, ob Elasticsearch meine Anfrage bearbeitet hat?
Ich möchte Integrationstests für meine Anwendung durchführen und prüfen, ob nach dem Einfügen ein Datensatz gefunden werden kann. Zum Beispiel, wenn ich eine folgende Anfrage:Prüfen, ob Elasticsearch die Indexierung beendet hat

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

Und ich sofort überprüfen, der Test fehl, da es einige Zeit dauert, Elasticsearch meine Anforderung abzuschließen.
Wenn ich vor der Behauptung für 1 Sekunde schlafe, funktioniert es die meiste Zeit, aber nicht immer.
Ich könnte die Ruhezeit auf zB verlängern. 3 Sekunden, aber es macht die Tests sehr langsam, daher meine Frage.

Ich habe versucht, cat pending tasks und pending cluster tasks Endpunkte zu verwenden, aber die Antworten sind immer leer.

Wenn irgendetwas davon relevant ist, ich bin mit Elasticsearch 5.4, Laravel Scout 3.0.5 und tamayo/laravel-scout-elastic 3.0.3

Antwort

1

Sie auf die Antwort warten können; Wenn Sie die Antwort auf die Aktualisierungsanforderung erhalten, ist dies erledigt (und Sie sehen sie nicht in ausstehenden oder aktuellen Aufgaben). Ich denke, das Problem, das Sie haben, ist wahrscheinlich mit dem Aktualisierungsintervall (siehe dynamic settings). Indizierte Dokumente sind nicht sofort für die Suche verfügbar, und dies ist die (maximale) Zeitspanne, bevor sie verfügbar sind. (Sie können diese Einstellung für den Anwendungsfall ändern, oder Sie verwenden diese Einstellung, um zu wissen, wie lange Sie schlafen müssen, bevor Sie nach Integrationstests suchen.)

Wenn Sie in Bearbeitung sehen möchten Aufgaben, können Sie die tasks api verwenden.

+0

Danke, ich habe das 'index.refresh_interval' auf' 1ms' gesetzt und für 1000 Testläufe ist das Schlafen für 600ms immer genug. –

Verwandte Themen