jackardios / elastic-scout-driver-plus
Elastic Scout Driver 扩展
Requires
- php: ^7.4 || ^8.0
- babenkoivan/elastic-adapter: ^3.4
- babenkoivan/elastic-scout-driver: ^3.1
Requires (Dev)
- babenkoivan/elastic-migrations: ^3.3
- friendsofphp/php-cs-fixer: ^3.14
- laravel/legacy-factories: ^1.3
- laravel/scout: ^10.0
- orchestra/testbench: ^8.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.5
- dev-master
- v4.0.1
- v4.0.0
- v3.3.0
- v3.2.0
- v3.1.0
- v3.0.x-dev
- v3.0.0
- v2.6.0
- v2.5.1
- v2.5.0
- v2.4.0
- v2.3.0
- v2.2.0
- v2.1.0
- v2.0.1
- v2.0.0
- v1.18.1
- v1.18.0
- v1.17.0
- v1.16.0
- v1.15.0
- v1.14.0
- v1.13.0
- v1.12.0
- v1.11.1
- v1.11.0
- v1.10.1
- v1.10.0
- v1.9.0
- v1.8.0
- v1.7.0
- v1.6.0
- v1.5.1
- v1.5.0
- v1.4.0
- v1.3.0
- v1.2.1
- v1.2.0
- v1.1.0
- v1.0.1
- v1.0.0
- dev-dev
- dev-query-callback-feature
- dev-model-callback-feature
This package is auto-updated.
Last update: 2024-09-07 04:22:18 UTC
README
为 Elastic Scout Driver 提供扩展。
内容
功能
Elastic Scout Driver Plus 支持
兼容性
当前版本的 Elastic Scout Driver Plus 已与以下配置进行了测试
- PHP 7.4-8.x
- Elasticsearch 8.x
- Laravel 7.x-10.x
- Laravel Scout 7.x-10.x
安装
该库可以通过 Composer 安装
composer require babenkoivan/elastic-scout-driver-plus
注意,此库在没有 Elastic Scout Driver 的情况下无法工作。如果尚未安装,请按照以下链接中的安装步骤操作:[这里](https://github.com/babenkoivan/elastic-scout-driver#installation)。如果您已经使用 Elastic Scout Driver,建议您在安装 Elastic Scout Driver Plus 之前更新它。
composer update babenkoivan/elastic-scout-driver
安装库后,您需要将 Elastic\ScoutDriverPlus\Searchable
特性添加到您的模型中。如果某些模型已经使用了标准的 Laravel\Scout\Searchable
特性,则应将其替换为 Elastic Scout Driver Plus 提供的特性。
如果您想使用 Elastic Scout Driver Plus 与 Lumen 框架 一起使用,请参阅以下指南:[此指南](https://github.com/babenkoivan/elastic-scout-driver-plus/wiki/Lumen-Installation)。
使用方法
查询
在开始搜索模型之前,您应该定义一个查询。您可以使用查询构建器或使用数组描述查询。
use Elastic\ScoutDriverPlus\Support\Query; // using a query builder $query = Query::match() ->field('title') ->query('My book') ->fuzziness('AUTO'); // using a raw query $query = [ 'match' => [ 'title' => [ 'query' => 'My book', 'fuzziness' => 'AUTO' ] ] ];
Elastic\ScoutDriverPlus\Support\Query
工厂中的每个方法都会为相应的类型创建一个查询构建器。以下列出可用方法:
- bool
- exists
- fuzzy
- geoDistance
- ids
- matchAll
- matchNone
- matchPhrasePrefix
- matchPhrase
- match
- multiMatch
- nested
- prefix
- range
- regexp
- term
- terms
- wildcard
搜索参数
当查询定义后,您可以使用 searchQuery
方法开始新的搜索。
$builder = Book::searchQuery($query);
然后您可以链接其他参数,以使您的搜索请求更加精确。
$builder = Book::searchQuery($query) ->size(2) ->sort('price', 'asc');
构建器支持各种搜索参数并提供了一些有用的辅助函数。
- aggregate
- collapse
- explain
- from
- highlight
- join
- load
- minScore
- postFilter
- size
- sort
- setEloquentQueryCallback
- rescore
- source
- suggest
- trackScores
- trackTotalHits
- when
搜索结果
您可以通过将 execute
方法链接到构建器来检索搜索结果。
$searchResult = Book::searchQuery($query)->execute();
$searchResult
提供了对匹配的命中项、模型、文档等内容的轻松访问。
$hits = $searchResult->hits(); $models = $searchResult->models(); $documents = $searchResult->documents(); $highlights = $searchResult->highlights();
您可以在 [这里](https://github.com/Jackardios/elastic-scout-driver-plus/blob/HEAD/docs/search-results.md) 了解更多关于 $searchResult
对象的信息,并学习如何对搜索结果进行分页。
自定义路由
如果您想为模型使用自定义的分片路由,请覆盖 searchableRouting
方法,具体请参考自定义分片路由。
class Book extends Model { use Elastic\ScoutDriverPlus\Searchable; public function searchableRouting() { return $this->user->id; } }
自定义路由会自动应用于所有索引和删除操作。
预加载关系
有时您需要将相关数据与模型一起索引
class Book extends Model { use Elastic\ScoutDriverPlus\Searchable; public function toSearchableArray() { return [ 'title' => $this->title, 'price' => $this->price, 'author' => $this->author->only(['name', 'phone_number']), ]; } }
通过覆盖 searchableWith
方法,您可以提高批量操作的性能
class Book extends Model { use Elastic\ScoutDriverPlus\Searchable; public function toSearchableArray() { return [ 'title' => $this->title, 'price' => $this->price, 'author' => $this->author->only(['name', 'phone_number']), ]; } public function searchableWith() { return ['author']; } }
如果您正在寻找一种为与搜索查询匹配的模型预加载关系的方法,请查看构建器的 load
方法文档。
多个连接
您可以在客户端配置文件中配置到 Elasticsearch 的多个连接。如果您想更改模型使用的连接,需要覆盖 searchableConnection
方法。
class Book extends Model { use Elastic\ScoutDriverPlus\Searchable; public function searchableConnection(): ?string { return 'books'; } }