Laravel6 使用 ElasticSearch7.10
使用 laravel 官方扩展 Scout 结合 ES 官方 Elasticsearch-PHP 。
环境:Laravel6.0 /PHP7.2 (如果您使用 ES7.X 以上版本,上述环境是最低环境要求)
按顺序引入三个组件。
Elasticsearch-PHP:
首先保证 elasticsearch/elasticsearch
的版本与 ES
版本一致。
它的文档在
在安装部分,它要求 PHP 7.1.0 or higher
,并且
因此我直接拉取 elasticsearch/elasticsearch 的最新版本即可。
composer require elasticsearch/elasticsearch
"elasticsearch/elasticsearch": "~7.0"
Scout
Laravel Scout 为 Eloquent 模型的全文搜索提供了基于驱动的简单的解决方案。这时候我们需要提供一个连接 ES
的驱动 tamayo/laravel-scout-elastic。
由于要兼容 elasticsearch/elasticsearch
的版本,所以只能选择 8.1
/8.0
版本。
直接拉取最新版本即可,同时注意要求 PHP 版本 >= 7.2,laravel/scout >=8.0 。而 laravel/scout 8.0 版本不再支持 Laravel5.x ,这也是我选择 Laravel6.0
版本的原因。直接拉取最新的版本即可。
composer require laravel/scout
"laravel/scout": "^8.4",
composer require tamayo/laravel-scout-elastic
"tamayo/laravel-scout-elastic": "^8.0"
2024/12/27 tamayo/laravel-scout-elastic已经废弃,可以使用的包有 github.com/babenkoivan/scout-elast... (即将废弃)
github.com/babenkoivan/elastic-sco... 配合 github.com/babenkoivan/elastic-cli...
(新)
scout 配置
Scout 全文搜索《Laravel 6 中文文档》
github.com/ErickTamayo/laravel-sco...
通过文档比较容易的完成配置,补充的是 ES7.10
放弃了 type
,默认的 type
名称是 _doc
。即通过 http://xxx.com:9200/hots_index/_doc/1
检索到 id=1 的数据。
#Model;
use Searchable;
public function searchableAs() {
return 'hots_index'; // 这并非type,而是索引名称
}
#config/scout.php
'elasticsearch' => [
// 这里已经没有了index名称的配置
'hosts' => [
[
'host' => env('ELASTICSEARCH_HOST', '127.0.0.1'),
'port' => env('ELASTICSEARCH_PORT', '9200'),
]
],
]
scout 用法
如果不需要对特别的字段类型做 mapping
,直接填充数据即可,会自动创建 mapping
php artisan scout:import "App\Post"
文档中介绍了 shouldBeSearchable
方法,它的用法是返回 true
或 false
,这样对某些数据进行 searchable()
或者 save()
时会遵循这个方法。
public function shouldBeSearchable()
{
return $this->is_hidden == 0 ? true : false;
}
2021.06.01更
query中带有非法字符串,结果直接报错,所以你对搜索的内容必须要先做处理
$pattern = '/(\+|-|&|\||!|\(|\)|\{|}|\[|]|\^|"|~|\*|\?|:|;|~|\/)/';
$replace = ''; //替换空字符
//$replace = '\\\$1'; //或者转义
$newStr = preg_replace($pattern, $replace, $str);
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: