中间件速查手册
搜索引擎分片

Shard 是什么?

索引被切成的多份,是并行检索和扩容的单位

类比:把一本书拆成几册,几个人同时翻

它是什么

每个分片本质上是一个独立的 Lucene 索引,有自己的倒排索引和段文件。一个索引的数据被哈希路由到多个主分片,查询时并行执行再归并。

数量怎么定

分片数在创建索引时确定,之后不能改(只能 reindex 或 split),所以宁少勿多。

  • 单分片数据量建议 10~50GB
  • 单节点分片数控制在 20~25 个/GB 堆内存以内
  • 小索引(<1GB)用 1 个分片就够,别按默认 5 个来
  • 分片过多会增加集群状态和查询归并开销

路由规则

默认按 _id 哈希:shard = hash(_routing) % number_of_primary_shards。指定 routing 可以把相关文档放在同一分片,减少查询扇出。

它出现在这些中间件里

相关概念