弹性搜索GET没有提供最新文档

时间:2017-02-23 03:50:56

标签: java elasticsearch

我使用的是Elastic 5.1.2版本。我使用Elastic java Restclient来发布和查询弹性搜索中的文档。

在POST操作后立即使用GET操作时,我无法获得准确的文档数。如果我睡了>在POST和GET之间1秒,然后GET操作能够给出准确的计数。

我的操作流程是: 1)使用POST操作发布新事务(文档)。 2)使用GET操作检索总文档的数量。这是在POST之后立即。

我在想,Elastic需要时间来更新索引。这是Elasticsearch或我的任何设置的问题。请帮忙

1 个答案:

答案 0 :(得分:2)

这是正常行为!当您索引新数据时,它不会立即可用,但会在默认情况下每秒发生一次的下一次刷新之后。

如果这困扰你,你有几个选择:

  1. 您可以在发布文档后调用/_refresh endpoint,这将立即刷新您的索引并且下一个GET调用将起作用
  2. 您可以在索引文档时在POST调用中添加?refresh=true parameter,这基本上与1
  3. 相同
  4. 您可以在索引文档时在POST调用中添加?refresh=wait_for parameter,并且只有在刷新操作发生时才会返回调用,以便下一个GET调用将返回文档
  5. 您可以减少设置中的index.refresh_interval(默认为1秒),以便更频繁地进行刷新操作。
  6. 只要知道从性能的角度来看,实现你想要的最不激进的方式是3,即在ES 5中引入的新参数不会强制刷新你的索引,但只会返回一次新索引的文件可供搜索。过于频繁地强制刷新(1,2和3)可能会导致性能下降。