【问题标题】:How to filter by derived facets in algolia如何在 algolia 中按派生方面进行过滤
【发布时间】:2026-01-24 19:30:02
【问题描述】:

鉴于以下指数:

{
    id: 1,
    distance: [4, 10]
},
{
    id: 2,
    distance: [1, 2]
},
{
    id: 3,
    distance: [9, 10]
}

distance 上启用分面以便能够对其应用数字过滤器后,我想对我将调用distance_range 的派生属性应用额外的过滤器。它通过现有属性的自定义逻辑派生其值,例如:

// In JS:
distance_range: Math.floor(( distance - 0.5 ) / 5) * 5 + "-" + Math.ceil(( distance ) / 5) * 5

这会将每个距离数字转换为“0-5”、“5-10”等范围。

{
    id: 1,
    distance: [4, 10],
    distance_range: ["0-5", "5-10"]
},
{
    id: 2,
    distance: [1, 2]
    distance_range: ["0-5"]
},
{
    id: 3,
    distance: [9, 10]
    distance_range: ["5-10"]
}

获得这样一个索引的最佳方法是什么?我是否事先对数据进行了处理,或者 algolia 是否具有动态转换属性的功能?

【问题讨论】:

    标签: algolia


    【解决方案1】:

    Algolia 使用自定义数据结构来索引您的数据,以便尽快提供结果。
    实时重建索引将太长而无法得到答案,这就是为什么即使是排序,Algolia requires you to duplicate your data into multiple indices

    如果你只需要计算新的显示属性,用前端逻辑肯定是可以实现的,autocomplete.jsinstantsearch.js 都有在显示之前转换数据的方法。

    但是,由于您要对其进行过滤,因此 Algolia 需要数据结构中的此信息,因此您必须事先进行此计算。
    另外,不要忘记将这个新属性添加到attributesForFaceting

    【讨论】: