java - Elastic Search GET 未提供最新文档

标签 java elasticsearch

我使用的是Elastic 5.1.2版本。我正在使用 Elastic java Restclient 从 Elastic 搜索中发布和查询文档。

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

我的操作流程是: 1)使用POST操作发布一个新的交易(文档)。 2) 使用 GET 操作检索文档总数。这是紧随 POST 之后的内容。

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

最佳答案

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

如果这让您烦恼,您有几种选择:

  1. 您可以调用/_refresh endpoint发布您的文档后,这将立即刷新您的索引,并且下一个 GET 调用将起作用
  2. 您可以添加?refresh=true parameter当您索引文档时,在 POST 调用中,这基本上与 1 相同
  3. 您可以添加?refresh=wait_for parameter当您索引文档时,在 POST 调用中,该调用仅在发生刷新操作时返回,以便下一个 GET 调用将返回文档
  4. 您可以减少设置中的 index.refresh_interval(默认为 1 秒),以便更频繁地进行刷新操作。

只需知道,从性能的角度来看,实现您想要的效果的最不激进的方法是 3,即这是 ES 5 中引入的一个新参数,它不会强制刷新您的索引,但只会返回一次新索引的文档可供搜索。过于频繁地强制刷新(1、2 和 3)可能会降低您的性能。

关于java - Elastic Search GET 未提供最新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42406674/

相关文章:

java - 以毫秒为单位获得实际的 DST 节省

java - 使用 Java 客户端如何查询 ElasticSearch?

elasticsearch - 如何在 Elasticsearch 中按小时对文档进行分组?

Elasticsearch 最佳实践

java - JMenuItem仅由键盘输入触发,而不是点击

java - 将一种方法标记为首选以自动解决不明确的调用?

Elasticsearch 多前缀关键字

amazon-web-services - 无法从 Spark 连接到 AWS Elasticsearch

java - 显式设置 JSESSIONID

java - 在android工作室:how I can create two tables with references?