Elasticsearch 6 RestHighLevelClient: Как узнать, когда результат IndexRequest готов к чтению? - PullRequest
0 голосов
/ 17 сентября 2018

Я пишу модульный тест, в котором мне нужно записать в индекс Elasticsearch 6, используя RestHighLevelClient в библиотеке Java Elasticsearch 6, а затем прочитать из индекса.Как я могу узнать, когда результаты IndexRequest готовы для чтения из индекса через RestHighLevelClient.search?Например:

RestHighLevelClient client;
//client initialization
BulkRequest request = new BulkRequest();
request.add(new IndexRequest(...));
BulkResponse response = client.bulk(request);
//process response

SearchRequest request = new SearchRequest(...);
SearchResponse scrollResponse = client.search(request);
//scrollResponse is empty!

По сути, если я помещаю Thread.sleep между записью и чтением, ответ содержит написанное мной содержимое, поэтому я думаю, что запросы выполняются правильно.Есть ли способ, которым я могу быть уверен, что подождать, пока часть client.bulk(request) полностью не закончит запись, прежде чем я выполню операцию чтения?

1 Ответ

0 голосов
/ 17 сентября 2018

Разобрался. Если в будущем у кого-то возникнет эта специфическая проблема, вам необходимо указать:

client.refreshIndex(indexName)

Между записью и чтением. Elasticsearch обновляется по умолчанию каждую 1 секунду, но вы также можете сделать это явно, если вам нужно прочитать <1 секунду после записи. </p>

...