当前位置: 首页 > news >正文

Laravel操作ElasticSearch

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

### 安装ElasticSearch客户端包
在Laravel项目中,常用的是 `elasticsearch/elasticsearch` 这个PHP客户端库来与ElasticSearch进行交互,使用Composer进行安装:
```bash
composer require elasticsearch/elasticsearch
```### 配置ElasticSearch连接
#### 1. 创建配置文件
在Laravel项目的 `config` 目录下创建 `elasticsearch.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

<?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

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


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

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


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

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


```#### 文档操作
- **插入文档**:
```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

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


```
- **更新文档**:
```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

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


```#### 查询操作
例如进行一个简单的匹配查询:
```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.lryc.cn/news/517704.html

相关文章:

  • 江科大STM32入门——SPI通信笔记总结
  • 微信小程序map组件所有markers展示在视野范围内
  • 深度解析 tanh ⁡ tanh 激活函数
  • 嵌入式入门Day38
  • 探索Rancher服务发现机制:容器世界的“导航仪”
  • 【ROS2】Qt事件循环和ROS2订阅机制一起使用有什么注意事项?
  • donet (MVC)webAPI 的接受json 的操作
  • Qt 界面外观
  • aws(学习笔记第二十二课) 复杂的lambda应用程序(python zip打包)
  • HTML课堂之搜索工具箱/讲师duluo
  • 当歌 - RSS 订阅分发平台开发
  • 学习threejs,导入wrl格式的模型
  • 使用GitLab+Jenkins搭建CICD执行环境
  • 使用vue-pdf预览pdf和解决pdf电子签章显示问题
  • 【Rust自学】11.3. 自定义错误信息
  • 05、Docker学习,常用安装:Mysql、Redis、Nginx、Nacos
  • RabbitMQ高级篇之MQ可靠性 数据持久化
  • leetcode 2274. 不含特殊楼层的最大连续楼层数 中等
  • Tauri教程-基础篇-第二节 Tauri的核心概念上篇
  • 大风车excel:怎么把题库导入excel?题库导入excel
  • Java 兼容读取WPS和Office图片,结合EasyExcel读取单元格信息
  • 电脑硬盘系统迁移及问题处理
  • 网关 + Nacos配置管理
  • 《Spring Framework实战》6:核心技术 4.1.IoC 容器
  • ModuleNotFoundError: No module named ‘audioop‘
  • STM32-笔记38-I2C-oled实验
  • 人大金仓实现主键自增.
  • h264之多视点mvc编码及解码过程(JMVC平台举例)
  • 小程序学习08—— 系统参数获取和navBar组件样式动态设置
  • 数据库环境安装(day1)