fecmall 支持分词搜索

Elasticsearch composer yii2 docker centos7 fecmall · dongzhishuo · 于 2年前 发布 · 894 次阅读

一、场景

1. 需求:

fecmall项目实现隐藏搜索,支持ik分词

2.当前:

3.需要做:

需开通一个新服务器,专门做fecmall项目的elasticsearch搜索

二、服务器准备

  • 腾讯云服务器(命名:es服务器)
    • 2核8G
    • centos7
    • elasticsearch-7.4.0, ik-7.4.0
    • 初始化:
      • yum update -y 服务器升级
      • es服务器和fecmall项目服务器共用了一个证书,es服务器绑定证书后需重启才生效
      • 快照设置:每天
      • 安全组设置:es服务器内网全放通,外网放通9200端口

三、步骤

1.环境搭建

  • docker安装
  • elasticsearch安装 参考:https://www.bestyii.com/topic/11

    • cdn加速下载配置,参考链接:https://www.bestyii.com/topic/42
      • CentOS 7 配置Docker镜像的国内源,然后重新加载配置文件(sudo systemctr daemon-reload)和重启docker服务sudo systemctl restart docker)(补充:删除镜像命令:docker rmi -f 7c61307c931c)
        • 编辑/etc/docker/daemon.json文件,并输入国内镜像源地址
          {
          "registry-mirrors": ["https://og7vpkky.mirror.aliyuncs.com"]
          }
          
      • 验证cdn配置是否成功:输入 docker info 命令,Registry Mirrors是否指向新地址
    • elasticsearch镜像地址:https://www.docker.elastic.co/ pull下来

      • docker pull docker.elastic.co/elasticsearch/elasticsearch:7.4.0
      • 官方pull下来之后镜像名太长了,所以我将镜像全部重新打了tag:docker tag docker.elastic.co/elasticsearch/elasticsearch:7.4.0 elasticsearch:latest
      • 使用docker images查看,确认是否成功
      • 成功后,在/etc/sysctl.conf文件中添加一行:
        - grep vm.max_map_count /etc/sysctl.conf # 查找当前的值。
        - vm.max_map_count=262144 # 修改或者新增
        
      • 设置外部目录
        mkdir esdatadir
        chmod g+rwx esdatadir
        chgrp 1000 esdatadir
        
      • 启动es
        - docker run  -e ES_JAVA_OPTS="-Xms4g -Xmx4g"  -d  -v /srv/esdatadir/config:/usr/share/elasticsearch/config -v /srv/esdatadir/logs:/usr/share/elasticsearch/logs   -v /srv/esdatadir/data:/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300  --restart=always --name elasticsearch -e "discovery.type=single-node" elasticsearch
        
        • run 命令填坑:
          1. 存储不够 改成了xms4g
          2. 之前是 -p 127.0.0.1:9200:9200,后来去掉了127.0.0.1,改成了-p 9200:9200,否则只对本机放通9200端口
    • ik分词器安装 参考:https://blog.csdn.net/qq_33612228/article/details/107563446https://www.fecmall.com/topic/2489

      • 使用命名进入es容器内部:docker exec -it 【your容器id】 /bin/bash
      • 进入后直接切换到plugins目录,通过命令下载ik压缩包到此目录
      • 解压文件到ik文件夹下,重启es (解压后压缩包必须删除,否则elasticsearch启动报错:rm -f elasticsearch-analysis-ik-6.1.3.zip)
        • 解压命令: unzip elasticsearch-analysis-ik-7.4.2.zip -d ik
        • 赋予权限:chmod -R 777 ik/
        • 重启es
          • docker下执行: docker restart elasticsearch
        • 验证ik分词器,查看验证结果 参考:https://www.fecmall.com/topic/2489
          curl -XGET http://127.0.0.1:9200/_analyze?pretty -H 'Content-Type:application/json' -d'
          {
          "analyzer": "ik_smart",
          "text": "听说看这篇博客的哥们最帅、姑娘最美"
          }'
          
        • 填坑:
          1. config/elasticsearch.yml 中添加network.publish_host: 82..196.(你的es服务器外网ip地址),否则其他服务器连接访问es服务器报错(docker会解析转向的172.0.0.2地址,具体错误以实际为准)
          2. 验证分词报utf-8的错误:在phpstorm file-setting SSH Terminal中改成utf-8

2.fecmall后台配置

  • 网站配置 --> 基础配置 --> 搜索引擎配置
    • 将 ElasticSearch Engine 设置为: Enable
  • 中文搜索设置为elasticSearch 网站配置 --> 基础配置 --> 多语言配置
    • 将语言zh-CN对应的搜索引擎设置为elasticSearch
  • 配置文件 @common/config/main-local.php
    • 在组件components配置数组中添加elasticSearch的配置
      'elasticsearch' => [
      'class' => 'yii\elasticsearch\Connection',
      'nodes' => [
          ['http_address' => 'es服务器外网ip:9200'],
          // configure more hosts if you have a cluster
      ],
      ],
      

3.数据同步

  • 清空elasticSearch数据
    • 进入网站根目录执行 ./yii elasticsearch/clean
  • 新建mapping
    • 进入网站根目录执行 ./yii elasticsearch/updatemapping
  • .执行数据同步
    cd  ./vendor/fancyecommerce/fecshop/shell/search
    sh fullSearchSync.sh
    

本文由 dongzhishuo 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。

共收到 0 条回复
没有找到数据。
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册