Searchkick - 范围在 2 个单独的列上
Searchkick - ranges on 2 separate columns
我正在尝试创建包含 2 列的多个范围。我知道可以实现多个范围,但我需要它来处理 2 列。
在我的模型中,我有一个 min_age
和 max_age
。用户可以select多个年龄进行筛选,例如:选项为10,11,12,13,14,15,16,17,18和用户selects 11、13 和 16。我如何从 selected 选项中筛选模型?
此外,我想我需要将 selected 选项更改为一个范围,这样上面的内容就会变成 10-11、12-13 和 15-16,这样范围过滤器就可以通过使用gt
和 lt
参数。但是,也许范围过滤器对此不起作用?
编辑
在 SQL 中,我可以执行以下操作,returns 我希望看到的内容,所以我只需要通过 Searchkick 将其转换为 elasticsearch 语法。
select * from events
where (min_age <= 11 AND max_age >= 11)
OR (min_age <= 13 AND max_age >= 13)
OR (min_age <= 16 AND max_age >= 16)
无需深入研究范围是否是您的应用程序逻辑的最佳选择,要实现与您的 SQL 等效的效果,您可以使用如下内容:
Event.search(
"*",
where: {
_or: [
{min_age: {lte: 11}, max_age: {gte: 11)},
{min_age: {lte: 13}, max_age: {gte: 13)},
{min_age: {lte: 16}, max_age: {gte: 16)}
]
}
)
我正在尝试创建包含 2 列的多个范围。我知道可以实现多个范围,但我需要它来处理 2 列。
在我的模型中,我有一个 min_age
和 max_age
。用户可以select多个年龄进行筛选,例如:选项为10,11,12,13,14,15,16,17,18和用户selects 11、13 和 16。我如何从 selected 选项中筛选模型?
此外,我想我需要将 selected 选项更改为一个范围,这样上面的内容就会变成 10-11、12-13 和 15-16,这样范围过滤器就可以通过使用gt
和 lt
参数。但是,也许范围过滤器对此不起作用?
编辑
在 SQL 中,我可以执行以下操作,returns 我希望看到的内容,所以我只需要通过 Searchkick 将其转换为 elasticsearch 语法。
select * from events
where (min_age <= 11 AND max_age >= 11)
OR (min_age <= 13 AND max_age >= 13)
OR (min_age <= 16 AND max_age >= 16)
无需深入研究范围是否是您的应用程序逻辑的最佳选择,要实现与您的 SQL 等效的效果,您可以使用如下内容:
Event.search(
"*",
where: {
_or: [
{min_age: {lte: 11}, max_age: {gte: 11)},
{min_age: {lte: 13}, max_age: {gte: 13)},
{min_age: {lte: 16}, max_age: {gte: 16)}
]
}
)