Laravel6 使用 ElasticSearch7.10

使用 laravel 官方扩展 Scout 结合 ES 官方 Elasticsearch-PHP

环境:Laravel6.0 /PHP7.2 (如果您使用 ES7.X 以上版本,上述环境是最低环境要求)
按顺序引入三个组件。

Elasticsearch-PHP:

首先保证 elasticsearch/elasticsearch 的版本与 ES 版本一致。
它的文档在

Laravel6 使用 Elastic7.10

Laravel6 使用 Elastic7.10

Laravel6 使用 Elastic7.10

在安装部分,它要求 PHP 7.1.0 or higher,并且

Laravel6 使用 Elastic7.10

因此我直接拉取 elasticsearch/elasticsearch 的最新版本即可。

composer require elasticsearch/elasticsearch
"elasticsearch/elasticsearch": "~7.0"

Scout

Laravel Scout 为 Eloquent 模型的全文搜索提供了基于驱动的简单的解决方案。这时候我们需要提供一个连接 ES 的驱动 tamayo/laravel-scout-elastic

Laravel6 使用 Elastic7.10

由于要兼容 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"

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 方法,它的用法是返回 truefalse,这样对某些数据进行 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 协议》,转载必须注明作者和本文链接
welcome come back
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
95
粉丝
24
喜欢
156
收藏
348
排名:324
访问:2.9 万
私信
所有博文
社区赞助商