将Elasticsearch作为WordPress站内搜索-docker安装elasticSearch,kibana和ik分词器

WordPress自带的搜索功能实在有点弱了,不仅容易给数据库增加查询负担,而且搜索出来的结果还不一定准确,很难满足于我们日常的Wordpress站内搜索需求。于是强化Wordpress默认搜索就非常有必要了,之前有分享过用Algolia给WordPress添加实时站内搜索功能

Algolia是一个专业的第三方搜索服务商,Algolia接入Wordpress非常方便,官方也提供了插件直接启用即可。Algolia作为Wordpress的默认搜索,不仅搜索质量高、结果准,而且还是即时搜索,可以完美整合到Wordpress,推荐给土豪朋友使用。

为什么说要推荐给土豪朋友使用?原因是Algolia虽然也有免费的搜索额度,但是额度太低了,低到只能满足一个小博客使用,企业用户建议使用Algolia的专业版,可以省去一笔自建搜索的费用。Algolia作Wordpress的搜索具体效果请参考wzfou.com右上角搜索功能。

将Elasticsearch作为Wordpress站内搜索-docker安装elasticSearch,kibana和ik分词器

这篇文章主要是来分享一下如何利用Elasticsearch来自建Wordpress搜索,采用docker方式安装elasticSearch,kibana和ik分词器。过程非常地简单,更多的Wordpress建站教程,这里有:

  1. WordPress文章目录侧边固定滚动-Easy Table 和LuckyWP Table插件
  2. WordPress子主题创建与使用方法-防止修改过的CSS,JS和代码失效
  3. 让图片飞一会儿!网站图片WebP格式批量转换设置及加速效果体验

一、Elasticsearch准备工作

1.1 准备一台VPS

不建议将Elasticsearch与Wordpress安装在同一台VPS主机上,这样有一定的风险,建议实行搜索与WP分离保证安全。便宜的VPS主机可以参考这里:VPS主机排行榜单,内存越大越好,实测1GB的内存运行流畅。

Elasticsearch准备一台VPS

1.2 准备好docker

首先,你需要先安培安装 Docker CE (社区版)和Docker Compose,以下命令是基于Debian系统的演示,如果你是CentOS、Ubuntu,请参考官网:

安装 Docker CE (社区版):https://docs.docker.com/install/linux/docker-ce/ubuntu/

安装 Docker Compose:https://docs.docker.com/compose/install/#install-compose

Debian 9系统安装Docker CE 和Docker Compose如下:

#卸载
sudo apt-get remove docker docker-engine docker.io containerd runc

#SET UP THE REPOSITORY
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
#检测是否安装成功
sudo apt-key fingerprint 0EBFCD88
#有以下输出就表示成功添加Docker’s official GPG key:

root@hostfbc9e58d73:~# sudo apt-key fingerprint 0EBFCD88
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]

#添加stable repository
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"

#开始安装
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

#验证 Docker Engine - Community是否安装正确
sudo docker run hello-world
#有以下输出就表示正确安装
root@hostfbc9e58d73:~# sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete 
Digest: sha256:b8ba256769a0ac28dd126d584e0a2011cd2877f3f76e093a7ae560f2a5301c00
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
 
 
#安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

#检测是否安装成功
docker-compose --version
#有输出即表示成功
docker-compose version 1.24.1, build 4667896b
#如果提示命令不存在,可以手动创建链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

二、安装elasticSearch及插件

2.1 docker装elasticSearch

镜像:

  1. https://hub.docker.com/_/elasticsearch

docker装elasticSearch非常地简单,只需要一个命令:

docker pull elasticsearch:5.6.11

2.2 docker安装kibana

镜像:

  1. https://hub.docker.com/_/kibana

docker安装kibana也是一行命令,如下:

#版本号要与ES版本号一致
docker pull kibana:5.6.11

如下图:

docker安装kibana

2.3 启动ES和kibana

在开发模式下直接使用以下命令启用即可:

docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:5.6.11
docker run -d --name kibana --net somenetwork -p 5601:5601 kibana:5.6.11

打开你的浏览器访问:IP+9200,可以看到elasticSearch启动成功。

启动ES和kibana

打开你的浏览器访问:IP+5601,可以看到kibana启动成功。(如果提示未准备好,请稍等一会儿)

kibana成功启用

这是5.6.11版本的kibana:

kibana不同的版本

2.4 安装ik分词器

项目:

  1. https://github.com/medcl/elasticsearch-analysis-ik/releases

使用以下命令可以安装ik分词器:

