Laravel操作ElasticSearch

news/2025/1/8 1:47:42/

在Laravel项目中操作ElasticSearch可以通过以下步骤来实现,通常会借助相应的ElasticSearch客户端扩展包。

### 安装ElasticSearch客户端包
在Laravel项目中,常用的是 `elasticsearch/elasticsearch` 这个PHP客户端库来与ElasticSearch进行交互,使用Composer进行安装:
```bash
composer require elasticsearch/elasticsearch
```### 配置ElasticSearch连接
#### 1. 创建配置文件
在Laravel项目的 `config` 目录下创建 `elasticsearch.php` 配置文件(如果不存在的话),内容示例如下:
```php

php"><?phpreturn ['hosts' => [['host' => env('ELASTICSEARCH_HOST', 'localhost'),'port' => env('ELASTICSEARCH_PORT', 9200),'scheme' => env('ELASTICSEARCH_SCHEME', 'http')]],
];


```
这里通过环境变量来获取ElasticSearch服务器的主机地址、端口以及通信协议等信息,你可以在项目的 `.env` 文件中根据实际情况设置对应环境变量的值,比如:
```bash
ELASTICSEARCH_HOST=your_elasticsearch_host
ELASTICSEARCH_PORT=9200
ELASTICSEARCH_SCHEME=http
```#### 2. 创建服务提供者(可选)
可以创建一个自定义的服务提供者来更方便地管理ElasticSearch客户端实例的注入等操作,例如创建 `ElasticSearchServiceProvider.php` 文件放在 `app/Providers` 目录下:
```php

php"><?phpnamespace App\Providers;use Elasticsearch\ClientBuilder;
use Illuminate\Support\ServiceProvider;class ElasticSearchServiceProvider extends ServiceProvider
{public function register(){$this->app->singleton('elasticsearch', function () {$config = config('elasticsearch');return ClientBuilder::create()->setHosts($config['hosts'])->build();});}
}


```
然后在 `config/app.php` 文件的 `providers` 数组中注册这个服务提供者:
```php

php">'providers' => [// 其他服务提供者App\Providers\ElasticSearchServiceProvider::class,
],


```### 基本操作示例
#### 索引操作
- **创建索引**:
在控制器或者其他合适的类方法中,可以这样创建索引:
```php

php"><?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;
use Elasticsearch\Client;class ElasticSearchController extends Controller
{protected $client;public function __construct(Client $client){$this->client = $client;}public function createIndex(){$params = ['index' =>'my_index','body' => ['settings' => ['number_of_shards' => 1,'number_of_replicas' => 0]]];$response = $this->client->indices()->create($params);return response()->json($response);}
}


```
- **查看索引是否存在**:
```php

php">public function checkIndexExists()
{$params = ['index' =>'my_index'];$exists = $this->client->indices()->exists($params);return response()->json(['exists' => $exists]);
}


```
- **删除索引**:
```php

php">public function deleteIndex()
{$params = ['index' =>'my_index'];$response = $this->client->indices()->delete($params);return response()->json($response);
}


```#### 文档操作
- **插入文档**:
```php

php">public function insertDocument()
{$params = ['index' =>'my_index','type' => '_doc','id' => '1','body' => ['title' => '示例文档标题','content' => '这是示例文档的内容']];$response = $this->client->index($params);return response()->json($response);
}


```
- **获取文档**:
```php

php">public function getDocument()
{$params = ['index' =>'my_index','type' => '_doc','id' => '1'];$response = $this->client->get($params);return response()->json($response);
}


```
- **更新文档**:
```php

php">public function updateDocument()
{$params = ['index' =>'my_index','type' => '_doc','id' => '1','body' => ['doc' => ['title' => '更新后的示例文档标题']]];$response = $this->client->update($params);return response()->json($response);
}


```
- **删除文档**:
```php

php">public function deleteDocument()
{$params = ['index' =>'my_index','type' => '_doc','id' => '1'];$response = $this->client->delete($params);return response()->json($response);
}


```#### 查询操作
例如进行一个简单的匹配查询:
```php

php">public function search()
{$params = ['index' =>'my_index','type' => '_doc','body' => ['query' => ['match' => ['title' => '示例']]]];$response = $this->client->search($params);return response()->json($response);
}


```

以上就是在Laravel项目中操作ElasticSearch的基本流程和常见操作示例,实际应用中可以根据具体业务需求进一步拓展和优化这些操作,比如构建更复杂的查询逻辑、进行数据的批量处理等。 


http://www.ppmy.cn/news/1561129.html

相关文章

【MATLAB】【Simulink仿真】向模型中添加自定义子系统

一、子系统的创建 1、启动Simulink&#xff0c;选择【新建】——【空白子系统】——【创建子系统】 2、选择【浏览组件库】&#xff0c;创建使能子系统。 3、保存至当前工作目录。 二、建立模型仿真 1、启动Simulink&#xff0c;选择【新建】——【空白子系统】——【创建子系…

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(五)

****非斜体正文为原文献内容&#xff08;也包含笔者的补充&#xff09;&#xff0c;灰色块中是对文章细节的进一步详细解释&#xff01; 五、 解释评估&#xff08;Explanation Evaluation&#xff09; 在前面的章节中&#xff0c;我们介绍了不同的解释技术和它们的用途&#…

oceanbase 集群启动操作

1.启动ocp服务&#xff08;一般启动操作系统会自动启动ocp&#xff09; 1.1确认observer直接的时间同步 2.登录ocp重启observer 服务器ocp agent 2.1选择主机→需要重启的机器→重启ocp agent 2.2观察重启ocp agent任务运行情况 2.3确认主机状态为在线 2.4确认所有主机在线 3…

工业5G路由器让无人机数据传输 “飞” 起来

无人机上搭载5G通信模块&#xff0c;该模块与工业5G路由器通过5G网络建立连接。无人机的飞控系统、传感器以及摄像头等设备采集到的数据&#xff0c;如飞行姿态、高度、速度、环境图像、温度湿度等&#xff0c;经过编码、加密、调制等处理后转换为适合5G网络传输的信号形式。 …

【leetcode100】二叉树的直径

1、题目描述 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 示例 1&#xff1a; 输入&#xff1a;root [1,2…

Python中的简单爬虫

文章目录 一. 基于FastAPI之Web站点开发 1. 基于FastAPI搭建Web服务器2. Web服务器和浏览器的通讯流程3. 浏览器访问Web服务器的通讯流程4. 加载图片资源代码 二. 基于Web请求的FastAPI通用配置 1. 目前Web服务器存在问题2. 基于Web请求的FastAPI通用配置 三. Python爬虫介绍 …

小程序发版后,强制更新为最新版本

为什么要强制更新为最新版本&#xff1f; 在小程序的开发和运营过程中&#xff0c;强制用户更新到最新版本是一项重要的策略&#xff0c;能够有效提升用户体验并保障系统的稳定性与安全性。以下是一些主要原因&#xff1a; 1. 功能兼容 新功能或服务通常需要最新版本的支持&…

微信小程序校园自助点餐系统实战:从设计到实现

随着移动互联网的发展&#xff0c;越来越多的校园场景开始智能化、自助化。微信小程序凭借其轻量化、便捷性和强大的生态支持&#xff0c;成为了各类校园应用的首选工具之一。今天&#xff0c;我们将通过实际开发一个微信小程序“校园自助点餐系统”来展示如何设计和实现这样一…