solr/elasticsearch 搜索请求是由分片还是副本处理的?

solr/elasticsearch search request is handled by shards or replica?

我设计了solr/elasticsearch搜索,我有一个特别的问题。假设我有 10K 次搜索 request/seconds。那么我将在哪里搜索碎片或副本。我知道副本是碎片的备份。

如果它发生在分片上那么 how/why 如果它发生在副本上那么 how/why ?

主分片是数据的原始副本,而副本分片是原始数据的副本。

虽然索引总是在原始副本(即主分片)上发生,然后复制到副本分片,但搜索可以在任何副本上发生,而不管数据的原始副本或副本。

因此创建副本不仅是为了容错,如果你丢失了一个副本,它可以从它的副本中恢复,而且如果一个分片过载(主要或副本)然后搜索发生在负载最少的副本,即另一个副本。

请参考 Adaptive replica selection in ES 上 how/why 副本改善搜索延迟。

如果您需要更多信息,请随时告诉我。

根据 OP 评论进行编辑

从 ES 7 开始,自适应副本选择默认启用,因此它会发送到负载最少的副本,但即使所有分片都未充分利用,它仍然不会将所有搜索请求发送到主分片以避免超载。同样在 ARS(自适应副本选择)之前,ES 曾经以循环方式发送这些搜索请求以避免一个分片过载。