#查看当前运行的容器
docker ps
#执行命令进入到elasticsearch容器里,具体名称请根据自己的实现情况修改
docker exec -it elasticsearch /bin/bash
#使用elasticsearch-plugin进行下载,版本号要与ES版本号一致
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.11/elasticsearch-analysis-ik-5.6.11.zip
# 退出容器
ctrl+p+q

如下图:

安装ik分词器

2.5 Compose启动

在正式的使用环境里,建议使用Docker-Compose启动elasticSearch及插件,首先是创建yml文件:vim docker-compose.yml,填写以下内容:

version: '2.2'
services:  # 包含需要操作的容器
  elasticsearch:  #容器名称
    image: docker.elastic.co/elasticsearch/elasticsearch:5.6.11 #ES镜像
    container_name: elasticsearch #容器名称
    environment:
      - cluster.name=docker-cluster #集群名称,可以不用管
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #JVM大小
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:  #端口
      - 9200:9200
    networks:
      - esnet
  
  kibana:
    image: docker.elastic.co/kibana/kibana:5.6.11
    environment:
      SERVER_NAME: kibana
      ELASTICSEARCH_HOSTS: http://150.95.177.167:9200 #替换你的ES地址

然后后台启动elasticSearch及插件:

#后台启动	  
 docker-compose up -d

三、WP整合Elasticsearch

插件:

  1. https://wordpress.org/plugins/elasticpress/
  2. https://github.com/10up/ElasticPress

WordPress强大之处在于有着非常多的插件,Elasticsearch就是一个整合elasticSearch搜索到Wordpress的插件,下载插件后填写你的elasticSearch地址。

WP整合Elasticsearch填写地址

也可以在wp-config.php指定:

// ElasticPress Host
define( 'EP_HOST', 'http://127.0.0.1:9200' );

保存后elasticSearch插件会自动添加索引,你也可以在设置中给不同的文件、分类、标签等设置启用或者不启用索引。(点击放大)

WP整合Elasticsearch自动索引

另外,插件还提供了权重设置,请根据自己的需求来调整,确保搜索结果更加精准。(点击放大)

WP整合Elasticsearch调整结果

四、可能存在的问题

4.1 虚拟内存太小

启用Elasticsearch时可能会提示虚拟内存不足,解决办法如下:

#提示错误
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]


#切换到root用户,执行命令:
vim /etc/sysctl.conf

# 添加
vm.max_map_count=262144

#保存退出,执行
sysctl -p

4.2 同名容器存在

解决办法就是列出所有容量,存在同名的给予删除,如果正在运行则先Kill再删除:

docker ps -a
docker rm es
docker kill kibana
docker kill elasticsearch
docker rm kibana
docker rm elasticsearch

4.3 Docker常用命令

Docker常用基本命令如下:

#Docker常用基本命令

#拉取镜像
docker image pull 镜像名

#查看镜像列表
docker images
#或者
docker image ls

#删除镜像
docker irm image_id
#或者
docker image rm 镜像名或镜像id

#镜像备份
docker save -o 保存的文件路径以及文件名 镜像名

#镜像迁移/加载到本地
docker load -i 镜像路径

#容器相关操作
#创建容器
docker run -itd --restart always --name 容器名 镜像名  执行的命令

#其他参数含义:

--network=host 表示将主机的网络环境映射到容器中,容器的网络与主机相同
-p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p 做多个端口映射
-v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器中目录),可以使 用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后 共享到容器上。
-i 表示以“交互模式”运行容器 -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即 分配一个伪终端。
--name 为创建的容器命名
-d 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不 会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。
-e 为容器设置环境变量 -e username="ritchie": 设置环境变量
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型
--link=[]: 添加链接到另一个容器 -
-expose=[]: 开放一个端口或一组端口 -h "RidingRoad": 指定容器的hostname

#启动容器
docker container start container_name或container_id

#停止容器
docker container stop container_name或container_id

#kill容器
docker container kill container_name或container_id

#查看容器列表
# 查看正在运行的容器
docker ps 或 docker container ls
# 查看所有容器
docker ps -a 或 docker container ls --all

#向容器传入和执行命令
docker container exec container_id 命令

#进入容器终端
docker attach container_id
#或
docker container exec container_id /bin/bash

#容器转入后台运行
Ctrl + p 然后 Ctrl + q

#删除容器
docker rm container_id
#或
docker container rm container_id

五、总结

Elasticsearch建立了索引之后,下次我更新Wordpress的文章或者评论时就会自动更新索引了,特别需要提醒的是如果你的Wordpress有运行Redis等缓存请关闭,否则会造成PHP死循环。

