插入后直接查询的Elasticsearch奇怪行为

got*_*ch4 6 elasticsearch

我正在为使用Elasticsearch的应用程序编写一些集成测试,我遇到了一种奇怪的行为.如果我插入一个文档然后我直接查询,我每次都得到不同的结果.我怀疑,虽然插入本身会返回,但索引本身不会同步发生,因此,查询将尝试具有不可预测结果的竞争条件.

如果是这种情况:有没有办法同步,所以当我运行我的查询时,我知道他们已经准备好并且成功了???

更多细节:我使用的是elasticsearch embedded,查询是一个简单的过滤器.唯一奇怪的是我正在使用文档模型的模板文件.

编辑:我甚至尝试在插入后通过ID获取文档,但查询仍然返回随机结果(除非我把线程Sleep等待几秒钟).

got*_*ch4 10

来自索引APIElasticsearch文档:

刷新

要在操作发生后立即刷新索引,以便文档立即显示在搜索结果中,可以将refresh参数设置为true.将此选项设置为true只应在仔细考虑并验证它不会导致性能不佳的情况下完成,无论是从索引还是从搜索的角度来看.请注意,使用get API获取文档是完全实时的.

这就是我的查询返回奇怪结果的原因.因为索引有时还没有完成.此外,使用_refresh端点可以不作为插入的一部分进行刷新:

$ curl -XPOST 'http://localhost:9200/twitter/_refresh'
Run Code Online (Sandbox Code Playgroud)