ES7 读取是实时的吗
在 Elasticsearch 7.x 版本中,读取操作默认是实时的。这是因为 Elasticsearch 7.x 中的读取操作会直接从内存中的索引数据结构中读取最新的文档版本,而不需要等待刷新操作完成。
当你执行 GET/MGET 操作时,Elasticsearch会直接从内存中的索引数据结构中读取最新的文档版本,并将其返回给客户端。这意味着,如果文档已经被写入并更新到内存中的索引数据结构中,那么 GET/MGET 操作将会立即返回最新的文档版本,而不需要等待刷新操作完成。
需要注意的是,如果你在写入文档后立即执行 GET/MGET 操作,可能会看到旧的结果,因为写入操作可能还没有完成。因此,如果你需要确保获取最新的文档版本,请等待写入操作完成后再执行 GET/MGET 操作,或者使用刷新操作来强制刷新索引。
总之,在 Elasticsearch 7.x 版本中,读取操作默认是实时的,因此你可以在写入文档后立即读取最新的文档版本。但是,需要注意的是,在索引写入高并发的情况下,实时读取可能会导致性能瓶颈,因此你需要根据具体情况进行调整。
ES 索引设置"refresh_interval": "60s"后,什么场景会提前完成段刷新,可以被搜索
在 Elasticsearch 中,当你设置索引的 refresh_interval
参数为 "60s" 时,Elasticsearch会每隔60秒自动将内存中的文档刷新到磁盘中,以使其变得可搜索。但是,在某些情况下,段刷新可能会提前完成,文档可能会更早地变得可搜索。
以下是可能导致段刷新提前完成的场景:
-
手动刷新段:你可以通过发送一个刷新请求来手动刷新段。这将导致内存中的所有文档被写入磁盘中的段文件,并立即变得可搜索。
-
写入缓冲区已满:当写入缓冲区已满时,Elasticsearch将强制执行段刷新,以便将所有文档写入磁盘中。这可能会在60秒内发生,导致某些文档更早地变得可搜索。
-
索引关闭时:当你关闭索引时,Elasticsearch会将所有未刷新的文档强制刷新到磁盘中。这可能会导致某些文档更早地变得可搜索。
需要注意的是,虽然段刷新提前完成可能会使文档更早地变得可搜索,但它并不是一个可控的行为。因此,在应用程序中,你不应该依赖于这种行为来保证文档的可搜索性。
相反,你应该在应用程序中使用 refresh
参数来控制文档何时变得可搜索。例如,在写入文档后,你可以立即执行刷新请求,以使文档立即变得可搜索。但是,需要注意的是,频繁地执行刷新请求可能会降低写入性能。因此,你需要根据你的需求和系统资源进行权衡。
什么是段刷新
当你在 Elasticsearch 中写入一个文档时,它会首先被写入内存中的缓冲区。然后,Elasticsearch会定期将缓冲区中的文档写入磁盘中的段文件中,这个过程称为段刷新。一旦段刷新完成,文档就会变得可搜索。