【问题标题】:Force query to match more than one attribute强制查询匹配多个属性
【发布时间】:2017-09-06 19:51:31
【问题描述】:

我有一个包含以下属性的索引:姓名、地址、城市、州、邮编

我想进行allOptional 搜索,但我不想匹配城市、州或邮编,但名称或地址也不匹配。因此,McDonalds 的搜索查询将匹配每个城市/州的所有麦当劳,McDonalds Chicago 将返回芝加哥的所有麦当劳,McDonalds 60007 将返回邮政编码 60007 中的所有麦当劳。

但是ChicagoChicago IL 的搜索查询将返回0 个结果。

我一直在阅读过滤器和构面文档,我认为这应该可以通过过滤器实现,但我似乎无法弄清楚如何。

【问题讨论】:

    标签: algolia


    【解决方案1】:

    您可以在收到结果后,在渲染之前对结果进行后处理来解决此问题。

    您可以在命中响应中使用_highlightResult 数据来过滤掉查询在某些属性中不匹配的命中。

    例如,删除查询在 nameaddress 属性中不匹配的命中:

    var displayedResults = response.hits.filter(hit => {
        return hit._highlightResult.name.matchLevel !== 'none' || hit._highlightResult.address.matchLevel !== 'none';
    });
    

    【讨论】:

    • 嗯,没想到。这不会丢掉返回的结果数量吗?我想我可以要求比我实际想要的更多,然后过滤结果。
    • 您是对的,这会使结果计数不准确,因此根据您的用例,这可能是不可接受的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2010-09-14
    • 2010-10-31
    • 2013-11-10
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    相关资源
    最近更新 更多