You need to enable JavaScript to run this app. Laravel Scout结合Meilisearch如何基于非可搜索列过滤结果
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Scout结合Meilisearch如何基于非可搜索列过滤结果

Laravel Scout 对接 Meilisearch 非可搜索字段过滤解决方案

核心逻辑

Meilisearch 存在三类互相独立的字段配置规则,互不影响:

  • toSearchableArray 定义的是会同步到 Meilisearch 索引的字段,只是同步范围,不决定搜索/过滤能力
  • searchableAttributes 定义的是用户输入关键词时,会参与全文匹配的字段
  • filterableAttributes 定义的是可以作为过滤条件使用的字段

你需要的效果只需要把created_at加入同步范围,但是排除出可搜索字段,同时加入过滤字段即可。

具体操作步骤

  1. 修改toSearchableArray,加入created_at字段
public function toSearchableArray() {
    $array = Arr::only(
        $this->toArray(),
        ['id','title', 'link', 'raw_text', 'subchan', 'nsfw', 'created_at']
    );
    
    return $array;  
}
  1. 在Comment模型中定义Meilisearch的索引属性配置(Laravel Scout 9+ 原生支持)
// 定义用户搜索时参与匹配的字段,不包含created_at
public function getSearchableAttributes(): array
{
    return ['title', 'link', 'raw_text', 'subchan', 'nsfw'];
}

// 定义可作为过滤条件的字段,加入created_at
public function getFilterableAttributes(): array
{
    return ['created_at', 'nsfw'];
}

如果你使用的是低于9.0版本的Laravel Scout,可以直接通过Meilisearch的管理面板或者API手动修改对应索引的searchableAttributes和filterableAttributes配置,效果一致。

  1. 同步索引配置并重新导入数据
# 同步新的索引属性配置到Meilisearch
php artisan scout:sync-index-settings

# 重新导入Comment数据,把之前缺失的created_at字段同步到索引
php artisan scout:import "App\Models\Comment"

效果验证

配置完成后你的原有过滤代码可以正常运行,同时用户搜索任意关键词时,不会匹配到created_at字段的内容。

// 过滤逻辑正常生效
Comment::search($query, ['filters' => 'created_at > 795484800'])->get();

内容的提问来源于stack exchange,提问作者Felix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 09:54:04