我用Java对外观做一些事情的集成测试进行了测试,其中包括对elasticsearch数据库的索引操作。这个弹性的搜索数据库已经非常幼稚地建立了(实际上是开箱即用的东西,我在学习中)。也非常幼稚地在该立面内使用Java api插入了该示例,该示例几乎完全复制了从elasticsearch中粘贴的示例,如此处所述:http : //www.elasticsearch.org/guide/reference/java-api /index_.html。
之后,我测试外观是否正确完成了其工作,部分工作是检查该文档是否确实插入了数据库中。我还是用弹性在其网站上描述的方式做到这一点:http : //www.elasticsearch.org/guide/reference/java- api/search.html。我插入具有一定负载的文档,并以相同的方式查找它。
如果我在调试中运行并且在Facade填充完东西后设置断点,则此测试有效,但是如果我不放置此断点或不运行在调试中,则测试失败,没有结果。这使我认为我确实在做错事。而且,应用程序本身可以工作(插入等),因此集成测试可能有问题,而不是复制粘贴的代码有问题。
我猜想在索引操作返回之后,索引还没有真正完成,或者正在进行一些复制,这些复制在搜索之前还没有完成,或者类似的事情,但是它使我难以理解确切的内容,而且我似乎无法解决它。我还没有尝试在一个节点和一个碎片上施加弹性,也许那里出了点问题,但是我并没有真正看到确切的含义,因此我还没有走这条路。就像我说的,刚开始使用松紧带,所以我可能会缺少一些至关重要的初学者风格。我可以根据需要粘贴确切的代码,但是就像我说的那样,归结为在测试中使用了来自elasticsearch站点的两个代码段。
卡斯珀
调用索引操作后,Elasticsearch不会立即使数据可用。默认情况下,它会等待1秒,以获取更多数据。但是,您可以通过调用强制elasticsearch立即提供所有数据refresh:
refresh
client.admin().indices().refresh(refreshRequest()).actionGet();
在完成外观索引之后,尝试添加此操作,然后检查最终结果。