编程

ElasticLens:Laravel 中 Eloquent 驱动的 Elasticsearch

49 2025-06-12 02:32:00

ElasticLens 是一个将 Elasticsearch 与 Eloquent 模型集成的 Laravel 包。它在提供高级搜索能力的同时,还维持了 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 的简单性。以下是一些更高级的示例:

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

模型设置

安装完该包后,可以通过将 Indexable trait 添加到你希望在 Eloquent 中进行索引的模型中,使之生效:

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
{}

该命令将在 App\Models\Indexes 命名空间中生成 IndexedUser 模型,它用于处理 User 模型的 Elasticsearch 索引。

主特性

  • 零配置设置:以最少的设置快速集成 Elasticsearch。
  • 类 Eloquent 查询:使用熟悉的 Eloquent 语法进行复杂的搜索查询。
  • 自定义字段映射:定义字段和关联的索引方式。
  • 索引迁移:管理 Elasticsearch 索引版本和迁移。
  • 模型观察者:自动将 Eloquent 模型的更改同步到 Elasticsearch。
  • Artisan CLI 工具:用于管理索引运行状况、迁移等的命令。

更多

有关详细文档和高级用法,请访问 ElasticLens GitHub 存储库。官方文档中有大量示例和所有可用功能的详细信息。