- PVSM.RU - https://www.pvsm.ru -

Manticore + Laravel + Scout

Простая интеграция поискового движка Manticore Search с фреймворком Laravel при помощи Laravel Scout и неофициального драйвера manticore-scout-engine [1].

Не смотря на то, что драйвер неофициальный, он прекрасно справляется со всеми задачами, какие от него требуются, а именно:

  • Элементарная установка и настройка.

  • Удобный индексатор данных. Не надо писать свой для RT таблиц.

  • Автоматическое управление индексами при манипуляциях с базой данных.

  • Простой поиск с базовыми возможностями и даже чуточку больше.

Переходим к действиям.

Устанавливаем manticore

Устанавливаем необходимые библиотеки

composer require laravel/scout
composer require romanstruk/manticore-scout-engine

Добавляем файлы конфигурации в папку configs

php artisan vendor:publish --provider="LaravelScoutScoutServiceProvider"
php artisan vendor:publish --provider="RomanStrukManticoreScoutEngineManticoreServiceProvider"

В .env указываем нужный драйвер

SCOUT_DRIVER=manticore

Настройки модели

Для каждой таблицы базы данных будет своя таблица-индекс в мантикоре.
В модели, для которой необходим поиск, нужно определить поля, их типы [4] и настройки таблиц-индексов [5] для manticore.
Помимо этого, нужно определить toSearchableArray, чтобы указать какие данные будут сохраняться в мантикору. Здесь же, при необходимости, можно модифицировать эти данные. Если этого не сделать, то scout будет пытаться сохранить все данные из таблицы, от этого могут возникать ошибки.

namespace AppModels;

use IlluminateDatabaseEloquentModel;
use LaravelScoutSearchable;

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 "AppModelsPost"

Импорт (индексация) данных

После вышеуказанных действий, вызов методов save или create будет автоматически создавать, сохранять и удалять данные из таблицы-индекса мантикоры. Т.е. данные будут автоматически синхронизироваться между вашей базой данных и индексами поисковой системы manticore.

Если у вас уже есть какие-то данные в таблицах, их легко можно импортировать в мантикору.

php artisan scout:import "AppModelsPost"

Если данных нет, этот шаг выполнять необязательно.

Поиск

После выполненных действий уже можно производить поиск.

Post::search('Поисковый запрос')->get();

Помимо обычного поиска, драйвер так же предоставляет функции с реализацией нечеткого поиска, автодополнения, исправления орфографии, выделения слов из запроса и даже обратные запросы (Percolate queries). Подробности в github репозитории [1].

Если хочется чего-то большего, у вас специфические поисковые запросы, всегда можно подключиться напрямую и делать что угодно.

Заключение

Не смотря на удивительно малую популярность manticore-scout-engine, этот драйвер для Laravel Scout реализует простую и удобную интеграцию Manticore с Laravel. Библиотека незаслуженно остаётся без внимания, что даже какое-то упоминание сложно найти. К тому же, официальную поддержку от разработчиков Laravel Scout вряд ли стоит ожидать в ближайшем будущем.

Всё перечисленное есть в документациях Manticore, Laravel и репозитории этого драйвера. Цель статьи только-лишь показать, что это всё уже возможно и эффективно работает без официальной поддержки от разработчиков Laravel Scout.

Автор: svm

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/laravel/395688

Ссылки в тексте:

[1] manticore-scout-engine: https://github.com/RomanStruk/manticore-scout-engine

[2] Оф. инструкция: https://manticoresearch.com/install/

[3] Оф. документация: https://manual.manticoresearch.com/Installation/Installation

[4] поля, их типы: https://manual.manticoresearch.com/Creating_a_table/Data_types

[5] настройки таблиц-индексов: https://manual.manticoresearch.com/Creating_a_table/NLP_and_tokenization/Data_tokenization

[6] Источник: https://habr.com/ru/articles/841150/?utm_source=habrahabr&utm_medium=rss&utm_campaign=841150