多级treemap组合是电商sku属性关联检索的高效方案,通过分层建模实现导航式查询:一级索引按属性名映射有序值集,二级索引预存高频组合,数值型属性利用floorkey/ceilingkey支持区间检索与近似匹配。
多级 treemap 组合是处理电商 sku 属性关联检索的高效方案,尤其适合需要动态筛选、区间匹配与层级下钻的场景。它不是简单嵌套,而是按业务语义分层建模,让查询从“遍历判断”变成“导航定位”。
用 TreeMap 构建属性-值索引树
SKU 的核心是属性组合(如“颜色=黑色,内存=16GB,版本=Pro”),传统方式用 List 遍历匹配效率低。推荐以属性名为键、属性值集合为值,构建一级 TreeMap:
-
TreeMap
> attrValues :例如attrValues.get("内存") → ["8GB", "16GB", "32GB"] - 所有属性名按字典序自动排序,便于前端生成筛选栏时保持一致顺序
- 值集合用 TreeSet 存储,天然去重+有序,支持
subSet("12GB", "24GB")快速获取区间值
用嵌套 TreeMap 表达属性组合关系
单个属性值不能决定 SKU,必须组合。可将常用组合预构为二级索引:
-
TreeMap
>> specComboIndex :第一层键是主属性(如“手机品牌”),第二层键是子属性值(如“小米”),值是匹配该品牌的全部 SKU 列表 - 例如:
specComboIndex.get("屏幕尺寸").get("6.7英寸")直接返回所有 6.7 英寸屏的 SKU - 初始化时批量加载,避免运行时重复计算;键类型统一用 String,避免 null 值引发 NPE
用 floorKey/ceilingKey 实现价格/参数区间检索
用户常按价格、电池容量、分辨率等数值型属性筛选。TreeMap 天然支持 O(log n) 区间定位:
- 建立 TreeMap
> priceIndex ,键为价格(四舍五入到百元),值为该价位段 SKU 列表 - 查“2000–3500 元”:调用
priceIndex.subMap(2000, true, 3500, true) - 查“最接近 2999 元的 SKU”:
priceIndex.floorKey(2999)和priceIndex.ceilingKey(2999)取两者中差值更小者
关联检索时合并多条件结果
真实筛选往往是多个属性交集(如“小米 + 16GB + 6.7英寸 + 2500–3000元”)。不建议实时求交集,而应预聚合高频组合:
- 对高流量属性组合(如品牌×内存),维护独立的 TreeMap
> ,键格式为"XIAOMI_16GB" - 低频组合走兜底逻辑:用 Guava 的
Sets.intersection()合并各属性对应 SKU 集合(需确保 Sku 实现合理 equals/hashCode) - 注意内存权衡:预聚合提升查询速度,但增加初始化开销和内存占用,建议按 PV 占比前 20% 的组合做缓存










