在 Laragon 中为 Laravel 配置 Elasticsearch 的核心是打通本地 ES 服务、PHP 客户端与 Laravel 应用三者连接:需手动安装并启动 ES(推荐 8.15+ 单节点),配置 HTTPS/基础认证,通过 elasticsearch/elasticsearch:^8.0 客户端连接,禁用 SSL 校验(开发环境),并安装 IK 分词器以支持中文搜索。

在 Laragon 环境中为 Laravel 配置 Elasticsearch,核心是打通本地 ES 服务、PHP 客户端、Laravel Scout(可选)三者之间的连接。Laragon 本身不内置 Elasticsearch,需手动集成,但部署比生产环境简单得多。
一、启动并验证本地 Elasticsearch 服务
Laragon 支持一键安装 Elasticsearch 插件(通过“Addons”菜单),但更推荐用官方方式确保版本可控:
- 下载对应版本的 Elasticsearch(推荐 8.15 或 8.16,与 Laravel 10+/PHP 8.1+ 兼容)
- 解压后修改
config/elasticsearch.yml,启用 HTTPS 和基础认证(开发可简化):xpack.security.enabled: true<br>xpack.security.http.ssl.enabled: true<br>xpack.security.transport.ssl.enabled: true<br>discovery.type: single-node
- 启动服务:
bin\elasticsearch.bat(Windows) - 访问
https://localhost:9200,输入默认账号elastic/ 密码(首次启动日志末尾会打印临时密码,或改用elasticsearch-reset-password -u elastic重置)
二、Laravel 项目中安装并配置客户端
不要用已停更的第三方 Scout 驱动(如 tamayo/laravel-scout-elastic),直接使用官方客户端 + Scout 扩展或原生调用:
- 执行命令安装(Laravel 10+ 必须用 ^8.0):
composer require elasticsearch/elasticsearch:^8.0 - 在
config/services.php中添加配置块:'elasticsearch' => [<br> 'hosts' => ['https://localhost:9200'],<br> 'basic_authentication' => [<br> 'username' => 'elastic',<br> 'password' => 'your_actual_password'<br> ],<br> 'ssl_verification' => false // 仅开发环境关闭证书校验<br>],
- 测试连接(可新建 Artisan 命令或在 Tinker 中运行):
$client = \Elastic\Elasticsearch\ClientBuilder::create()<br> ->setHosts(config('services.elasticsearch.hosts'))<br> ->setBasicAuthentication(...config('services.elasticsearch.basic_authentication'))<br> ->setSSLVerification(false)<br> ->build();<br>dd($client->info());
三、选择搜索实现方式:Scout 还是原生客户端?
两者都可行,但适用场景不同:
-
用 Scout(适合基础全文检索):
– 安装laravel/scout:composer require laravel/scout
– 发布配置:php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
– 在.env中设:SCOUT_DRIVER=meilisearch(注意:Scout 官方不支持 ES,必须自定义驱动或换方案)→ 实际建议跳过 Scout,避免抽象层失真 -
用原生客户端(推荐,尤其需高亮/聚合/复杂 bool 查询):
– 创建app/Services/ElasticsearchService.php封装常用方法(search、index、delete)
– 模型中不依赖Searchable,而是按需构造 DSL 查询体
– 示例搜索关键词 + 过滤上架状态:$params = [<br> 'index' => 'products',<br> 'body' => [<br> 'query' => [<br> 'bool' => [<br> 'must' => [['multi_match' => ['query' => $kw, 'fields' => ['name^3', 'description']]]],<br> 'filter' => [['term' => ['on_sale' => true]]]<br> ]<br> ]<br> ]<br>];<br>$response = $this->client->search($params);
四、中文搜索关键:分词器配置
ES 默认不支持中文分词,必须安装 IK 分词器并映射字段:
- 进入 Elasticsearch
bin目录,执行:elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.15.0/elasticsearch-analysis-ik-8.15.0.zip - 重启 ES 服务
- 创建索引时指定 mapping(例如产品 title 字段):
PUT /products<br>{<br> "mappings": {<br> "properties": {<br> "name": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_smart" },<br> "category_path": { "type": "keyword" }<br> }<br> }<br>} - 确保模型导出到 ES 的数据中,
name字段是字符串类型,且不含 HTML 标签(入库前用strip_tags()处理)
不复杂但容易忽略:Laragon 下路径和端口通常没问题,真正卡住的往往是 SSL 认证、基础账号密码没配对、IK 没装或 mapping 没生效。每步做完都用 Kibana 或 curl 验证一次,比盲目改代码更高效。


















