php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎

反诈示警:如遇到文章内跳转至别的网站或产生需要交钱,交易等行为,均为诈骗行为,请谨慎对待。对于网上兼职、刷单、刷信誉的就是诈骗,请勿相信!需要提供身份证明、短信验证和短信链接点击都是诈骗, 请不要提供!同时请下载“国家反诈中心”App能自查自检,规避诈骗电话,免遭损失。

文章目录


开发环境

  • Linux x86_64
  • Nginx
  • Mysql 8.0
  • PHP 7.3
  • CentOS 7.9
  • Elasticsearch 7.13.2
  • IK Analysis for Elasticsearch 7.13.2
  • Node v14.16.1
  • Laravel 5.8.*

效果展示

标题关键字自动标红,简介关键字自动标红;


开发前准备及注意事项

  • 服务器配置,最低要求1核心2G内存 推荐2核心4G内存
  • 安装nodejs环境,用于支持elasticsearch-head可视化数据管理组件
  • 到ES官网下载ES安装包,以及与ES版本相同的IK分词插件包注意:ik分词插件必须与es的版本保持一致,否则将导致ES无法正常启动!

部署与安装

安装ES到服务器

  1. 前往ES官网下载Linux版本的ES安装包 官方下载链接: https://www.elastic.co/cn/downloads/elasticsearch
    php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图,来源:资源仓库www.zycang.com
  2. 将安装包上传到Linux服务器并进行解压缩操作 注意:将压缩包解压到自定义目录即可,就和win10解压文件一样
    php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图1,来源:资源仓库www.zycang.com
    解压后ES文件目录结构长这样
    php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图2,来源:资源仓库www.zycang.com

为ES分配新用户并给新用户分配对应权限

  1. 在Linux系统中新建一个用户,用来启动ES(为什么新建用户?因为root用户是无法启动ES的,所以需要为ES新建一个用户)
  • Linux新建用户,命令格式(useradd 用户名)
    命令:useradd user-es
  • 将ES目录分配给新创建的user-es用户,命令格式:(chown 用户名:用户名 -R /要分配的目录路径)
    命令:chown user-es:user-es -R /www/server/Elasticsearch

问题1:为什么分配的路径是“/www/server/Elasticsearch”而不是“/www/server/Elasticsearch/elasticsearch-8.4.1”,以为后续还要安装elasticsearch-head(elasticsearch库的可视化工具)同样会用到user-es的用户权限!
问题2:不分配user-es行不行?答:不行,因为ES禁止使用root用户启动!
-切换新创建的es用户,命令格式:(su 用户名)
命令:su user-es


ES启动与停止

  1. 使用命令切换到ES用户su user-es

  2. 进入elasticsearch的bin目录 cd /www/server/Elasticsearch/elasticsearch-8.4.1/bin

  3. 启动ES
    方式1(临时启动,Ctrl+C则终止运行):./elasticsearch
    方式2(后台启动):./elasticsearch -d
    出现started时启动完成

  4. 关闭ES,命令:kill pid

    说明:
    Elasticsearch端口9100、9200,9300这3个端口需要你到服务器安装组进行开放
    如果你还使用了宝塔面板请同时在侧边栏安全中放行这3个端口
    php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图3,来源:资源仓库www.zycang.com

  5. 端口用途
    9100:elasticsearch-head数据可视化管理工具(不使用可以不开)
    9200:作为Http协议,主要用于外部通讯
    9300:作为Tcp协议,jar之间就是通过tcp协议通讯


修改配置与错误处理

使用./elasticsearch启动ES,如果不出意外的话此时你将碰到因JDK导致无法启动的报错

错误1

warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME
Future versions of Elasticsearch will require Java 11; your Java version from [/usr/local/jdk1.8.0_291/jre] does not meet this requirement. Consider switching to a distribution of Elasticsearch with a bundled JDK. If you are already using a distribution with a bundled JDK, ensure the JAVA_HOME environment variable is not set.
  1. 因Java版本与ES的Java版本不匹配导致的报错;

    • 原因:你服务器上有配置过java环境,
    • 如果你服务器上没配置过java环境反而不会报这个错误,原因是:如果你的服务器上有java环境,那么ES启动时会优先你服务器上的环境,如果没有Java环境,ES则会使用自带的JDK启动;
    • 解决方案:根据ES的Java版本需求使用对应Java版本,或者修改JAVA_HOME环境变量只想ES自带的JDK即可。
    • 我时直接修改的JAVA_HOME只想ES自带的JDK
    • 解决过程:
      • 命令:vim /etc/profile
        修改如下代码,如果没有则新增如下代码
        php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图4,来源:资源仓库www.zycang.com

        #java
        export JAVA_HOME=/www/server/Elasticsearch/elasticsearch-8.4.1/jdk #我ES的安装位置是/www/server/Elasticsearch/elasticsearch-8.4.1
        export JRE_HOME=${JAVA_HOME}/jre
        export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
        export PATH=${JAVA_HOME}/bin:$PATH
        

        修改profile文件后,需要使用命令:source /etc/profile使修改生效!

    1. 修改ES的config/jvm.options配置文件,默认的为4g,我们修改成符合业务场景的的大小即可;
    -Xms512m
    -Xmx512m
    

    php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图5,来源:资源仓库www.zycang.com
    3. 编辑ES config/elasticsearch.yml对ES进行一些基础配置(代码有则修改,无则添加)
    注意:这个是ES的配置文件,默认里面的配置项都是注释过的,我将逐一解开配置并进行注释

    #配置ES集群名称为"my-application"
    cluster.name: my-application
    #当前ES节点的名称为node-1(一个ES节点可以理解为1台服务器)
    node.name: node-1
    #数据的存储位置
    path.data: /www/server/Elasticsearch/elasticsearch-8.4.1/data
    #日志文件的存储位置
    path.logs: /www/server/Elasticsearch/elasticsearch-8.4.1/logs
    #默认情况下ES只能本机访问,设置为0.0.0.0则可以远程访问
    network.host: 0.0.0.0
    #ES通信端口
    http.port: 9200
    #设置master节点列表 多个节点用逗号分隔如cluster.initial_master_nodes: ["node-1","node-2"]
    #我这里是单机,所以只填1个,注意:这个名称必须是集群中真是存在的节点,这里的node-1与上面的node.name配置项保持一致
    cluster.initial_master_nodes: ["node-1"]
    #将这个xpack.security.enabled选项修改为false,这样不用验证es的账户密码即可启动
    xpack.security.enabled: false
    xpack.security.enrollment.enabled: true
    xpack.security.transport.ssl.enabled: true
    
    #跨域访问请在末尾添加如下2行代码
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    

    注意:每次修改过config/elasticsearch.yml后需要重启ES服务使其修改生效!

