Searchkick - 范围在 2 个单独的列上

Searchkick - ranges on 2 separate columns

我正在尝试创建包含 2 列的多个范围。我知道可以实现多个范围,但我需要它来处理 2 列。

在我的模型中,我有一个 min_agemax_age。用户可以select多个年龄进行筛选,例如:选项为10,11,12,13,14,15,16,17,18和用户selects 11、13 和 16。我如何从 selected 选项中筛选模型?

此外,我想我需要将 selected 选项更改为一个范围,这样上面的内容就会变成 10-11、12-13 和 15-16,这样范围过滤器就可以通过使用gtlt 参数。但是,也许范围过滤器对此不起作用?

编辑

在 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)}
                 ]
          }
)