Il mio test di integrazione/unità include test per la funzionalità di ricerca.Come cancellare l'indice ElasticSearch?
La mia idea è di avere un indice di ricerca vuoto prima di ogni test. Quindi, sto cercando di rimuovere tutti gli elementi di indice su setup
metodo (è codice Groovy):
Client client = searchConnection.client
SearchResponse response = client.prepareSearch("item")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(termQuery('name', 'test')) //tried also matchAllQuery()
.setFrom(0).setSize(100).setExplain(false).execute().actionGet()
List<String> ids = response.hits.hits.collect {
return it.id
}
client.close()
client = searchConnection.client
ids.each {
DeleteResponse delete = client.prepareDelete("item", "item", it)
.setOperationThreaded(false)
.execute().actionGet()
}
client.close()
sembra che è l'elaborazione di tutte le eliminazioni in modo asincrono, così ho aggiunto Thread.sleep(5000)
dopo di esso. Come vedi sto cercando di aprire/chiudere la connessione alcune volte - non aiuta lì. Il problema che a volte richiede più tempo, a volte occorrono più di 5 secondi per eliminarlo, a volte non riesce a trovare solo dati aggiunti (dal test precedente), ecc. Ecc. E il più fastidioso che i test di integrazione diventano instabili . Mettendo Thread.sleep()
ovunque, dove è possibile, sembra una soluzione non così buona.
E c'è un modo per commettere ultime modifiche, o fare un blocco fino saranno scritti tutti i dati?
Non è necessario chiamare a filo, basta chiamare l'API di aggiornamento per assicurarsi di poter cercare i dati più recenti indicizzati. – kimchy