Простая интеграция поискового движка Manticore Search с фреймворком Laravel при помощи Laravel Scout и неофициального драйвера manticore-scout-engine.
Не смотря на то, что драйвер неофициальный, он прекрасно справляется со всеми задачами, какие от него требуются, а именно:
-
Элементарная установка и настройка.
-
Удобный индексатор данных. Не надо писать свой для RT таблиц.
-
Автоматическое управление индексами при манипуляциях с базой данных.
-
Простой поиск с базовыми возможностями и даже чуточку больше.
Переходим к действиям.
Устанавливаем manticore
Устанавливаем необходимые библиотеки
composer require laravel/scout composer require romanstruk/manticore-scout-engine
Добавляем файлы конфигурации в папку configs
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider" php artisan vendor:publish --provider="RomanStruk\ManticoreScoutEngine\ManticoreServiceProvider"
В .env указываем нужный драйвер
SCOUT_DRIVER=manticore
Настройки модели
Для каждой таблицы базы данных будет своя таблица-индекс в мантикоре.
В модели, для которой необходим поиск, нужно определить поля, их типы и настройки таблиц-индексов для manticore.
Помимо этого, нужно определить toSearchableArray
, чтобы указать какие данные будут сохраняться в мантикору. Здесь же, при необходимости, можно модифицировать эти данные. Если этого не сделать, то scout будет пытаться сохранить все данные из таблицы, от этого могут возникать ошибки.
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Laravel\Scout\Searchable; class Post extends Model { use Searchable; public function scoutIndexMigration(): array { return [ 'fields' => [ 'id' => ['type' => 'bigint'], 'name' => ['type' => 'text'], 'category' => ['type' => 'string stored indexed'], ], 'settings' => [ 'min_prefix_len' => '3', 'min_infix_len' => '3', 'expand_keywords' => '1', ], ]; } // Какие данные сохранять и их модификация при необходимости public function toSearchableArray(): array { return [ 'id' => $this->id, 'name' => $this->name, 'category' => $this->category_id, ]; } }
Создание таблицы-индекса в manticore
Будут использованы настройки, определенные в scoutIndexMigration
.
php artisan manticore:index "App\Models\Post"
Импорт (индексация) данных
После вышеуказанных действий, вызов методов save
или create
будет автоматически создавать, сохранять и удалять данные из таблицы-индекса мантикоры. Т.е. данные будут автоматически синхронизироваться между вашей базой данных и индексами поисковой системы manticore.
Если у вас уже есть какие-то данные в таблицах, их легко можно импортировать в мантикору.
php artisan scout:import "App\Models\Post"
Если данных нет, этот шаг выполнять необязательно.
Поиск
После выполненных действий уже можно производить поиск.
Post::search('Поисковый запрос')->get();
Помимо обычного поиска, драйвер так же предоставляет функции с реализацией нечеткого поиска, автодополнения, исправления орфографии, выделения слов из запроса и даже обратные запросы (Percolate queries). Подробности в github репозитории.
Если хочется чего-то большего, у вас специфические поисковые запросы, всегда можно подключиться напрямую и делать что угодно.
Заключение
Не смотря на удивительно малую популярность manticore-scout-engine, этот драйвер для Laravel Scout реализует простую и удобную интеграцию Manticore с Laravel. Библиотека незаслуженно остаётся без внимания, что даже какое-то упоминание сложно найти. К тому же, официальную поддержку от разработчиков Laravel Scout вряд ли стоит ожидать в ближайшем будущем.
Всё перечисленное есть в документациях Manticore, Laravel и репозитории этого драйвера. Цель статьи только-лишь показать, что это всё уже возможно и эффективно работает без официальной поддержки от разработчиков Laravel Scout.
ссылка на оригинал статьи https://habr.com/ru/articles/841150/
Добавить комментарий