akkurateio / laravel-search
Laravel应用程序的搜索包
Requires
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 数据并进行同步。