Laravel操作ElasticSearch

打印 上一主题 下一主题

主题 848|帖子 848|积分 2544

在Laravel项目中操作ElasticSearch可以通过以下步骤来实现,通常会借助相应的ElasticSearch客户端扩展包。
### 安装ElasticSearch客户端包
在Laravel项目中,常用的是 `elasticsearch/elasticsearch` 这个PHP客户端库来与ElasticSearch举行交互,利用Composer举行安装:
```bash
composer require elasticsearch/elasticsearch
```### 配置ElasticSearch连接
#### 1. 创建配置文件
在Laravel项目的 `config` 目次下创建 `elasticsearch.php` 配置文件(如果不存在的话),内容示例如下:
```php
  1. <?php
  2. return [
  3.     'hosts' => [
  4.         [
  5.             'host' => env('ELASTICSEARCH_HOST', 'localhost'),
  6.             'port' => env('ELASTICSEARCH_PORT', 9200),
  7.             'scheme' => env('ELASTICSEARCH_SCHEME', 'http')
  8.         ]
  9.     ],
  10. ];
复制代码

```
这里通过环境变量来获取ElasticSearch服务器的主机地址、端口以及通信协议等信息,你可以在项目的 `.env` 文件中根据实际环境设置对应环境变量的值,好比:
```bash
ELASTICSEARCH_HOST=your_elasticsearch_host
ELASTICSEARCH_PORT=9200
ELASTICSEARCH_SCHEME=http
```#### 2. 创建服务提供者(可选)
可以创建一个自定义的服务提供者来更方便地管理ElasticSearch客户端实例的注入等操作,例如创建 `ElasticSearchServiceProvider.php` 文件放在 `app/Providers` 目次下:
```php
  1. <?php
  2. namespace App\Providers;
  3. use Elasticsearch\ClientBuilder;
  4. use Illuminate\Support\ServiceProvider;
  5. class ElasticSearchServiceProvider extends ServiceProvider
  6. {
  7.     public function register()
  8.     {
  9.         $this->app->singleton('elasticsearch', function () {
  10.             $config = config('elasticsearch');
  11.             return ClientBuilder::create()
  12.                 ->setHosts($config['hosts'])
  13.                 ->build();
  14.         });
  15.     }
  16. }
复制代码

```
然后在 `config/app.php` 文件的 `providers` 数组中注册这个服务提供者:
```php
  1. 'providers' => [
  2.     // 其他服务提供者
  3.     App\Providers\ElasticSearchServiceProvider::class,
  4. ],
复制代码

```### 基本操作示例
#### 索引操作
- **创建索引**:
在控制器或者其他合适的类方法中,可以如许创建索引:
```php
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Elasticsearch\Client;
  5. class ElasticSearchController extends Controller
  6. {
  7.     protected $client;
  8.     public function __construct(Client $client)
  9.     {
  10.         $this->client = $client;
  11.     }
  12.     public function createIndex()
  13.     {
  14.         $params = [
  15.             'index' =>'my_index',
  16.             'body' => [
  17.                 'settings' => [
  18.                     'number_of_shards' => 1,
  19.                     'number_of_replicas' => 0
  20.                 ]
  21.             ]
  22.         ];
  23.         $response = $this->client->indices()->create($params);
  24.         return response()->json($response);
  25.     }
  26. }
复制代码

```
- **查看索引是否存在**:
```php
  1. public function checkIndexExists()
  2. {
  3.     $params = [
  4.         'index' =>'my_index'
  5.     ];
  6.     $exists = $this->client->indices()->exists($params);
  7.     return response()->json(['exists' => $exists]);
  8. }
复制代码

```
- **删除索引**:
```php
  1. public function deleteIndex()
  2. {
  3.     $params = [
  4.         'index' =>'my_index'
  5.     ];
  6.     $response = $this->client->indices()->delete($params);
  7.     return response()->json($response);
  8. }
复制代码

```#### 文档操作
- **插入文档**:
```php
  1. public function insertDocument()
  2. {
  3.     $params = [
  4.         'index' =>'my_index',
  5.         'type' => '_doc',
  6.         'id' => '1',
  7.         'body' => [
  8.             'title' => '示例文档标题',
  9.             'content' => '这是示例文档的内容'
  10.         ]
  11.     ];
  12.     $response = $this->client->index($params);
  13.     return response()->json($response);
  14. }
复制代码

```
- **获取文档**:
```php
  1. public function getDocument()
  2. {
  3.     $params = [
  4.         'index' =>'my_index',
  5.         'type' => '_doc',
  6.         'id' => '1'
  7.     ];
  8.     $response = $this->client->get($params);
  9.     return response()->json($response);
  10. }
复制代码

```
- **更新文档**:
```php
  1. public function updateDocument()
  2. {
  3.     $params = [
  4.         'index' =>'my_index',
  5.         'type' => '_doc',
  6.         'id' => '1',
  7.         'body' => [
  8.             'doc' => [
  9.                 'title' => '更新后的示例文档标题'
  10.             ]
  11.         ]
  12.     ];
  13.     $response = $this->client->update($params);
  14.     return response()->json($response);
  15. }
复制代码

```
- **删除文档**:
```php
  1. public function deleteDocument()
  2. {
  3.     $params = [
  4.         'index' =>'my_index',
  5.         'type' => '_doc',
  6.         'id' => '1'
  7.     ];
  8.     $response = $this->client->delete($params);
  9.     return response()->json($response);
  10. }
复制代码

```#### 查询操作
例如举行一个简单的匹配查询:
```php
  1. public function search()
  2. {
  3.     $params = [
  4.         'index' =>'my_index',
  5.         'type' => '_doc',
  6.         'body' => [
  7.             'query' => [
  8.                 'match' => [
  9.                     'title' => '示例'
  10.                 ]
  11.             ]
  12.         ]
  13.     ];
  14.     $response = $this->client->search($params);
  15.     return response()->json($response);
  16. }
复制代码

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

科技颠覆者

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表