Typesense中如何通过Facet获取全部分类及对应产品数量?
问题分析与解决
核心问题
你遇到的是Typesense的默认facet结果数量限制:Typesense默认只返回前10个facet值(按关联文档数降序排列),所以即使有1696个分类,也只会显示前10个,并非无法通过Facet实现全量获取。
解决步骤
要获取全部分类(及options字段)的产品数量,只需在搜索参数中添加max_facet_values参数,设置一个大于实际分类数量的数值即可,同时可通过facet_sort控制排序逻辑。
修改后的查询代码(针对categories.id)
client.collections('products').documents().search({ "q": "*", "facet_by": "categories.id", "per_page": 0, "max_facet_values": 2000, // 设置为比实际分类数大的值 "facet_sort": "count:desc" // 可选:按文档数降序,默认就是这个,也可设为"alpha"按字母排序 })
针对options字段的查询
同理,只需替换facet_by字段即可:
client.collections('products').documents().search({ "q": "*", "facet_by": "options", "per_page": 0, "max_facet_values": 2000 // 根据options的实际数量调整 })
补充说明
- 你的Schema配置无问题:
categories设为object[]且facet: true,其内部的id字段可以正常作为facet维度使用。 - 如果后续分类/options数量增长,只需同步调大
max_facet_values的数值即可,1k-2k量级的facet值不会对Typesense性能造成明显影响。
内容的提问来源于stack exchange,提问作者Bogdan Dubyk
相关产品推荐
相关产品推荐