检测Elasticsearch有没有生效的办法就是到你的Wordpress前台搜索关键字,看看有没有自动建议或者精准结果,一般来说启用了插件后搜索出来的结果都调用的Elasticsearch的索引内容。

文章出自:挖站否 https://wzfou.com/elasticsearch/,版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。


分享到:
Avatar for Qi
关于站长(Qi),2008年开始混迹于免费资源圈中,有幸结识了不少的草根站长。之后自己摸爬滚打潜心学习Web服务器、VPS、域名等,兴趣广泛,杂而不精,但愿将自己经验与心得分享出来与大家共勉。
已有 27 条评论
  1. Avatar for see see

    vultr: 1G CPU, 2G内存, 55G SSD能用吗.?

    2020年11月8日 21:54 回复
    • Avatar for Qi Qi

      可以,Vultr的配置还是实在。

      2020年11月10日 08:52 回复
  2. Qi可以转载吗?保留文章出处

    2020年7月13日 15:40 回复
    • Avatar for Qi Qi

      可以的。没有问题。

      2020年7月14日 16:51 回复
  3. Avatar for 程航 程航

    elasticsearch和Algolia各自的优缺点是什么呢?分别使用于什么类型的网站?

    2020年7月1日 18:02 回复
    • Avatar for Qi Qi

      Algolia缺点是要钱,不是真的是好用。elasticsearch的缺点是操作难度大,但是功能很强,适合专业人士。

      2020年7月4日 09:05 回复
  4. Avatar for imsuperbang imsuperbang

    9200和9201端口暴露在外,elasticpress也没有鉴权机制,最好是装本地然后只让本地127ip访问,关闭外网端口。

    2020年5月16日 20:57 回复
  5. 「特别需要提醒的是如果你的Wordpress有运行Redis等缓存请关闭,否则会造成PHP死循环。」这部分有点迷惑。

    是指不能用任何缓存插件?还是怎样?

    2020年5月4日 11:06 回复
    • 我也有此疑问。谢谢。

      11月6日 08:53 回复
      • Avatar for Qi Qi

        有兼容性的问题,一般来说是可以使用的,主要是看自己的是否运行正常。

        11月11日 21:48 回复
  6. ek的成本太高了吧

    2020年4月26日 17:58 回复
  7. 其实可以直接安装
    apt-get install docker.io
    或者是
    yum install docker.io

    2020年4月19日 14:02来自iPhone 回复
  8. docker貌似有国内清华大学源
    mirror.tuna.tsinghua.edu.cn

    2020年4月19日 14:01来自iPhone 回复
  9. docker用了就不想删了,真的可以这么说

    2020年4月19日 13:58来自iPhone 回复
  10. Avatar for zhoukeming01 zhoukeming01

    这个好折腾啊,有点不会搞

    2020年4月19日 13:24来自移动端 回复
  11. typecho 还没人开发插件呢

    2020年4月17日 19:00 回复
  12. Avatar for MG MG

    学习了,一直在用elk做日志分析

    2020年4月16日 03:04来自iPhone 回复
  13. Avatar for 子楠 子楠

    我订阅邮箱里怎么没有 文章[疑问]

    2020年4月15日 20:011 回复
    • Avatar for Qi Qi

      QQ邮箱好像会拒收。

      2020年4月19日 15:07 回复
  14. Avatar for saber saber

    生命在于折腾。[威武]

    2020年4月15日 16:54 回复
  15. Avatar for Nie Nie

    有点麻烦呀

    2020年4月15日 13:581 回复
  16. Avatar for llliii llliii

    感觉这个折腾的有点大啊

    2020年4月15日 13:431 回复
  17. Avatar for Herobrine Herobrine

    用1Gvps和免费虚拟主机的悄悄路过,貌似我开不了Docker,还是用自带搜索吧。。。[泪]

    2020年4月15日 12:39来自QQ1 回复
    • 这是什么免费vps,貌似没听过哎

      2020年4月19日 13:58来自iPhone 回复
      • Avatar for Herobrine Herobrine

        免费的VPS经常失联。。。。。

        2020年4月19日 14:30来自QQ 回复
        • Avatar for Herobrine Herobrine

          但是有一个已经稳定运行20+天,真香!

          2020年4月19日 14:34来自QQ 回复
          • Avatar for chihuo2104 chihuo2104

            论坛里推荐一下

            2020年4月21日 21:48 回复

Login

Welcome! Login in to your account

Remember me Lost your password?

Don't have account. Register

Lost Password

Register