使用FacetFilters进行Laravel Scout搜索?

时间:2017-09-18 17:57:44

标签: php laravel algolia laravel-scout

如您所知,在搜索方法使用where()后使用numericFilter语句。我正在尝试使用字符串过滤来过滤搜索结果。

如何在搜索语句中使用Facet Filter?

2 个答案:

答案 0 :(得分:10)

我很高兴回答我自己的问题。首先,很难找到任何有关Laravel Scout的文档。如果要使用字符串参数过滤搜索结果。即使它也很难找到答案。我逐行检查了整个图书馆。最后,结果让我感到自豪。

如果你想用字符串参数过滤你的结果,你需要为你的search()方法设计回调函数,并在那里注入 FacetFilters 。简单地说,让我们假设你拥有Posts模型,您正在使用Algolia,并且您在其上键入了枚举category列。您可以使用以下代码过滤博客搜索结果。

$post = Post::search($query, function ($algolia, $query, $options) use ($category){
    $new_options = [];
    if (!is_null($type)) {
        $new_options = ["facetFilters"=>"category_name:".$category];
    }
    return $algolia->search($query, array_merge($options,$new_options));
});

答案 1 :(得分:0)

根据algolia文档,您可以像这样修改搜索参数:

$results = Product::search($q)->with(
    [
        'facets' => ['*'],
        'facetFilters' => [$facetFilters],
    ]
)->paginate(24);

https://www.algolia.com/doc/framework-integration/laravel/searching/server-side-search/