Django使用Algolia Search如何实现多模型统一搜索并将模型作为分面?
方案1:合并所有模型数据到同一索引(推荐)
这是实现需求成本最低、效果最好的方案,直接利用Algolia单索引原生的分面能力即可实现目标效果。
操作步骤:
- 给每个模型自定义Algolia序列化规则,新增
model_type字段用于标识数据所属模型,作为后续的分面依据:
# 以Baby模型为例,其余3个模型按相同逻辑修改 class Baby(models.Model): name = ... description = ... # 其余原有字段保持不变 # 新增Algolia序列化方法 def to_algolia_record(self): return { "name": self.name, "description": self.description, "model_type": "宝宝", # 可自定义为前端要展示的分面标签,也可以直接填类名Baby # 其余你需要纳入搜索范围的字段都可在这里补充 }
- 注册模型时统一指定同一个索引名,不再使用默认的单模型独立索引:
import algoliasearch_django as algoliasearch from .models import Baby, BabyStore, BabySitter, BabyDoctor # 四个模型全部注册到同一个自定义索引 algoliasearch.register(Baby, index_name="unified_business_search") algoliasearch.register(BabyStore, index_name="unified_business_search") algoliasearch.register(BabySitter, index_name="unified_business_search") algoliasearch.register(BabyDoctor, index_name="unified_business_search")
- 进入Algolia控制台,找到
unified_business_search索引,在「分面(Facets)」配置项中,把model_type添加为可分面属性,之后搜索时就会自动返回按模型分类的分面选项,和你给出的示例效果完全一致。
方案2:保留独立索引,使用多索引搜索
如果你因为业务需求必须保留每个模型的独立索引,可以使用Algolia的多索引查询能力,同时查询4个索引,前端自行聚合返回结果,并把每个索引的名称作为分面选项展示。不过这种方式的分面统计需要你自己计算处理,没有单索引方案原生支持方便。
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

