Meilisearch-laravel-scout: Пропустить поиск по ID

Созданный на 6 апр. 2021  ·  5Комментарии  ·  Источник: meilisearch/meilisearch-laravel-scout

Привет,

При создании toSearchableArray для конкретной модели, если в окончательный массив не включен ID , я не могу импортировать данные с помощью php artisan scout:import "App\Book" . Но если я включу ID , тогда он также станет доступен для поиска по ID , от чего я бы хотел избежать. Как правильно отключить поиск по ID ?

Пример кода:

    public function toSearchableArray()
    {
        $array = $this->toArray();

        foreach(array_keys($array) as $key) {
            //if I unset ID also, I won't be able to import table data
            if(in_array($key, ['id', 'title', 'name'])) continue;
            unset($array[$key]);
        }

        return $array;
    }

Самый полезный комментарий

Привет @milosevicn ,

->toSearchableArray() определяет сохраненные данные в MeiliSearch для определенного документа (объекта). Пропуск id приведет к тому, что в поиске будут недоступны для обнаружения элементы, потому что по умолчанию id является первичным ключом, используемым для идентификации документа.

Чтобы MeiliSearch не выполнял поиск по всем полям, рассмотрите возможность расширения функциональных возможностей этого пакета и установки searchAttributes в MeiliSearch. Вы можете найти руководство по этому поводу здесь .

Все 5 Комментарий

Привет @milosevicn ,

->toSearchableArray() определяет сохраненные данные в MeiliSearch для определенного документа (объекта). Пропуск id приведет к тому, что в поиске будут недоступны для обнаружения элементы, потому что по умолчанию id является первичным ключом, используемым для идентификации документа.

Чтобы MeiliSearch не выполнял поиск по всем полям, рассмотрите возможность расширения функциональных возможностей этого пакета и установки searchAttributes в MeiliSearch. Вы можете найти руководство по этому поводу здесь .

@mmachatschek Извините за беспокойство, но я не хотел открывать для этого новый выпуск. Это может быть связано с моим вопросом наверху.
Когда я добавляю документы с помощью команды php artisan scout:import , все работает так, как должно, но когда я делаю то же самое, используя /indexes/:index_uid/documents route ( ->addDocuments() ), он не уважает toSearchableArray() правила. Поэтому, если я попытаюсь добавить всю модель, будут добавлены все столбцы.
Я, вероятно, смог бы преодолеть это, выбрав определенные столбцы при выполнении запроса, но есть ли способ заставить саму функцию addDocuments() знать о toSearchableArray() ?

Привет @milosevicn!

этот пакет в основном является оболочкой для библиотеки PHP MeiliSearch и расширяет Laravel Scout.

При добавлении документов «вручную» вся магия, которую предоставляет Scout, например, добавление новых объектов в индекс или обновление существующих с определенными полями и т. Д., Теряется, потому что вы пропускаете эти шаги.

Есть ли у вас конкретное намерение добавлять документы вручную?

Спасибо за ответ @mmachatschek

У меня есть мультитенантное приложение - два отдельных приложения (арендодатель и арендатор). Из-за этого я не могу использовать предопределенные функции Laravel Scout для автоматического обновления документов после того, как что-то добавляется в базу данных. Вот почему я использую веб-перехватчик, чтобы сообщить своему клиентскому приложению, когда что-то произошло в базе данных на самом деле у арендодателя (при создании / обновлении / удалении). Я хочу добавить эти документы, когда поймаю веб-перехватчик на клиенте

@milosevicn Я думаю, ты мог бы просто сделать $model->touch() . Это обновляет столбец updated_at модели, и в приложении клиента запускается событие updated . Затем прослушиватель событий Scout инициирует обновление индекса. Это сработает для вас?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

ctf0 picture ctf0  ·  7Комментарии

husonghua picture husonghua  ·  5Комментарии

Cannonb4ll picture Cannonb4ll  ·  6Комментарии

curquiza picture curquiza  ·  4Комментарии

dmyers picture dmyers  ·  14Комментарии