linux 下安装和使用Elasticsearch8+php的操作

发布时间 2023-05-06 17:39:20作者: 亚索会代码

首先安装

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版本之前的写法)