Laravel Scout集成Meilisearch:如何结合分页设置attributesToHighlight?
在Laravel Scout中使用Meilisearch的attributesToHighlight功能
问题说明
使用Laravel Scout结合Meilisearch时,若调用raw()方法执行搜索并指定attributesToHighlight参数,能正常从返回结果的_formatted属性中获取高亮后的内容:
Page::search($search, function ($meilisearch, string $query, array $options) { $options['attributesToHighlight'] = ['content']; return $meilisearch->search($query, $options); })->raw();
但改用paginate()分页方法时,返回结果里的_formatted属性会消失:
Page::search($search, function ($meilisearch, string $query, array $options) { $options['attributesToHighlight'] = ['content']; return $meilisearch->search($query, $options); })->paginate(5);
临时解决方法
可以通过paginateRaw()获取原始分页结果,再借助through()方法处理结果集,提取_formatted中的高亮内容:
Page::search(request('search') ?? "", function ($meilisearch, string $query, array $options) { $options['attributesToHighlight'] = ['content']; $options['attributesToCrop'] = ['content']; return $meilisearch->search($query, $options); })->paginateRaw(5)->withQueryString()->through(function ($value, $key) { if ($key == 'hits') { return array_map(fn($item) => [ 'book_id' => $item['book_id'], 'book_name' => Book::find($item['book_id'])->name, 'page_id' => $item['id'], 'page_no' => $item['no'], 'page_content' => $item['_formatted']['content'], ], $value); } return $value; });
内容的提问来源于stack exchange,提问作者MAMProgr
相关产品推荐
相关产品推荐

