我使用的是Elastic 5.1.2版本。我正在使用 Elastic java Restclient 从 Elastic 搜索中发布和查询文档。
当我在 POST 操作后立即使用 GET 操作时,我无法获得准确的文档计数。如果我在 POST 和 GET 之间 hibernate > 1 秒,那么 GET 操作就能够给出准确的计数。
我的操作流程是: 1)使用POST操作发布一个新的交易(文档)。 2) 使用 GET 操作检索文档总数。这是紧随 POST 之后的内容。
我认为,Elastic 需要时间来更新索引。这是 Elasticsearch 的问题还是我的任何设置的问题。请帮忙
最佳答案
这是正常行为!当您为新数据建立索引时,它不会立即可用,而是在下次刷新后可用,默认情况下每秒发生一次。
如果这让您烦恼,您有几种选择:
- 您可以调用
/_refresh
endpoint发布您的文档后,这将立即刷新您的索引,并且下一个 GET 调用将起作用 - 您可以添加
?refresh=true
parameter当您索引文档时,在 POST 调用中,这基本上与 1 相同 - 您可以添加
?refresh=wait_for
parameter当您索引文档时,在 POST 调用中,该调用仅在发生刷新操作时返回,以便下一个 GET 调用将返回文档 - 您可以减少设置中的
index.refresh_interval
(默认为 1 秒),以便更频繁地进行刷新操作。
只需知道,从性能的角度来看,实现您想要的效果的最不激进的方法是 3,即这是 ES 5 中引入的一个新参数,它不会强制刷新您的索引,但只会返回一次新索引的文档可供搜索。过于频繁地强制刷新(1、2 和 3)可能会降低您的性能。
关于java - Elastic Search GET 未提供最新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42406674/