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

Laravel操作ElasticSearch

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

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

<?php

return [
    '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

namespace 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

<?php

namespace 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.kler.cn/a/468820.html

相关文章:

  • huggingface 下载方法 测试ok
  • (leetcode算法题)面试题 17.19. 消失的两个数字
  • Android 性能优化:内存优化(实践篇)
  • PYTHON与JAVA执行时间对比
  • 03、MySQL安全管理和特性解析(DBA运维专用)
  • 【信号滤波 (补充)】二阶陷波滤波代码推导过程(C++)
  • FFMPEG 保存实时流到本地文件
  • 【JVM】总结篇-运行时内存篇
  • 我用AI学Android Jetpack Compose之开篇
  • opengauss安装指南
  • IDEA配置maven和git并如何使用maven打包和git推送到gitlab
  • 如何让大模型不再“已读乱回”——RAG技术助力生成更精确的答案
  • NLP期末复习
  • 书生大模型入门第二节
  • 推荐系统重排:DPP 多样性算法
  • 科大讯飞android面试题及参考答案
  • Appium(二)--- ADB命令操作
  • 实时高保真人脸编辑方法PersonaMagic,可根据肖像无缝生成新角色、风格或场景图像。
  • 【数据库系列】Spring Boot 中整合 MyBatis-Plus详细步骤
  • 学习Video.js
  • 第四十三天|动态规划|子序列| 300.最长递增子序列 ,674. 最长连续递增序列,718. 最长重复子数组
  • DeepSeek-V3 正式发布,已在网页端和 API 全面上线,性能领先,速度飞跃。
  • 【第二部分--Python之基础】05 类与对象
  • 详细讲一下Canvas标签的基础使用和应用场景
  • 集成方案:基于慧集通的某客户多系统间集成简略方案(致远OA、NCC高级版、三方物业系统、发票税务系统等)
  • 模拟出一个三维表面生成表面点,计算体积,并处理边界点