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

时间:2013-11-04 17:49:35

标签: elasticsearch

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

如果是这种情况:有同步方法,那么当我运行查询时,我知道它们已经准备好并且成功了吗?

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

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

1 个答案:

答案 0 :(得分:10)

来自Elasticsearch docs for the index API

  

刷新

     

在操作发生后立即刷新索引,这样   文档立即出现在搜索结果中,刷新   参数可以设置为true。将此选项设置为true应该是唯一的   经过仔细的思考和验证,它不会导致   从索引和搜索角度来看,性能都很差。   请注意,使用get API获取文档完全是实时的。

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

$ curl -XPOST 'http://localhost:9200/twitter/_refresh'