百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Elasticsearch环境安装及php对接使用

toyiye 2024-08-24 00:30 4 浏览 0 评论

Elasticsearch

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。

安装

本文只介绍windows环境的使用及安装。

  • ? 进入官网: https://www.elastic.co/cn/downloads/elasticsearch
  • ? 下载对应版本:注意:下载对应的版本,版本号要跟php composer 里面的elasticsearch/elasticsearch 的版本号一致。




比如本次下载的 elasticsearch 为8.4版本,composer 包elasticsearch/elasticsearch也要8.4版本。否则在使用php客户端的时候会出错。

  • ? 解压安装包: 进入解压的文件,找到bin 目录,执行elasticsearch.bat

第一次执行应该会报错,因为默认是开启ssl认证和密码认证这些的。 需要进入config 目录,找到elasticsearch.yml 配置文件:




修改:xpack.security.enabled: true 为false
      xpack.security.http.ssl:
            enabled: true 为false
            
            
# 增加新的参数,这样head插件可以访问es
http.cors.enabled: true
http.cors.allow-origin: "*"            

保存,再次执行elasticsearch.bat,在浏览器中访问127.0.0.1:9200,有返回json表示成功



安装es可视化插件 elasticsearch-head

该插件需要node支持。

源代码下载:https://github.com/mobz/elasticsearch-head

  • ? 进入目录: 打开cmd控制窗口,或者用编辑器打开项目然后打开命令窗口。
  • ? 执行安装命令:npm install
  • ? 运行命令: npm run start

运行后,打开浏览器http://localhost:9100,查看界面。可以在数据浏览里面查看数据



laravel 对接使用

本文以laravel9为测试用例。使用scout包 作为laravel的全文检索。

  • ? 下载composer scout
composer require laravel/scout
  • ? 下载scout 可用的elasticsearch 驱动支持目前支持的驱动有:
composer require babenkoivan/elastic-scout-driver

composer require babenkoivan/elastic-scout-driver-plus

本文用的是 composer require babenkoivan/elastic-scout-driver

  • ? 安装完后:执行发布命令
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

此命令将会在你的 config 目录下 生成一个 scout.php 配置文件 你需要把scout驱动更改为es驱动:

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

生成es配置命令:

php artisan vendor:publish --provider="Elastic\Client\ServiceProvider"

此命令会生成es驱动配置文件config/elastic.client.php 更改对应的配置:

<?php declare(strict_types=1);

return [
    'default' => env('ELASTIC_CONNECTION', 'default'),
    'connections' => [
        'default' => [
            'hosts' => [
                env('ELASTIC_HOST', 'localhost:9200'),
            ],
        ],
    ],
];

laravel 模型中使用搜索引擎

用laravel 模型操作es,数据源其实是有两份的。数据库里面一份,es里面一份。es里面的数据跟数据库里面的数据其实是一样的。模型检索数据的时候,用到全文检索,就是去es里面查询,如果没有用到就在数据库里面查询。 同时模型在curd的时候,会自动同步到es里面。

  • ? 创建一个模型:

<?php

namespace App\Models;


use DateTimeInterface;
use App\Models\BaseModel as Model;
use Laravel\Scout\Searchable;


class Test extends Model
{
    use Searchable;

    protected $table='sys_test';

    protected function serializeDate(DateTimeInterface $date)
    {
        return $date->format('Y-m-d H:i:s');
    }

    /**
     * 获取与模型关联的索引的名称。
     *
     * @return string
     */
    public function searchableAs()
    {
        return 'laravel';
    }


}
  • ? 导入已有项目数据:

如果,你的项目中已经有数据在表中,需要把数据导入到es里面,就需要执行下面命令:

php artisan scout:import "App\Models\Test"
  • ? 使用:

使用跟正常laravel模型大致操作一样,搜索的时候用search

 //查询
 $data= Test::search('李')->get();
 dd($data->toArray());

官方包正常使用es

下载官方扩展

composer require elasticsearch/elasticsearch

注意:composer require elasticsearch/elasticsearch 版本需要跟 你下载的es安装包保持一致

# 我下载的8.4 版本,8.4版本需要 elastic/transport 8.4
composer require elasticsearch/elasticsearch ^8.4

本测试环境: php8.0 laravel9 composer2.2.8

添加配置文件:

添加配置文件:
config/database.php 里面加上如下配置:
 //es 配置
    'elastic'=>[
        'hosts' => explode(',',env('ELASTIC_HOST')),
    ]

env 添加配置:ELASTIC_HOST=http://127.0.0.1:9200

创建服务提供者:EsServiceProvider.php

<?php

namespace App\Providers;

use Elastic\Elasticsearch\ClientBuilder;
use Illuminate\Support\ServiceProvider;

class EsServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton('Es',function (){
            // 从配置文件读取 Elasticsearch 服务器列表
            $builder = ClientBuilder::create()->setHosts(config('database.elastic.hosts'));
            // 如果是开发环境
            if (app()->environment()==='local'){
                // 配置日志,Elasticsearch 的请求和返回数据将打印到日志文件中,方便我们调试
                $builder->setLogger(app('log')->driver());
            }

            return $builder->build();
        });
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

注册服务提供者:

config/app.php 里面加上刚才的服务提供者:

 App\Providers\EsServiceProvider::class, //es 搜索

使用:

//查询
$params = [
    'index' => 'laravel',
    'type' => 'sys_test',
    'id' => 2
];

$response = app('Es')->get($params);
dd($response->asArray());
  //更新
  $params = [
    'index' => 'laravel',
    'type' => 'sys_test',
    'id' => 2,
    'body' => [
        'doc' => [
            'name' => 'liceshi'
        ]
    ]
];
$response = app('Es')->update($params);
dd($response->getContents());

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码