ElasticLens: потужний Eloquent для Elasticsearch у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 30 травня, 2025
Досліджуйте можливості інтеграції Elasticsearch з Eloquent через пакет ElasticLens у Laravel! Ця стаття розкриє всі переваги цього потужного інструменту та навчить вас, як легко виконувати складні запити, використовуючи знайомий синтаксис Eloquent

ElasticLens — це пакет для Laravel, який інтегрує Elasticsearch з моделями Eloquent. Він надає розширені можливості пошуку, зберігаючи звичний синтаксис Laravel. Працює в парі з пакетом laravel-elasticsearch, що дає можливість розробникам виконувати повнотекстовий пошук, управляти міграціями індексів і налаштовувати відображення полів.

User::search('loves espressos');

ElasticLens впроваджує Index-Model, який віддзеркалює вашу базову модель Eloquent. Ця модель автоматично синхронізується з вашою базою даних, забезпечуючи відображення змін в індексі Elasticsearch. Наприклад, для моделі User буде створена відповідна модель IndexedUser, що дозволяє ефективно виконувати пошукові операції:

User::viaIndex()->searchPhrase('loves dogs')->where('status', 'active')->get();

Цей підхід дозволяє виконувати складні запити, використовучи потужні можливості пошуку Elasticsearch, зберігаючи простоту Eloquent. Ось кілька більш складних прикладів:

// Основний пошук з обмеженнями
User::viaIndex()->searchTerm('nara')->where('state', 'active')->limit(3)->get();
 
// Пошук за фразою
User::viaIndex()->searchPhrase('Ice bathing')->orderByDesc('created_at')->limit(5)->get();
 
// Підвищення ваги полів
User::viaIndex()->searchTerm('David', ['first_name^3', 'last_name^2', 'bio'])->get();
 
// Фільтрація за геолокацією
User::viaIndex()->where('status', 'active')->filterGeoPoint('home.location', '5km', [0, 0])->orderByGeo('home.location', [0, 0])->get();

Усі наведені приклади коду взято з документації проекту.

# Налаштування моделі

Після встановлення цього пакету просто додайте трейти Indexable до моделі, яку хочете індексувати в Elasticsearch:

use PDPhilip\ElasticLens\Indexable;
 
class User extends Eloquent implements Authenticatable, CanResetPassword
{
    use Indexable;
    // ...
}

Далі створіть індексну модель за допомогою команди php artisan lens:make User:

namespace App\Models\Indexes;
 
use PDPhilip\ElasticLens\IndexModel;
 
class IndexedUser extends IndexModel
{}

Ця команда генерує модель IndexedUser в просторі імен App\Models\Indexes, яка відповідає за індексування моделі User в Elasticsearch.

# Основні можливості

# Додаткова інформація

Для детальної документації та розширеного використання відвідайте GitHub репозиторій ElasticLens. Офіційна документація містить численні приклади та деталі всіх доступних можливостей.