es环境安装及php对接使用

news/2024/5/17 18:49:53

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 为falsexpack.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-drivercomposer 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里面。

  • 创建一个模型:

<?phpnamespace 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

<?phpnamespace 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());

http://www.mrgr.cn/p/50531475

相关文章

golang初学:交叉编译

go version go1.22.1 windows/amd64 Windows 11 + amd64 x86_64 x86_64 GNU/Linux ---序章 golang 支持 跨平台,支持的方式 是 在一个平台 编译其它平台的可执行程序。 本文 介绍 Windows 11(开发主机) 上 编译 Linux(目标主机) 上的可执行程序。#go build开发主机 和 目标…

DRF之三大认证

一、认证 1、自定义认证 在前面说的 APIView 中封装了三大认证,分别为认证、权限、频率。认证即登录认证,权限表示该用户是否有权限访问接口,频率表示用户指定时间内能访问接口的次数。整个请求最开始的也是认证。 (1)需求登陆认证 用户登陆成功--》签发token 以后需要登陆…

外包干了3天,技术就明显退步了。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

Vue入门到关门之Vue项目工程化

一、创建Vue项目 1、安装node环境官网下载,无脑下一步,注意别放c盘就行Node.js — Run JavaScript Everywhere (nodejs.org)需要两个命令npm---->pip node--->python装完检查一下,hello world检测,退出crtl+c2、搭建vue项目环境装cnpm 这个包,下载东西会快很多,装模…

QT 开发COM(ActiveX)组件基础介绍和方案验证

一、COM简介 1.1 COM是什么&#xff1f; COM&#xff0c;Component Object Model&#xff0c;即组件对象模型&#xff0c;是一种以组件为发布单元的对象模型&#xff0c;这种模型使各软件组件可以用一种统一的方式进行交互。COM 既提供了组件之间进行交互的规范&#xff0c;也…

BIO、NIO与AIO

文章目录 一 BIO同步阻塞案例BIO模式消息多发多收实现 二 NIONIO核心组件Buffer(缓冲区)Buffer常见方法缓冲区的数据操作直接内存与非直接内存 Channel(通道)channel常用操作 Selector(选择器)selector选择器处理流程NIO非阻塞式网络通信原理分析 NIO网络编程实现群聊系统服务端…

第6讲需求分析--uml用例图

用例图 一.识别参与者 参与者在系统外所以画图时画在框外。系统用例图比业务用例图更完善所以经常让画的是系统用例图。在商品销售系统里:参与者是顾客。 在会计系统里:参与者是商品销售系统。 二.关系 1.参与者之间 泛化关系子指向父 2.参与者和用例之间 关联关系3.用例和用…

AI大模型探索之路-训练篇10:大语言模型Transformer库-Tokenizer组件实践

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

认知提升的方法

认知提升的方法一、什么是认知 经验是对于过往经历的总结归纳,当把这种经验传授给别人时,这种经验对别人来说就是知识。所以,知识是人脑对客观事物的信息沉淀。 技能是人们通过练习而获得的动作方式和系统,例如操作技能中的PS技术、木工技术、电工技术、水工技术等,而能力…

万兴PDF专家 PDFelement Pro v10.3.8 破姐版!

&#x1f9d1;‍&#x1f4bb;万兴PDF专家 PDFelement Pro v10.3.8 破姐版 (https://docs.qq.com/sheet/DRVVxTHJ3RXJFVHVr)

QBXT五一集训DAY1笔记

\(Day 1\) \(ASCII\) 简单来说,\(ASCII\) 其实就是字符与数字之间的映射 比如说,\(a\) 的 \(ASCII\) 就是 \(97\) 模运算:% 来复习一下小学数学:\(a/b=c……d\) 这里的\(d\) 就是 \(a\) 除以 \(b\) 的余数,在计算机中,用%来表示 通过这个式子,我们进而得出 \(a=b*c+d\) …

POETIZE个人博客系统源码 | 最美博客

源码介绍 POETIZE个人博客系统源码 | 最美博客 这是一个 SpringBoot Vue2 Vue3 的产物&#xff0c;支持移动端自适应&#xff0c;配有完备的前台和后台管理功能。 网站分两个模块&#xff1a; 博客系统&#xff1a;具有文章&#xff0c;表白墙&#xff0c;图片墙&#xf…

c#胖东来小程序自动购物程序(接单,windows桌面程序、linux程序、网络应用等等)

一、程序效果 自动打开胖东来小程序,自动购物 二、实现 先截屏,然后利用opencv库识别下一步按键所在位置,然后使用mouse_event控制鼠标,模拟人的动作 第一步,截取屏幕static Bitmap CaptureScreen() {int screenWidth = Screen.PrimaryScreen.Bounds.Width;int screenHeig…

黑马点评项目个人笔记+项目优化调整

博客须知 本篇博客内容来源与黑马点评项目实战篇-16.用户签到-实现签到功能_哔哩哔哩_bilibili&#xff0c;作者对视频内容进行了整合&#xff0c;由于记笔记时图片使用的是本地路径&#xff0c;所以导致博客的图片无法正常显示&#xff0c;如果有图片需求可以下载上方的pdf须…

React复习笔记

基础语法 创建项目 借助脚手架&#xff0c;新建一个React项目(可以使用vite或者cra&#xff0c;这里使用cra) npx create-react-app 项目名 create-react-app是React脚手架的名称 启动项目 npm start 或者 yarn start src是源文件index.js相当于Vue的main.js文件。整个…

优先级翻转实验以及分析现象

优先级翻转实验以及分析现象 优先级翻转指的是高优先级的任务反而慢执行,低优先级的任务反而优先执行。优先级翻转在抢占式内核中是非常常见的,但是在实时操作系统中是不允许出现优先级翻转的,因为优先级翻转会破坏任务的预期顺序,可能会导致未知的严重后果。上图中三个任务…

十日冲刺其六

今天完成了:用户可以自主删除自己发表的空间动态 遇到的困难:不能在浏览空间时进行删除动态,限制因素较多 明天打算,优化一下动态删除功能

Swift - 可选项(Optional)

文章目录 Swift - 可选项&#xff08;Optional&#xff09;1. 可选项&#xff08;Optional&#xff09;2. 强制解包&#xff08;Forced Unwrapping&#xff09;3. 判断可选项是否包含值4. 可选项绑定&#xff08;Optional Binding&#xff09;5. 等价写法6. while循环中使用可选…

Day27:阻塞队列、Kafka入门、发送系统通知、显示系统

阻塞队列BlockingQueue BlockingQueue 解决线程通信的问题。阻塞方法:put、take。 生产者消费者模式 生产者:产生数据的线程。消费者:使用数据的线程。 &#xff08;Thread1生产者&#xff0c;Thread2消费者&#xff09; 实现类 ArrayBlockingQueueLinkedBlockingQueuePr…

React + 项目(从基础到实战) -- 第十期

目标 学会react 状态管理工具 使用redux管理用户状态 Context 跨层级传递,不像props层层传递类似于Vue的provide/inject用于:切换主题颜色,切换语言 useReducer useState 的替代方案 简化版的redux MobX 1. MobX 介绍 MobX 中文文档 声明式的修改数据 , 像vue state ac…