搜索引擎分片
Shard 是什么?
索引被切成的多份,是并行检索和扩容的单位
类比:把一本书拆成几册,几个人同时翻
它是什么
每个分片本质上是一个独立的 Lucene 索引,有自己的倒排索引和段文件。一个索引的数据被哈希路由到多个主分片,查询时并行执行再归并。
数量怎么定
分片数在创建索引时确定,之后不能改(只能 reindex 或 split),所以宁少勿多。
- 单分片数据量建议 10~50GB
- 单节点分片数控制在 20~25 个/GB 堆内存以内
- 小索引(<1GB)用 1 个分片就够,别按默认 5 个来
- 分片过多会增加集群状态和查询归并开销
路由规则
默认按 _id 哈希:shard = hash(_routing) % number_of_primary_shards。指定 routing 可以把相关文档放在同一分片,减少查询扇出。