PHPackages                             joba/scout - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. joba/scout

ActiveLibrary[Search &amp; Filtering](/categories/search)

joba/scout
==========

The Hyperf Scout package.

3.1.5(1y ago)013MITPHPPHP &gt;=8.1

Since Aug 1Pushed 1y ago1 watchersCompare

[ Source](https://github.com/bigboss188/scout)[ Packagist](https://packagist.org/packages/joba/scout)[ RSS](/packages/joba-scout/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (14)Versions (7)Used By (0)

Hyperf 模型全文搜索组件
===============

[](#hyperf-模型全文搜索组件)

简介
--

[](#简介)

[`hyperf-ext/scout`](https://github.com/hyperf-ext/scout) 组件为 Hyperf 模型的全文搜索提供了基于 Elasticsearch 的简单的解决方案。通过使用模型观察者，组件会自动同步模型记录的搜索索引。

该组件移植自 [`Laravel Scout`](https://github.com/laravel/scout)，与 Laravel Scout 不同的是，为了提升使用体验并更好的与 Elasticsearch 结合，该组件移除了自定义驱动的特性，仅支持 Elasticsearch，同时针对 Elasticsearch 的特性在原来的基础上进行了诸多的优化，通过队列更新索引的方式也改为通过协程实现。

另外，组件在搜索查询构造器中通过 [`ongr/elasticsearch-dsl`](https://github.com/ongr-io/ElasticsearchDSL) 包来使用 Elasticsearch DSL 构建复杂的查询条件。

> 注意，组件依赖的 `elasticsearch/elasticsearch` 包版本为 `^7.9`，映射类型已被废弃并将在 `8.0` 中彻底移除，因此组件同样也不提供映射类型的支持，即一个模型对应一个索引。
>
> 使用独立的索引取代使用映射类型可以让数据更倾向于密集而非稀疏，并且由于同一个索引中的所有的文档表示为同一种实体，在通过全文搜索时打分的条件统计会更为精确。

安装
--

[](#安装)

```
composer require hyperf-ext/scout
```

> 该组件自动依赖了 [`hyperf-ext/elasticsearch`](https://github.com/hyperf-ext/elasticsearch) 组件来使用 Elasticsearch 客户端，请在本组件安装完成后发布此组件的配置。

Scout 安装完成后，使用 `vendor:publish` 命令来生成 Scout 配置文件。这个命令将在你的 `config/autoload` 目录下生成一个 `scout.php` 配置文件。

```
php bin/hyperf.php vendor:publish hyperf-ext/scout
```

最后，在你要做搜索的模型中添加 `HyperfExt\Scout\Searchable` Trait。这个 Trait 会自动注册一个模型观察者来保持模型和 Elasticsearch 的同步：

```
use Hyperf\Database\Model\Model;
use HyperfExt\Scout\Searchable;

class Post extends Model
{
    use Searchable;
}
```

### 默认配置

[](#默认配置)

```
[
    // 索引前缀
    'prefix' => env('SCOUT_PREFIX', ''),
    // 命令行操作时的协程并发数
    'concurrency' => env('SCOUT_CONCURRENCY', 100),
    // 控制批量操作文档时分块处理的数量
    'chunk' => [
        'searchable' => 500,
        'unsearchable' => 500,
    ],
    // 是否启用索引文档软删除
    'soft_delete' => true,
    // 控制索引、更新、删除等文档操作所做的更改何时对搜索可见，可能的值 true（或空字符串）、false、'wait_for'
    // 详细描述 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-refresh.html
    'document_refresh' => true,
];
```

配置模型
----

[](#配置模型)

### 配置 Elasticsearch 索引设置

[](#配置-elasticsearch-索引设置)

索引设置可以通过在模型中添加 `scoutSettings` 属性或重写 `getScoutSettings` 方法来配置：

```
