Laravel Scout using Meilisearch: How to set attributesToHighlight with paginate?

372 Views Asked by At

How can I use attributesToHighlight Meilisearch feature with Laravel Scout? I am able to get results in _formatted attribute when I do:

Page::search($search, function ($meilisearch, string $query, array $options) {
            $options['attributesToHighlight'] = ['content'];
            return $meilisearch->search($query, $options);
        })->raw()

But _formatted attribute disappears when I use pagination like:

Page::search($search, function ($meilisearch, string $query, array $options) {
            $options['attributesToHighlight'] = ['content'];
            return $meilisearch->search($query, $options);
        })
        ->paginate(5)

As a workaround, I'm using the following code to get the formatted content :

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;
        })
0

There are 0 best solutions below