Laravel Scout (Meilisearch) — Говорит, что импортированные данные, но не

#laravel #full-text-search #laravel-scout #meilisearch

Вопрос:

Я установил и настроил пакет meilisearch Laravel Scout.

Моя Модель:

 class Post extends Model
{
    use Searchable;
}
 

Когда я запускаю php artisan scout:import 'AppModelsPost' его, он возвращается:

 Imported [AppModelsPost] models up to ID: 5
All [AppModelsPost] records have been imported.
 

Но когда я проверяю индекс, он пуст. Почему?

Индекс создается, но данные не импортируются.

Та же конфигурация пакета meilisearch и Scout работает для некоторых других моделей.

Комментарии:

1. Привет! Что возвращает статус обновления? docs.meilisearch.com/reference/api/…

Ответ №1:

Я сам только что столкнулся с этой проблемой и наткнулся на ваш вопрос. Я полагаю, вы не указываете, что должно храниться в индексе, не так ли?

Т. е. в вашей модели вы должны создать toSearchableArray метод, подобный приведенному ниже…

 public function toSearchableArray(): array
{
    return [
        'name' => $this->name,
    ];
}
 

В любом случае, оказывается, что ваш toSearchableArray метод также должен возвращать первичный ключ в массиве, иначе запись не будет проиндексирована.

 public function toSearchableArray(): array
{
    return [
        'id'   => $this->getKey(), // this *must* be defined
        'name' => $this->name,
    ];
}
 

Комментарии:

1. Спасибо, это исправило мои проблемы 🙂

2. Для этой конкретной модели я скрывал первичный ключ, и удаление его было на месте. Спасибо!

Ответ №2:

Вы можете попробовать установить:

 SCOUT_QUEUE=false
 

Чтобы убедиться, что с вашими очередями нет проблем, и запустите импорт еще раз.

Комментарии:

1. Я пробовал это раньше, и это не сработало.

Ответ №3:

Для индекса вы можете попробовать:

php artisan scout:index posts

Других проблем с вашими очередями нет, и запустите импорт снова.

Если у вас есть SCOUT_QUEUE=true , то, пожалуйста, начните использовать свою очередь php artisan queue:work --daemon , и ваши данные начнут импортироваться.