Laravel Packages

ElasticLens: Eloquent-Powered Elasticsearch for Laravel

Published
ElasticLens: Eloquent-Powered Elasticsearch for Laravel image

ElasticLens is a Laravel package that integrates Elasticsearch with Eloquent models. It provides advanced search capabilities while maintaining Laravel's familiar syntax. It works in tandem with the laravel-elasticsearch package, allowing developers to perform full-text searches, manage index migrations, and customize field mappings easily.

User::search('loves espressos');

ElasticLens introduces an Index-Model that mirrors your base Eloquent model. This model automatically synchronizes with your database, ensuring changes are reflected in your Elasticsearch index. For example, a User model would have a corresponding IndexedUser model, enabling efficient search operations:

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

This approach allows for complex queries using Elasticsearch's powerful search features while maintaining the simplicity of Eloquent. Here are a few more advanced examples:

// 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();

All of the above code snippets come from the project's readme examples.

Model Setup

Once you've installed this package, it works by adding the Indexable trait to a model you want to index in Elasticsearch:

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

Next, you can create an index model using the php artisan lens:make User command:

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

This command generates an IndexedUser model in the App\Models\Indexes namespace, which handles the Elasticsearch indexing for the User model.

Main Features

  • Zero Configuration Setup: Quickly integrate Elasticsearch with minimal setup.
  • Eloquent-Like Querying: Utilize familiar Eloquent syntax for complex search queries.
  • Custom Field Mapping: Define how fields and relationships are indexed.
  • Index Migrations: Manage Elasticsearch index versions and migrations.
  • Model Observers: Automatically sync changes from your Eloquent models to Elasticsearch.
  • Artisan CLI Tools: Commands for managing index health, migrations, and more.

Learn More

For detailed documentation and advanced usage, visit the ElasticLens GitHub repository. The official documentation has extensive examples and details of all available features.

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

masteringlaravel logo
Laravel Code Review

Get expert guidance in a few days with a Laravel code review

Visit Laravel Code Review

The latest

View all →
PayZephyr: One Payment API for Stripe, Paystack, and PayPal image

PayZephyr: One Payment API for Stripe, Paystack, and PayPal

Read article
Bifrost Turns One With AI Builds and New Workflows image

Bifrost Turns One With AI Builds and New Workflows

Read article
Preview Blade Templates in macOS Finder with Quick Blade image

Preview Blade Templates in macOS Finder with Quick Blade

Read article
Artisan Debugging Commands in Laravel Telescope 5.24.0 image

Artisan Debugging Commands in Laravel Telescope 5.24.0

Read article
Queue totalSize() and JobInterrupted Event in Laravel 13.31 image

Queue totalSize() and JobInterrupted Event in Laravel 13.31

Read article
Find Unexpected Test Inputs with Fuzz for Pest image

Find Unexpected Test Inputs with Fuzz for Pest

Read article