集成测试弹性搜索,计时问题,未找到文档

我在java中进行了一个集成测试,它做了一些东西,其中包括对弹性搜索数据库的索引操作。 这个弹性搜索数据库已经非常天真地设置(开箱即用的东西实际上,我正在学习fase)。 插入是在门面内完成的,使用java api,也非常天真,示例几乎完全从弹性搜索中复制粘贴,如下所述: http : //www.elasticsearch.org/guide/reference/java-api /index_.html 。

然后我测试我的外观是否正确地完成了它的东西,其中一部分是检查该文档是否确实已插入数据库中。 我再次按照弹性在其网站上描述的方式进行操作: http : //www.elasticsearch.org/guide/reference/java-api/search.html 。 我插入一个带有特定负载的文档,并以相同的方式查找它。

如果我在调试中运行并在facade之后设置了一个断点,那么这个测试是有效的,但如果我没有放置这个断点或者没有在调试中运行,它就会失败并且没有找到结果。 这让我觉得我真的做错了什么。 此外,应用程序本身工作(插入等),因此我的集成测试可能有问题,而不是我的复制粘贴代码。

我想在索引操作返回之后索引还没有真正完成,或者有一些复制在搜索之前没有完成,或类似的东西,但它让我想到了什么,我似乎无法让它解决。 我没有尝试在一个节点和一个碎片上放置弹性,也许那里有一些错误,但我真的没看到究竟是什么,所以我还没走那条路。 就像我说的那样,刚刚开始使用弹性,所以我可能会遗漏一些关键和初学者风格的东西。 如果需要,我可以粘贴我的确切代码,但就像我说的那样归结为在测试中使用来自弹性搜索站点的两个代码片段。

卡斯帕

调用索引操作后,Elasticsearch不会立即使数据可用。 默认情况下,等待1秒即可获得更多数据。 但是,您可以通过调用refresh强制elasticsearch立即使所有数据可用:

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

在完成索引并在检查结果之前尝试添加此操作。

无法找到refreshRequest方法。 我曾经使用过类似的东西,现在似乎正在运作。 我会做更多的测试

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

其中indexName是要刷新的索引的String名称