首页 > 解决方案 > 弹性搜索如何处理并行索引刷新请求?

问题描述

在我们的项目中,我们在每次创建/更新/删除操作后点击弹性搜索的索引刷新 api,以便立即进行搜索。

我想知道,如果在具有接近 250 万个文档的单个索引上对其刷新 api 发出多个并行请求,弹性搜索将如何执行?

有什么想法吗?建议?

标签: elasticsearch

解决方案


刷新是 ElasticSearch 要求 Lucene 分片在磁盘上提交修改并创建一个段的操作。如果您在每次操作后要求刷新,您将创建大量的微细分。

太多的分段会使您的搜索时间更长,因为您的分片需要按顺序搜索所有分段才能返回搜索结果。此外,它们消耗硬件资源。

每个段都消耗文件句柄、内存和 CPU 周期。更重要的是,每个搜索请求都要依次检查每个段;段越多,搜索就越慢。 来自权威指南

Lucene 会自动将这些段合并成更大的段,但这也是一项消耗 I/O 的任务。

您可以检查以获取更多详细信息

但据我所知,刷新 25 亿个文档索引将需要与 2.5k 个文档索引相同的时间。此外,似乎(从这个问题)刷新是一个非阻塞操作。

但它对于弹性搜索集群来说是一个糟糕的模式。 您的应用程序的每个 CUD 操作是否都需要刷新?


推荐阅读