我正在为使用Elasticsearch的应用程序编写一些集成测试,但遇到了奇怪的行为。如果插入文档然后直接查询,每次都会得到不同的结果。我怀疑,尽管插入本身会返回,但索引本身却不会同步发生,因此,查询将对竞态条件进行实验,结果无法预测。
如果是这样的话:有没有一种同步方法,以便在我运行查询时,我知道它们已经准备好并且成功了???
更多详细信息:我使用的是嵌入式Elasticsearch,查询是一个简单的过滤器。唯一奇怪的是我正在为文档模型使用模板文件。
编辑:插入后,我什至尝试通过ID获取文档,但查询仍然返回随机结果(除非我将线程Sleep置于等待状态几秒钟)。
刷新
要在操作发生后立即刷新索引,以便文档立即显示在搜索结果中,可以将refresh参数设置为true。从索引和搜索的角度来看,只有在仔细考虑并确认它不会导致性能下降之后,才应将此选项设置为true。注意,使用get API获取文档是完全实时的。
这就是为什么我的查询返回奇怪结果的原因。因为有时索引尚未完成。另外,可以使用_refresh
端点执行刷新,而不是作为插入的一部分进行刷新:
$ curl -XPOST 'http://localhost:9200/twitter/_refresh'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句