错误2

权限不足的错误,重新执行下chown user-es:user-es -R /www/server/Elasticsearch重新授权下就好了!

[2022-09-13T11:54:36,818][ERROR][o.e.b.Elasticsearch      ] [node-1] fatal exception while booting Elasticsearchjava.lang.IllegalStateException: Unable to access 'path.logs' (/path/to/logs)

启动ES

使用linux账户下的es账户启动es
命令: su user-es
cd /www/server/Elasticsearch/elasticsearch-8.4.1/bin
./elasticsearch

在浏览器访问 http://你服务器的ip:9200端口,我的是"http://115.28.137.30:9200/"
看到如下页面说明已经运行起来了。

php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图6,来源:资源仓库www.zycang.com


安装IK分词器

现在与你ES版本一致的IK分词器软件包

  1. 下载地址: https://github.com/medcl/elasticsearch-analysis-ik/tags
    图1:
    php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图7,来源:资源仓库www.zycang.com
    图2:
    php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图8,来源:资源仓库www.zycang.com

  2. 将下载好的ik分词包上传到服务器/www/server/Elasticsearch/elasticsearch-8.4.1/plugins目录中,并进行解压

    • 手动创建ik分词器,并将ik分词包上传到服务器指定目录

      php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图9,来源:资源仓库www.zycang.com

    • ik分词包解压后的文件结构
      php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图10,来源:资源仓库www.zycang.com
      注意:
      1.这里的ik分词版本必须和es的版本保持一致,否则es将无法启动;
      2.plugins/目录下需要手动创建ik目录;
      3.需要注意ik目录权限不要是root且ik目录的名字只能为ik,名称不可修改!

  3. 从新启动ES,在浏览器访问http://115.28.137.30:9200/看到如下界面表示成功
    php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图11,来源:资源仓库www.zycang.com


安装elasticsearch-head(可视化管理工具,类似phpMyAdmin一样可视化管理数据库工具)

为服务器安装node环境

没有node环境elasticsearch-head将无法运行
使用宝塔的用户点这里安装
其他用户自行百度,这不展开介绍了!
php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图12,来源:资源仓库www.zycang.com

安装elasticsearch-head

  1. 下载elasticsearch-head
    图1 php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图13,来源:资源仓库www.zycang.com
    图2
    php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图14,来源:资源仓库www.zycang.com

  2. 上传并解压到/www/server/Elasticsearch目录中(目录自定义,我是为了都放在一块好管理)
    php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图15,来源:资源仓库www.zycang.com

  3. 执行npm install
    进入/www/server/Elasticsearch/elasticsearch-head-5.0.0目录
    执行
    npm install
    如果执行失败则常识切换淘宝镜像cnpm在尝试;

  4. 在保证ES启动的情况下,在/www/server/Elasticsearch/elasticsearch-head-5.0.0目录中启动elasticsearch-head

    • 启动服务
      npm run start 或者 npm run-script start

    • 可以后台启动
      nohup npm run-script start &

    启动成功后
    图1
    php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图16,来源:资源仓库www.zycang.com
    图2
    php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎,插图17,来源:资源仓库www.zycang.com

End;

如需 WordPress 优化加速、二次开发、网站维护、企业网站建设托管等服务,点此联系我 | 近期站内热门福利推荐:
文章版权及转载声明

本文地址:https://www.zycang.com/80914.html
文章转载或复制请以超链接形式并注明来源出处。 本文最后更新于:2022-09-24 18:03:59
声明:某些文章或资源具有时效性,若有 错误 或 所需下载资源 已失效,请联系客服QQ:11210980

喜欢就支持一下吧
点赞206赞赏 分享
评论 抢沙发

请登录后发表评论