linux 下安装和使用Elasticsearch8+php的操作
首先安装
Elasticsearch8版本不需要jdk环境,就是JVAV的环境,他本身的压缩文件里就包含了固定的jdk
去官网
1、下载
Elasticsearch 的官方地址: https://www.elastic.co/cn/
下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
我这里下载的是elasticsearch-8.7.1-linux-x86_64.tar,看你服务器版本来下载
然后下载到根目录下的/usr/local/es (这个ES是我自己创建的目录)
解压之后
然后运行,记得不要用root用户运行,他会报错
fatal exception while booting Elasticsearchjava.lang.RuntimeException: can not run elasticsearch as root
我们新建一个用户
useradd elasticsearch
(需要密码的就自己再写个命令password *******密码
)
然后给这个新建的用户指定权限
chown elasticsearch:elasticsearch elasticsearch-8.7.1
(记得cd到这个目录才给权限了,不然找不到指定文件)
切换用户
su elasticsearch
然后改下配置(在elasticsearch-8.7.1/config)
在elasticsearch.yml
修改network.host: 0.0.0.0
打开端口
http.port: 9200
保存之后输入命令
/bin/elasticsearch
(在elasticsearch-8.7.1目录执行,然后用的是你新建的那个用户执行命令)
如果出现闪退然后没有大概的报错信息就只有ERROR:Elasticsearch exited unexpectedly
大概就是你的内存那些不足,去config/jvm.options
-Xms2G
-Xms2G
修改
我这里改成
-Xms512m
-Xms512m
保存退出,还有些问题报错可以参考下别的,有的是要把系统内存数量提高,还有的是自己本身就有java环境导致冲突的可以搜索如何解决es与jdk依赖强的问题
参考https://blog.csdn.net/qq_46533159/article/details/127916528 这里大致讲了报错信息
再次运行/bin/elasticsearch
如果加上-d就表示后台运行,不加上你关掉终端就会关闭elasticsearch
运行成功就会出现终端的下面没有命令可写,需要重新开终端才能输其他的命令,这就是表示成功了
然后在浏览器输入你的Ip:9200 (如果出现如下图就表示成功,如果不出现查看下阿里云或者腾讯云的安全组有没有添加上9200的端口)
这个图就是跟数据库做对比
然后呢就开始用php来玩这个了
使用
composer require 'elasticsearch/elasticsearch'
来下载到自己拓展里
然后新建一个文件(我这里用的是thinkphp所以不需要在引入autoload了)
<?php
use Elasticsearch\ClientBuilder;
//这里是连接Elasticsearch,如果你设置了ES密码就查下怎么连
$client = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
/**
添加的内容body是你需要的内容,跟数据库查出来的数据一样,id可以不写,会随机生成,index相当于数据库,type相当于数据库的表,但是8.x之后就取消掉了,只剩下index了
想配合数据库就把数据库查出来把内容写在params里面就行了,跟增删改查差不多
**/
$params = [
'body' => [
'id' => 3,
'title' => "这里是index1里面的标题",
'content' => "真是应答了内里面的东西真不是你的,啊啊啊哦哦哦额鹅鹅鹅"
],
'id' => 'product_3',
'index' => 'products_index',
// 'type' => 'products_type'
];
//添加索引
$response = $client->index($params);
//查下单个文档索引,get好像必须要携带id的
$where = ['index'=>"products_index","id"=>"product_3"];
$response = $client->get($params);
/**
搜索,我们用Elasticsearch不就是为了搜索吗,然后这玩意挺牛的,比如有三个内容
一个是:真是应答了内里面的东西真不是你的,啊啊啊哦哦哦额鹅鹅鹅
一个是:这里是内容
一个是:真是应答了内里面的东西
如果你给的查询条件里是$where = "这里是"
他就自动给你把连在一直的字排到第一给你,然后拆开 (“这里” “是” ) (“这” “里是”) (“这” “里” “是”)来查然后排序好给你
**
//可以自己多添加点索引内容来玩玩多试试就知道了
$map = ['index'=>"products_index"];
$map ['body']['query']['match']['content'] = '这里是';
$info = $client->search($map);//搜索
其他的功能参考下别的博主,有删除和更新新增修改的
参考:
https://www.cnblogs.com/lxwphp/p/15452423.html
https://blog.csdn.net/weixin_43986172/article/details/123975402
https://www.jianshu.com/p/a7c9e27d1ed3
这三都是php的
然后想理解ES入门,可以参考这个
https://blog.csdn.net/Y_hanxiong/article/details/127261296
https://blog.csdn.net/lxw1844912514/article/details/129980490
都写的挺好的
ES8浏览器上输入http://IP:9200/index/_doc/id(这个_doc是8版本固定的)
ES7浏览器上输入http://IP:9200/index/type/id(这个是7版本之前的写法)