7

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

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

更多细节:我使用的是嵌入式弹性搜索,查询是一个简单的过滤器。唯一奇怪的是我正在为文档模型使用模板文件。

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

4

1 回答 1

10

来自索引 API 的 Elasticsearch 文档

刷新

要在操作发生后立即刷新索引,使文档立即出现在搜索结果中,可以将 refresh 参数设置为 true。将此选项设置为 true 仅应在仔细考虑并验证它不会导致性能不佳(从索引和搜索的角度来看)之后进行。请注意,使用 get API 获取文档是完全实时的。

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

$ curl -XPOST 'http://localhost:9200/twitter/_refresh'
于 2013-11-04T23:25:53.113 回答