Подтвердить что ты не робот

Интеграционный тест эластичный поиск, проблема с синхронизацией, документ не найден

У меня есть интеграционный тест в java, фасад, который делает несколько вещей, среди которых операция индекса в эластичную базу данных поиска. Эта эластичная база данных поиска была очень наивно настроена (на самом деле, я нахожусь в фазе обучения). Вставка выполняется внутри этого фасада с помощью java api, также очень наивно, с примером, почти полностью скопированным с помощью упругого поиска, как описано здесь: http://www.elasticsearch.org/guide/reference/java-api/index_.html.

Затем я проверяю, правильно ли мой фасад сделал свой материал, часть которого проверяет, действительно ли этот документ был вставлен в базу данных. Это я снова повторяю так, как на их сайте описывается эластичность: http://www.elasticsearch.org/guide/reference/java-api/search.html. Я вставляю документ с определенной полезной нагрузкой и просматриваю его так же.

Этот тест работает, если я запускаю отладку и устанавливаю точку останова после того, как фасад сделал это, но он не сработал, и не было найдено никаких результатов, если я не поставлю эту точку останова или не буду работать в отладке. Это заставляет меня думать, что я действительно что-то делаю неправильно. Кроме того, само приложение работает (вставки и т.д.), Поэтому, вероятно, что-то не так с моим тестом интеграции, а не с моим скопированным кодом.

Я предполагаю, что после того, как операция индексирования вернется, индексирование еще не закончено, или происходит некоторая репликация, которая не завершается до поиска, или что-то в этом роде, но она ускользает от меня, что именно и я могу " Кажется, он и решил. Я еще не пытался надеть один на один node и один осколок, может быть, там что-то не так, но я действительно не понимаю, что именно, поэтому я еще не ходил по этому пути. Как я уже сказал, только начал использовать эластик, чтобы у меня не хватало чего-то решающего и начинающего. Я могу вставить мой точный код, если это необходимо, но, как я уже сказал, это сводится к использованию двух фрагментов кода с сайта эластичного поиска в тесте.

Kasper

4b9b3361

Ответ 1

Elasticsearch не делает данные доступными сразу после вызова операции индекса. По умолчанию для получения дополнительных данных ожидается 1 с. Однако вы можете заставить elasticsearch немедленно сделать все данные доступными, вызвав refresh:

client.admin().indices().refresh(refreshRequest()).actionGet();

Попробуйте добавить эту операцию после того, как вы сделаете фасад, индексирование и перед проверкой результата.

Ответ 2

Невозможно найти метод refreshRequest. Я использовал что-то вроде этого, и теперь он работает. Я сделаю еще несколько тестов

client.admin().indices().refresh(new RefreshRequest(indexName)).actionGet();

где indexName - это имя строки индекса, подлежащего обновлению