全局搜索

建议编辑

使用全文搜索

Orchid 通过 Laravel Scout 包提供全文搜索功能。该包为搜索 Eloquent 模型提供了一个抽象层,并要求您指定应用程序将使用的搜索驱动程序。这些驱动程序可以是 elasticsearch、algolia、sphinx 或其他解决方案。

要使您的模型在应用程序中可搜索,您必须在 Orchid 配置文件中注册它们。您可以通过在“search”数组中为每个要使其可搜索的模型添加一个新条目来实现。例如:

'search' => [
    \App\Models\Idea::class,
],

此示例使用了 presenters,强烈建议您熟悉它们。同时,请采取步骤从文档 Laravel Scout 中配置模型。

Presenter 用于显示搜索结果,它调用模型的 presenter() 方法:

namespace App;

use App\Orchid\Presenters\IdeaPresenter;
use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;

class Idea extends Model
{
    use Searchable;

    /**
     * 获取模型的 presenter。
     *
     * @return IdeaPresenter
     */
    public function presenter()
    {
        return new IdeaPresenter($this);
    }
    
    /**
     * 获取模型的可索引数据数组。
     *
     * @return array
     */
    public function toSearchableArray()
    {
        $array = $this->toArray();

        // 自定义数组...

        return $array;
    }
}

在代表中,我们指明了 Searchable 接口并定义了将返回用户显示值的方法,例如:

namespace App\Orchid\Presenters;

use Laravel\Scout\Builder;
use Orchid\Screen\Contracts\Searchable;
use Orchid\Support\Presenter;

class IdeaPresenter extends Presenter implements Searchable
{
    /**
     * @return string
     */
    public function label(): string
    {
        return 'Ideas';
    }

    /**
     * @return string
     */
    public function title(): string
    {
        return $this->entity->name;
    }

    /**
     * @return string
     */
    public function subTitle(): string
    {
        return '简短描述';
    }

    /**
     * @return string
     */
    public function url(): string
    {
        return url('/');
    }

    /**
     * @return string
     */
    public function image(): ?string
    {
        return null;
    }
    
    /**
     * @param string|null $query
     *
     * @return Builder
     */
    public function searchQuery(string $query = null): Builder
    {
        return $this->entity->search($query);
    }
    
    /**
     * @return int
     */
    public function perSearchShow(): int
    {
        return 3;
    }
}

自定义搜索查询

要自定义搜索查询,您可以重写默认的 searchQuery() 方法。该方法返回一个 Builder 实例,表示用于索引模型的查询。

public function searchQuery(string $query = null): Builder
{
    return $this->entity->search($query)->where('active', true);
}

在这里,在 searchQuery() 方法中,使用了 where() 方法来限制搜索仅限于活跃的模型。

我们的朋友