Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Чим відрізняються драйвери database і collection у Laravel Scout і коли їх достатньо?

Scout дає єдиний API пошуку для моделей (Post::search('laravel')->paginate()), а сам пошук виконує рушій: Meilisearch, Typesense, Algolia - або власна база даних.

Два рушії не потребують жодного зовнішнього сервісу.

Рушій database:

SCOUT_DRIVER=database
  • шукає прямо в таблицях через повнотекстові індекси MySQL/PostgreSQL та умови LIKE;
  • окремого індексування немає - дані завжди актуальні, scout:import не потрібен;
  • стратегію пошуку для колонок можна задати атрибутами:
use Laravel\Scout\Attributes\{SearchUsingFullText, SearchUsingPrefix};

#[SearchUsingPrefix(['id', 'email'])]
#[SearchUsingFullText(['title', 'body'])]
public function toSearchableArray(): array
{
    return ['id' => $this->id, 'title' => $this->title, 'body' => $this->body];
}

SearchUsingPrefix шукає текст% (може використати звичайний індекс), SearchUsingFullText - через повнотекстовий індекс, решта колонок - %текст%.

Рушій collection:

SCOUT_DRIVER=collection
  • завантажує всі записи моделі з бази й фільтрує їх у PHP;
  • працює з будь-якою базою, включно з SQLite, - зручно для тестів і прототипів;
  • для кількох сотень записів - нормально, для таблиці на сотні тисяч - пам'ять і час ростуть лінійно.

Порівняння:

collection database Meilisearch/Typesense
інфраструктура нічого нічого окремий сервер
обсяг даних сотні записів десятки-сотні тисяч мільйони
стійкість до опечаток ні ні так
ранжування, фасети, підсвічування ні обмежено так
актуальність миттєва миттєва після індексування

Практичний підхід: почати з database - код пошуку однаковий для всіх рушіїв, тож коли знадобиться стійкість до опечаток чи релевантність, достатньо змінити драйвер і проіндексувати дані. А collection - у тестах, щоб не піднімати пошуковий сервер.

Докладніше в документації: Scout: рушії database і collection

Схожі питання