我正在寻找一种在Algolia中搜索记录的方法,其中至少有一个数组元素符合几个条件.举个例子,想象一下这种记录:
{
"name": "Shoes",
"price": 100,
"prices": [
{
"start": 20160101,
"end": 20160131,
"price": 50,
},
{
"start": 20160201,
"end": 20160229,
"price": 80,
}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来执行如下查询:
prices.price<60 AND prices.start<=20160210 AND prices.end>=20160210
(给定日期价格低于60的产品)
该查询不应返回任何内容,因为该日期未满足价格条件,但无论如何都会返回记录.可能是因为所有价格中的"全球"条件都符合条件.
我是Algolia的初学者并且正在努力学习.有没有办法可以做到所需的请求,还是我必须为价格单独索引并使用多个查询?
谢谢.
当a facetFilter或tagFilter应用于数组时,Algolia的引擎会检查数组中的任何元素是否匹配,然后进入下一个条件.
它的行为方式而不是你期望的方式很简单:让我们假设你有一个字符串数组(比如标签):
{ tags: ['public', 'cheap', 'funny', 'useless'] }
Run Code Online (Sandbox Code Playgroud)
当用户想要找到"无用"和"有趣"的记录时,该用户不会同时寻找既"无用"又"有趣"的标签,而是寻找包含两个标签的记录.阵列.
解决方案是以某种方式对对象进行非规范化:将带有对象数组的记录转换为多个记录,每个记录包含一个对象.
所以你会改变
{
"name": "Shoes",
"price": 100,
"prices": [
{ "start": 20160101, "end": 20160131, "price": 50 },
{ "start": 20160201, "end": 20160229, "price": 80 }
]
}
Run Code Online (Sandbox Code Playgroud)
成
[
{
"name": "Shoes",
"default_price": 100,
"price": { "start": 20160101, "end": 20160131, "price": 50 }
},
{
"name": "Shoes",
"default_price": 100,
"price": { "start": 20160201, "end": 20160229, "price": 80 }
}
]
Run Code Online (Sandbox Code Playgroud)
您可以在同一索引中执行此操作(并用于distinct删除重复),也可以每月或每天使用一个索引.这实际上取决于您的用例,这使得为您提供正确的解决方案有点困难.
| 归档时间: |
|
| 查看次数: |
1357 次 |
| 最近记录: |