• Час читання ~2 хв
  • 29.05.2025

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

User::search('loves espressos');

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

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

Цей підхід дозволяє виконувати складні запити, User використовуючи потужні пошукові функції Elasticsearch, зберігаючи при цьому простоту 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