弹性搜索如何处理并行索引刷新请求?

时间:2018-09-28 07:33:09

标签: elasticsearch

在我们的项目中,我们在每次创建/更新/删除操作后都点击了弹性搜索的索引刷新API,以立即获得搜索结果的可用性。

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

有什么想法吗?建议?

1 个答案:

答案 0 :(得分:1)

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

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

  

每个段消耗文件句柄,内存和CPU周期。更重要的是,每个搜索请求都必须依次检查每个细分;细分越多,搜索速度就越慢。   from the definitive guide

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

您可以查看this了解更多详细信息

但是据我所知,刷新25亿个文档索引将同时花费2.5k个文档索引。 另外,似乎(from this issue)刷新是非阻塞操作。

但是对于Elasticsearch集群而言,这是一个不好的模式。您的应用程序中的每个CUD操作是否都需要刷新?