ElasticLens:Laravel 中 Eloquent 驱动的 Elasticsearch
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 存储库。官方文档中有大量示例和所有可用功能的详细信息。