akkurateio/laravel-search

Laravel应用程序的搜索包

v0.1.3 2021-01-12 11:32 UTC

This package is auto-updated.

Last update: 2024-09-20 23:34:00 UTC


README

本包为 Akkurate Laravel 模板提供搜索引擎。

默认情况下,搜索通过 Spatie laravel-searchable 包在 Eloquent 模型的特定字段上执行。

如果这不足以满足项目的需求,此包允许设置 Elasticsearch 的索引。

安装

composer require akkurate/laravel-search

发布配置文件

php artisan vendor:publish --provider="Akkurate\LaravelSearch\LaravelSearchServiceProvider" --tag="config"

发布视图

php artisan vendor:publish --provider="Akkurate\LaravelSearch\LaravelSearchServiceProvider" --tag="views"

发布 Elasticsearch 视图组件的局部视图

php artisan vendor:publish --provider="Akkurate\LaravelSearch\LaravelSearchServiceProvider" --tag="akk4search"

发布结果页面的入口视图

php artisan vendor:publish --provider="Akkurate\LaravelSearch\LaravelSearchServiceProvider" --tag="entries"

Eloquent

配置

在 laravel-search 配置文件中,声明要搜索的模型和搜索的字段

'eloquent' => [
    'searchable' => [
        [
            'model' => \Akkurate\LaravelCore\Models\Account::class,
            'attributes' => ['name']
        ],
        [
            'model' => \Akkurate\LaravelCore\Models\User::class,
            'attributes' => ['firstname', 'lastname', 'email']
        ],
        [
            'model' => \Akkurate\LaravelBlog\Models\Article::class,
            'attributes' => ['title', 'overview', 'description']
        ],
        [
            'model' => \Akkurate\LaravelCrm\Models\Company::class,
            'attributes' => ['name', 'overview']
        ],
        [
            'model' => \Akkurate\LaravelCrm\Models\Contact::class,
            'attributes' => ['firstname', 'lastname', 'job']
        ],
        [
            'model' => \Akkurate\LaravelCrm\Models\Lead::class,
            'attributes' => ['reference', 'name', 'overview']
        ],
        [
            'model' => \Akkurate\LaravelFaq\Models\Question::class,
            'attributes' => ['title', 'content']
        ],
    ],
],

Elastic

配置

默认情况下,Elastic 版本未激活。在 app.js

import Akk4Search from 'akk4search_vuejs';
Vue.use(Akk4Search);

然后

npm run dev

在 .env

// Akkurare For Search
AKKURATE_SEARCH_ENABLED=true

// Credentials
AKKURATE_SEARCH_KEY=your_api_key

// Activation of indexing (for Akkurate ecosystem models) on the model AKKURATE_SEARCH_PACKAGE_MODEL=bool
AKKURATE_SEARCH_ADMIN_USER=true
AKKURATE_SEARCH_ADMIN_ACCOUNT=true
AKKURATE_SEARCH_BLOG_ARTICLE=true
AKKURATE_SEARCH_BLOG_THEMATIC=true
AKKURATE_SEARCH_BOOKMARK_ITEM=true
AKKURATE_SEARCH_BOOKMARK_CATEGORY=true
AKKURATE_SEARCH_CONTACT_ADDRESS=true
AKKURATE_SEARCH_CONTACT_EMAIL=true
AKKURATE_SEARCH_CONTACT_PHONE=true
AKKURATE_SEARCH_CRM_COMPANY=true
AKKURATE_SEARCH_CRM_CONTACT=true
AKKURATE_SEARCH_CRM_LEAD=true
AKKURATE_SEARCH_DOCUMENTATION_=true
AKKURATE_SEARCH_DOCUMENTATION_=true
AKKURATE_SEARCH_FAQ_QUESTION=true
AKKURATE_SEARCH_GLOSSARY_TERM=true
AKKURATE_SEARCH_HELPDESK_CATEGORY=true
AKKURATE_SEARCH_HELPDESK_TICKET=true
AKKURATE_SEARCH_HELPDESK_MEDIA_RESOURCE=true

在配置文件中添加观察者

创建观察者

php artisan search:make:observer Example

默认情况下,模型假设在 App\Models 中。

可以通过提供 --namespace 选项来更改路径。例如,如果模型 Example 在 Package\Models

php artisan search:make:observer Example --namespace=Package\\Models

填写要达到资源的 URL 模式(以生成资源出现在搜索结果中的链接)。

例如

"brain/{uuid}/admin/users/$user->id"

在配置文件中添加声明

'indexable' => [
    'my-custom-observer' => [
        'index' => true,
        'model' => \App\Models\AnyModel::class,
        'where' => [],
        'observer' => \App\Observers\Example::class,
        'route' => 'brain/{uuid}/admin/users'
        'key' => 'uuid'
        'name' => 'title',
        'suggest' => false,
        'env' => ['BACK'],
        'link' => 'show'
    ],
    ...
]

index: 模型是否应该被索引。

where: 在 search:sync 命令中,如果不希望将所有结果发送到 Elastic 数据库,可以填写一个 where 子句,例如['status' => 'active']

route: 资源访问模式,用于生成 CLI 中的 URL。

key: 定义用于访问资源的字段。默认为 'id',如果不存在,则可以设置为 'uuid'、'slug' 等。

name: 用于填充 Elastic 中名称字段的模型字段。

suggest: 在 FALSE 时,条目直接出现在结果中;在 TRUE 时,条目不直接出现在结果中,但用于提供相关结果。

env: 结果报告的环境。

link: 该模型的链接将指向的视图('编辑' 或 '显示')。

实体

模型中的一个函数允许为给定模型定义和更新实体(要索引的关系)。

public function getEntities()
{
    return []; // logic to be defined for each model 
}

示例:在 App\Models\User 模型上为每个 USER 定义一个 ACCOUNT 实体。

public function getEntities()
{
    return [
            'uuid' => $this->account->searchable->uuid,
            'name' => $this->account->searchable->name,
        ];
}

CLI

检查与 akk4search 的连接

php artisan search:check

显示观察到的模型列表

php artisan search:list

与 ElasticSearch 数据库同步数据

php artisan search:sync

测试关键词搜索

php artisan search:query subvitamine

生成新的观察者

php artisan search:make:observer

删除 Elastic 数据库中的数据

php artisan search:clear

删除观察模型的全部 elastic 数据(在 .env 中设置为 TRUE)及其 SQL 可搜索性

php artisan search:clear --all

删除与账户相关的全部 elastic 数据(相对于在 .env 中填写的键)及其 SQL 可搜索性。

php artisan search:clear --entities=ADMIN_ACCOUNT --entities=ADMIN_USER

删除与 doctype(s) 相关的全部 elastic 数据。必须手动删除可搜索性。

php artisan search:clear --sync 

删除观察模型的全部 elastic 数据并进行同步。