hi019/laravel-scout-typesense

此包已被废弃,不再维护。作者建议使用 https://github.com/typesense/laravel-scout-typesense-engine 包。

Typesense laravel/scout 引擎

dev-master 2021-07-04 16:04 UTC

This package is auto-updated.

Last update: 2021-07-06 20:33:05 UTC


README

这是 https://github.com/devloopsnet/laravel-scout-typesense-engine 的一个分支。

请使用 https://github.com/typesense/laravel-scout-typesense-engine

此仓库现已弃用。其大部分功能已在上面链接的官方 Scout Typesense 引擎中实现。

Laravel Scout Typesense Engine

适用于 laravel/scout 的 Typesense 引擎 https://github.com/typesense/typesense

laravel-scout-typesense-engine  socialcard

此包可轻松将全文搜索功能添加到您的模型中,适用于 Laravel 5.3 到 7.0。

内容

安装

您可以通过 composer 安装此包

添加服务提供者

// config/app.php
'providers' => [
    // ...
    hi019\LaravelTypesense\TypesenseServiceProvider::class,
],

请确保您已将 Laravel Scout 作为提供者添加,否则您将得到一个 "无法解决的依赖" 错误

// config/app.php
'providers' => [
    // ...
    Laravel\Scout\ScoutServiceProvider::class,
],

SCOUT_DRIVER=typesense 添加到您的 .env 文件中

然后您应该将 scout.php 配置文件发布到您的配置目录

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

在您的 config/scout.php 中添加

'typesense' => [
    'api_key'         => 'abcd',
    'nodes'           => [
      [
        'host'     => 'localhost',
        'port'     => '8108',
        'path'     => '',
        'protocol' => 'http',
      ],
    ],
    'nearest_node'    => [
        'host'     => 'localhost',
        'port'     => '8108',
        'path'     => '',
        'protocol' => 'http',
    ],
    'connection_timeout_seconds'   => 2,
    'healthcheck_interval_seconds' => 30,    
    'num_retries'                  => 3,
    'retry_interval_seconds'       => 1,
  ],

使用

在安装了 scout 和 Typesense 驱动后,您需要将 Searchable 特性添加到您想要进行搜索的模型中。此外,通过在模型中定义 toSearchableArray 方法并实现 TypesenseModel 来定义您想要进行搜索的字段。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use hi019\LaravelTypesense\Interfaces\TypesenseModel;
use Laravel\Scout\Searchable;

class Post extends Model implements TypesenseModel
{
    use Searchable;

    /**
     * Get the indexable data array for the model.
     *
     * @return array
     */
    public function toSearchableArray()
    {
        $array = $this->toArray();

        // Customize array...

        return $array;
    }

    public function getCollectionSchema(): array {
      return [
        'name' => $this->searchableAs(),
        'fields' => [
          [
            'name' => 'title',
            'type' => 'string',
          ],
          [
            'name' => 'created_at',
            'type' => 'int32',
          ],
        ],
        'default_sorting_field' => 'created_at',
      ];
    }

    public function typesenseQueryBy(): array {
      return [
        'name',
      ];
    }
    
}

然后,像这样与搜索服务同步数据:

php artisan scout:import App\\Post

之后,您可以使用以下方式搜索模型:

Post::search(' Bugs Bunny')>get();

通过查询添加

searchable() 方法会分块查询结果并将记录添加到您的搜索索引中。

$post = Post::find(1);

// 您也可以通过集合添加记录... $post->searchable();

// OR

$posts = Post::where('year', '>', '2018')>get();

// 您也可以通过集合添加记录... $posts->searchable();

作者

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 以获取更多信息。