friendsofcat / opensearch-scout-driver-plus
OpenSearch Scout Driver 扩展
Requires
- php: ^7.4 || ^8.0
- friendsofcat/opensearch-scout-driver: ^2.1
Requires (Dev)
- friendsofcat/opensearch-migrations: ^2.0
- friendsofphp/php-cs-fixer: ^3.8
- laravel/legacy-factories: ^1.3
- laravel/scout: ^10.0
- orchestra/testbench: ^7.5
- phpstan/phpstan: ^1.6
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-19 21:14:31 UTC
README
为 OpenSearch Scout Driver 提供扩展。
内容
功能
OpenSearch Scout Driver Plus 支持
兼容性
当前版本的 OpenSearch Scout Driver Plus 已与以下配置进行了测试
- PHP 7.4-8.2
- OpenSearch 2.x
- Laravel 7.x-10.x
- Laravel Scout 7.x-10.x
安装
可以通过 Composer 安装此库
composer require friendsofcat/opensearch-scout-driver-plus
注意 此库不与 OpenSearch Scout Driver 一起工作。如果尚未安装,请按照以下步骤进行安装。如果您已经使用 OpenSearch Scout Driver,建议在安装 OpenSearch Scout Driver Plus 之前更新它
composer update friendsofcat/opensearch-scout-driver
安装库后,您需要将 OpenSearch\ScoutDriverPlus\Searchable
特性添加到您的模型中。如果某些模型已经使用标准 Laravel\Scout\Searchable
特性,您应将其替换为 OpenSearch Scout Driver Plus 提供的特性。
如果您想使用 OpenSearch Scout Driver Plus 与 Lumen 框架,请参阅 此指南。
使用
查询
在开始搜索模型之前,您应定义一个查询。您可以使用查询构建器或使用数组描述查询
use OpenSearch\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' ] ] ];
OpenSearch\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
- boostIndex
- collapse
- from
- highlight
- join
- load
- minScore
- postFilter
- size
- sort
- refineModels
- rescore
- refineModels
- source
- suggest
- trackScores
- trackTotalHits
- when
- explain
搜索结果
您可以通过将 execute
方法链接到构建器来检索搜索结果
$searchResult = Book::searchQuery($query)->execute();
$searchResult
提供了对匹配的命中、模型、文档等的轻松访问
$hits = $searchResult->hits(); $models = $searchResult->models(); $documents = $searchResult->documents(); $highlights = $searchResult->highlights();
您可以在 此页 上了解更多关于 $searchResult
对象的信息,并学习如何分页搜索结果。
自定义路由
如果您想为您的模型使用自定义分片路由,请重写searchableRouting
方法
class Book extends Model { use OpenSearch\ScoutDriverPlus\Searchable; public function searchableRouting() { return $this->user->id; } }
自定义路由会自动应用于所有索引和删除操作。
预加载关系
有时您需要使用相关数据来索引模型
class Book extends Model { use OpenSearch\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 OpenSearch\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
方法文档。
多个连接
您可以在客户端配置文件中配置到OpenSearch的多个连接。如果您想更改模型使用的连接,需要重写searchableConnection
方法
class Book extends Model { use OpenSearch\ScoutDriverPlus\Searchable; public function searchableConnection(): ?string { return 'books'; } }