WordPress自带的搜索功能实在有点弱了,不仅容易给数据库增加查询负担,而且搜索出来的结果还不一定准确,很难满足于我们日常的Wordpress站内搜索需求。于是强化Wordpress默认搜索就非常有必要了,之前有分享过用Algolia给WordPress添加实时站内搜索功能。
Algolia是一个专业的第三方搜索服务商,Algolia接入Wordpress非常方便,官方也提供了插件直接启用即可。Algolia作为Wordpress的默认搜索,不仅搜索质量高、结果准,而且还是即时搜索,可以完美整合到Wordpress,推荐给土豪朋友使用。
为什么说要推荐给土豪朋友使用?原因是Algolia虽然也有免费的搜索额度,但是额度太低了,低到只能满足一个小博客使用,企业用户建议使用Algolia的专业版,可以省去一笔自建搜索的费用。Algolia作Wordpress的搜索具体效果请参考wzfou.com右上角搜索功能。
这篇文章主要是来分享一下如何利用Elasticsearch来自建Wordpress搜索,采用docker方式安装elasticSearch,kibana和ik分词器。过程非常地简单,更多的Wordpress建站教程,这里有:
不建议将Elasticsearch与Wordpress安装在同一台VPS主机上,这样有一定的风险,建议实行搜索与WP分离保证安全。便宜的VPS主机可以参考这里:VPS主机排行榜单,内存越大越好,实测1GB的内存运行流畅。
首先,你需要先安培安装 Docker CE (社区版)和Docker Compose,以下命令是基于Debian系统的演示,如果你是CentOS、Ubuntu,请参考官网:
Debian 9系统安装Docker CE 和Docker Compose如下:
镜像:
docker装elasticSearch非常地简单,只需要一个命令:
镜像:
docker安装kibana也是一行命令,如下:
如下图:
在开发模式下直接使用以下命令启用即可:
打开你的浏览器访问:IP+9200,可以看到elasticSearch启动成功。
打开你的浏览器访问:IP+5601,可以看到kibana启动成功。(如果提示未准备好,请稍等一会儿)
这是5.6.11版本的kibana:
项目:
使用以下命令可以安装ik分词器:
如下图:
在正式的使用环境里,建议使用Docker-Compose启动elasticSearch及插件,首先是创建yml文件:vim docker-compose.yml,填写以下内容:
然后后台启动elasticSearch及插件:
插件:
WordPress强大之处在于有着非常多的插件,Elasticsearch就是一个整合elasticSearch搜索到Wordpress的插件,下载插件后填写你的elasticSearch地址。
也可以在wp-config.php指定:
保存后elasticSearch插件会自动添加索引,你也可以在设置中给不同的文件、分类、标签等设置启用或者不启用索引。(点击放大)
另外,插件还提供了权重设置,请根据自己的需求来调整,确保搜索结果更加精准。(点击放大)
启用Elasticsearch时可能会提示虚拟内存不足,解决办法如下:
解决办法就是列出所有容量,存在同名的给予删除,如果正在运行则先Kill再删除:
Docker常用基本命令如下:
Elasticsearch建立了索引之后,下次我更新Wordpress的文章或者评论时就会自动更新索引了,特别需要提醒的是如果你的Wordpress有运行Redis等缓存请关闭,否则会造成PHP死循环。
检测Elasticsearch有没有生效的办法就是到你的Wordpress前台搜索关键字,看看有没有自动建议或者精准结果,一般来说启用了插件后搜索出来的结果都调用的Elasticsearch的索引内容。
Algolia是一个专业的第三方搜索服务商,Algolia接入Wordpress非常方便,官方也提供了插件直接启用即可。Algolia作为Wordpress的默认搜索,不仅搜索质量高、结果准,而且还是即时搜索,可以完美整合到Wordpress,推荐给土豪朋友使用。
为什么说要推荐给土豪朋友使用?原因是Algolia虽然也有免费的搜索额度,但是额度太低了,低到只能满足一个小博客使用,企业用户建议使用Algolia的专业版,可以省去一笔自建搜索的费用。Algolia作Wordpress的搜索具体效果请参考wzfou.com右上角搜索功能。
这篇文章主要是来分享一下如何利用Elasticsearch来自建Wordpress搜索,采用docker方式安装elasticSearch,kibana和ik分词器。过程非常地简单,更多的Wordpress建站教程,这里有:
- WordPress文章目录侧边固定滚动-Easy Table 和LuckyWP Table插件
- WordPress子主题创建与使用方法-防止修改过的CSS,JS和代码失效
- 让图片飞一会儿!网站图片WebP格式批量转换设置及加速效果体验
一、Elasticsearch准备工作
1.1 准备一台VPS
不建议将Elasticsearch与Wordpress安装在同一台VPS主机上,这样有一定的风险,建议实行搜索与WP分离保证安全。便宜的VPS主机可以参考这里:VPS主机排行榜单,内存越大越好,实测1GB的内存运行流畅。
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
镜像:
- https://hub.docker.com/_/elasticsearch
docker装elasticSearch非常地简单,只需要一个命令:
- docker pull elasticsearch:5.6.11
2.2 docker安装kibana
镜像:
- https://hub.docker.com/_/kibana
docker安装kibana也是一行命令,如下:
- #版本号要与ES版本号一致
- docker pull kibana:5.6.11
如下图:
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启动成功。
打开你的浏览器访问:IP+5601,可以看到kibana启动成功。(如果提示未准备好,请稍等一会儿)
这是5.6.11版本的kibana:
2.4 安装ik分词器
项目:
- 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
如下图:
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
插件:
- https://wordpress.org/plugins/elasticpress/
- https://github.com/10up/ElasticPress
WordPress强大之处在于有着非常多的插件,Elasticsearch就是一个整合elasticSearch搜索到Wordpress的插件,下载插件后填写你的elasticSearch地址。
也可以在wp-config.php指定:
- // ElasticPress Host
- define( 'EP_HOST', 'http://127.0.0.1:9200' );
保存后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的索引内容。