如何在 searchkick 中使用 "where not" 子句

How to use a "where not" clause with searchkick

我正在使用 Searchkick 和 Elasticsearch 来获取带有搜索词的产品。

我正在尝试向其中添加一个 WHERE NOT 子句,这样它就不会 return 任何带有 regular_price 为空的产品。

@products = Product.search(
        search,
        where: {
          regular_price: {
            not: "null" # I have also tried nil, both won't work
          }
        },
        page: params[:page],
        per_page: per_page,
      )

搜索忽略了我的 WHERE NOT 子句。

如果能提供一些调试技巧,我将不胜感激。

编辑:

所以我尝试使用以下内容,但现在它只是 return 所有适合搜索的产品。忽略搜索的 WHERE NOT 部分。

@products = Product.search(
        search,
        where: {
          regular_price: {
            _not: "null" 
          }
        },
        page: params[:page],
        per_page: per_page,
      )

UPDATE:

我还没有找到解决这个问题的方法,我继续使用不同的方法。通过过滤掉 regular_price 为 0.

的产品

还没有找到答案。因为我想用这个查询过滤掉的产品不多,所以我只是在渲染时过滤掉它们。

@products = Product.search(
    search,
    where: {
      regular_price: {
        _not: nil 
      }
    },
    page: params[:page],
    per_page: per_page,
  )

只需将 "null" 替换为 nil 即可过滤掉没有 regular_price 的产品。