具有 Meil​​isearch 过滤功能的 Laravel Scout 不适用于 >、>=、< 和 <= 运算符

Sub*_*nna 1 laravel laravel-scout meilisearch

我正在尝试在我的 Laravel 应用程序上实现 Meil​​isearch。

由于某种原因,我无法使用、、和运算符过滤decimal字段(pricemrp),如Meil​​isearch 文档中所述。>>=<<=

        Product::search($request->search, function ($meilisearch, $query, $options) {
            $options['filter'] = 'price >= 1'; // This is the line that causes the issue.
            return $meilisearch->search($query, $options);
        })->raw();
Run Code Online (Sandbox Code Playgroud)

如果我执行类似上面的操作,我会得到 0 次点击,尽管有很多记录满足该条件 ( price >= 1):

我不确定我做错了什么。


另外,我想学习,如何应用多个 Fitters。就像在实际场景中一样。我们需要按最低和最高价格过滤产品。我意识到 Laravel scout 不允许我们使用where('price', '>=', $request->min_price)像 eloquent 这样的高级 where 子句 ( )

我想使用ScoutMeil​​isearch来做这样的事情 。

        $query = Product::search($request->search);
        
        if ($request->min_price) {
            $query->where('price', '>=', $request->min_price);
        }
        if ($request->max_price) {
            $query->where('price', '<=', $request->max_price);
        }
Run Code Online (Sandbox Code Playgroud)

der*_*uer 6

我们目前使用的一种黑客方法是将操作员放入该字段中:

    $query = Product::search($request->search);
        
    if ($request->min_price) {
        $query->where('price >', $request->min_price);
    }
    if ($request->max_price) {
        $query->where('price <', $request->max_price);
    }
Run Code Online (Sandbox Code Playgroud)

这样,Scout 就可以创建正确的(例如price >= {min_price})表达式。但请注意,这只是解决方法,并不一定适用于 Scout 支持的其他搜索引擎。

请观看 Scout 的 Meil​​isearch 驱动程序以了解其工作原理:https://github.com/laravel/scout/blob/9.x/src/Engines/MeiliSearchEngine.php#L163-L188