• Время чтения ~2 мин
  • 29.05.2025

ElasticLens — это пакет Laravel, который интегрирует Elasticsearch с моделями Eloquent. Он предоставляет расширенные возможности поиска, сохраняя при этом знакомый синтаксис Laravel. Он работает в тандеме с пакетом laravel-elasticsearch , позволяя разработчикам выполнять полнотекстовый поиск, управлять миграцией индексов и легко настраивать сопоставления полей.

User::search('loves espressos');

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

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

сохраняя при этом простоту Eloquent. Вот несколько более продвинутых примеров:

// Basic search term with limits
User::viaIndex()->searchTerm('nara')
    ->where('state','active')
    ->limit(3)->get();

// Phrase search
User::viaIndex()->searchPhrase('Ice bathing')
    ->orderByDesc('created_at')
    ->limit(5)->get();

// Boosting term fields
User::viaIndex()->searchTerm('David',['first_name^3', 'last_name^2', 'bio'])->get();

// Geolocation filtering
User::viaIndex()->where('status', 'active')
    ->filterGeoPoint('home.location', '5km', [0, 0])
    ->orderByGeo('home.location',[0, 0])
    ->get();

Все приведенные выше фрагменты кода взяты из примеров readme проекта.

Настройка

модели После установки этого пакета он работает путем добавления 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 пространстве имен, которое обрабатывает индексацию Elasticsearch для User модели.

Основные особенности

  • Настройка без настройки: Быстрая интеграция Elasticsearch с минимальными настройками.
  • Красноречивые запросы: Используйте знакомый синтаксис Eloquent для сложных поисковых запросов.
  • Сопоставление пользовательских полей: Определите способ индексации полей и отношений.
  • Миграция индексов: Управляйте версиями индекса Elasticsearch и миграцией.
  • Модели-наблюдатели: Автоматическая синхронизация изменений из моделей Eloquent с Elasticsearch.
  • Инструменты Artisan CLI: Команды для управления работоспособностью индекса, миграций и т. д.

Подробнее

Подробную документацию и расширенное использование можно найти в репозитории ElasticLens на GitHub. Официальная документация содержит обширные примеры и подробную информацию обо всех доступных функциях.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297

Мы сбиваем «шахеды» каждый день. Каждое сбитие — спасённые жизни. Нам нужна мобильность: бус или прицеп. Каждый донат = ещё одна ночь под защитой.

🚐 Сбор на микроавтобус для моего экипажа, полк 1020 🎯 Цель: 500 000 ₴
🔗 Ссылка на банку 💳 4441 1111 2546 4663