laravel结合Elasticsearch的使用[PHPer菜菜的PHP技术分享篇]

laravel结合Elasticsearch的使用[PHPer菜菜的PHP技术分享篇],第1张

laravel结合Elasticsearch的使用[PHPer菜菜的PHP技术分享篇]

首先我们现在本地搭建一个laravel项目,在你的专门存放代码的目录下通过composer安装一个laravel新项目包。

composer create-project laravel/laravel elasticsearch_demo

安装完成后进入项目根目录,依次安装好elasticsearch所需的第三方扩展包

composer require  elasticsearch/elasticsearch //elasticsearch核心包

composer require tamayo/laravel-scout-elastic

composer require laravel/scout "^8.x-dev" --dev

php artisan vendor:publish


安装顺序不能弄错,否则会报错

在运行上面最后一条指令后,会出现这个界面:

 我们选择 9 就行啦!

之后我们要到config目录下的app.php文件中去添加上我们的elasticsearch服务

LaravelScoutScoutServiceProvider::class

然后,我们找到config目录下的scout.php文件,修改驱动为elasticsearch

'driver' => env('SCOUT_DRIVER', 'elasticsearch'),

并在下方添加驱动:

    'elasticsearch' => [
        'hosts' => [
            env('ELASTICSEARCH_HOSTS','http://127.0.0.1:9200')
        ],
        'index' => env('ELASTICSEARCH_INDEX','laravel_es_test'),
    ]

在.env文件中配置上你的elasticsearch服务器地址及索引名称

ELASTICSEARCH_HOSTS= 你的服务器地址:9200
ELASTICSEARCH_INDEX= 你创建的索引名称

接着我们在elasticsearch中创建好索引,当索引创建完毕后,我们就可以通过laravel的command进行索引的创建和初始化。

php artisan make:command EScreateIndexCommand

然后在Console/Kernel.php中挂载上生成的类

protected $commands = [
    AppConsoleCommandsEScreateIndexCommand::class
];

如果laravel版本在8.0以上可以跳过这个步骤。

来到我们创建的EScreateIndexCommand.php中,写入以下代码:

  
    protected $signature = 'es:create';
 
    public function handle(): array
    {
        $host = config('scout.elasticsearch.hosts');
        $index = config('scout.elasticsearch.index');
        $client = ClientBuilder::create()->setHosts($host)->build();

        if ($client->indices()->exists(['index' => $index])) {
            $this->warn("Index {$index} exists, deleting...");
            $client->indices()->delete(['index' => $index]);
        }

        $this->info("Creating index: {$index}");

        return $client->indices()->create([
            'index' => $index,
            'body' => [
                'settings' => [
                    'number_of_shards' => 1,
                    'number_of_replicas' => 0
                ],
                'mappings' => [
                    '_source' => [
                        'enabled' => true
                    ],
                    'properties' => [
                        'mapping' => [ // 字段的处理方式
                            'type' => 'keyword', // 字段类型限定为 string
                            'fields' => [
                                'raw' => [
                                    'type' => 'keyword',
                                    'ignore_above' => 256, // 字段是索引时忽略长度超过定义值的字段。
                                ]
                            ],
                        ],
                    ],
                ]
            ]
        ]);

    }

随后在控制台运行这个文件指令

php artisan es:create

这样我们索引也就弄好了!

接着,我们需要创建一个model对象来将我们数据填入elasticsearch索引中去。

php artian make:model Goods

随后编辑Goods文件如下:

 $this->name,
            'detail' => $this->detail
        ];
    }
}

请根据你自己的数据表情况而自行定义,我的仅供参考
紧接着运行指令,导入我们数据

php artisan scout:import "AppModelsgoods"

最后,我们创建一个控制器类,来测试我们的elasticsearch是否配置成功
创建控制器的步骤我就不做赘述,验证方法如下:

public function index(Request $request,string $name): JsonResponse
{
        $res = Goods::search($name)->get();
        return new JsonResponse($res);
}

打开浏览器访问我们创建的控制器:http://127.0.0.1:8000/goods/search/包包
返回结果如下:

[
  {
    "id": 1,
    "store_id": 2,
    "name": "2019新款新加坡限定情书包小 ck链条小包包潮时尚单肩斜挎包!!!!!!1",
    "price": "8520.00",
    "original_price": "9980.00",
    "detail": "

 

"   },   {     "id": 3,     "store_id": 2,     "name": "COACH 蔻驰女士Messenger牛皮单肩斜挎信封包女包包",     "price": "7998.00",     "original_price": "8000.00",     "detail": "


1

"   },   {     "id": 4,     "store_id": 2,     "name": "COACH_蔲驰包包女PVC大号单肩手提托特tote女包 58292",     "price": "1220.00",     "original_price": "1450.00",     "detail": "

    

"   },   {     "id": 5,     "store_id": 2,     "name": "Fion_菲安妮2019新款小众轻奢女包包 链条小方包 蜜蜂单肩斜挎包",     "price": "879.00",     "original_price": "1200.00",     "detail": "

      

 

"   },   {     "id": 13,     "store_id": 2,     "name": "JELLYTOYBOY潮牌包包女单肩包女包",     "price": "1152.00",     "original_price": "1500.00",     "detail": "


"   } ]

至此,我们在laravel中引入elasticsearch的工作就完成啦!!!!这也就意味着属于我们自己的搜索引擎成功搭建!
 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5656316.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存