Manticore + Laravel + Scout

от автора

Простая интеграция поискового движка 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *