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 复制代码
<?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 复制代码
<?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

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

```### 基本操作示例

索引操作

  • **创建索引**:

在控制器或者其他合适的类方法中,可以这样创建索引:

```php

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

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的基本流程和常见操作示例,实际应用中可以根据具体业务需求进一步拓展和优化这些操作,比如构建更复杂的查询逻辑、进行数据的批量处理等。

相关推荐
fruge4 小时前
git上传 项目 把node_modules也上传至仓库了,在文件.gitignore 中忽略node_modules 依然不行
大数据·git·elasticsearch
一只哒布刘6 小时前
第六次作业
开发语言·php
寰宇软件6 小时前
PHP房屋出租出售高效预约系统小程序源码
前端·小程序·uni-app·vue·php
HUNAG-DA-PAO6 小时前
Redis存在线程安全吗?为什么?
redis·安全·php
ianozo7 小时前
BUU40 [安洵杯 2019]easy_serialize_php
android·开发语言·php
飞火流星020278 小时前
ElasticSearch公共方法封装
elasticsearch·搜索引擎·es鉴权·es代理访问·es公共方法封装·es集群访问·判断es索引是否存在
zgscwxd9 小时前
php session数据存储位置选择
开发语言·php
vvvae12349 小时前
Elasticsearch实战应用:从“搜索小白”到“数据侦探”的进阶之路
elasticsearch
yinbp9 小时前
bboss v7.3.5来袭!新增异地灾备机制和Kerberos认证机制,助力企业数据安全
大数据·elasticsearch·微服务·etl·restclient·bboss
m0_748255029 小时前
Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
spring boot·elasticsearch·jenkins