WordPress自帶的搜索功能實(shí)在有點(diǎn)弱了,不僅容易給數(shù)據(jù)庫增加查詢負(fù)擔(dān),而且搜索出來的結(jié)果還不一定準(zhǔn)確,很難滿足于我們?nèi)粘5腤ordpress站內(nèi)搜索需求。于是強(qiáng)化Wordpress默認(rèn)搜索就非常有必要了,之前有分享過用Algolia給WordPress添加實(shí)時(shí)站內(nèi)搜索功能。
Algolia是一個(gè)專業(yè)的第三方搜索服務(wù)商,Algolia接入Wordpress非常方便,官方也提供了插件直接啟用即可。Algolia作為Wordpress的默認(rèn)搜索,不僅搜索質(zhì)量高、結(jié)果準(zhǔn),而且還是即時(shí)搜索,可以完美整合到Wordpress,推薦給土豪朋友使用。
為什么說要推薦給土豪朋友使用?原因是Algolia雖然也有免費(fèi)的搜索額度,但是額度太低了,低到只能滿足一個(gè)小博客使用,企業(yè)用戶建議使用Algolia的專業(yè)版,可以省去一筆自建搜索的費(fèi)用。Algolia作Wordpress的搜索具體效果請(qǐng)參考wzfou.com右上角搜索功能。
這篇文章主要是來分享一下如何利用Elasticsearch來自建Wordpress搜索,采用docker方式安裝elasticSearch,kibana和ik分詞器。過程非常地簡(jiǎn)單,更多的Wordpress建站教程,這里有:
- WordPress文章目錄側(cè)邊固定滾動(dòng)-Easy Table 和LuckyWP Table插件
- WordPress子主題創(chuàng)建與使用方法-防止修改過的CSS,JS和代碼失效
- 讓圖片飛一會(huì)兒!網(wǎng)站圖片WebP格式批量轉(zhuǎn)換設(shè)置及加速效果體驗(yàn)
一、Elasticsearch準(zhǔn)備工作
1.1 準(zhǔn)備一臺(tái)VPS
不建議將Elasticsearch與Wordpress安裝在同一臺(tái)VPS主機(jī)上,這樣有一定的風(fēng)險(xiǎn),建議實(shí)行搜索與WP分離保證安全。便宜的VPS主機(jī)可以參考這里:VPS主機(jī)排行榜單,內(nèi)存越大越好,實(shí)測(cè)1GB的內(nèi)存運(yùn)行流暢。
1.2 準(zhǔn)備好docker
首先,你需要先安培安裝 Docker CE (社區(qū)版)和Docker Compose,以下命令是基于Debian系統(tǒng)的演示,如果你是CentOS、Ubuntu,請(qǐng)參考官網(wǎng):
安裝 Docker CE (社區(qū)版):https://docs.docker.com/install/linux/docker-ce/ubuntu/
安裝 Docker Compose:https://docs.docker.com/compose/install/#install-compose
Debian 9系統(tǒng)安裝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 -
- #檢測(cè)是否安裝成功
- 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
- #驗(yàn)證 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
- #檢測(cè)是否安裝成功
- docker-compose --version
- #有輸出即表示成功
- docker-compose version 1.24.1, build 4667896b
- #如果提示命令不存在,可以手動(dòng)創(chuàng)建鏈接
- sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
二、安裝elasticSearch及插件
2.1 docker裝elasticSearch
鏡像:
- https://hub.docker.com/_/elasticsearch
docker裝elasticSearch非常地簡(jiǎn)單,只需要一個(gè)命令:
- docker pull elasticsearch:5.6.11
2.2 docker安裝kibana
鏡像:
- https://hub.docker.com/_/kibana
docker安裝kibana也是一行命令,如下:
- #版本號(hào)要與ES版本號(hào)一致
- docker pull kibana:5.6.11
如下圖:
2.3 啟動(dòng)ES和kibana
在開發(fā)模式下直接使用以下命令啟用即可:
- 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啟動(dòng)成功。
打開你的瀏覽器訪問:IP+5601
,可以看到kibana啟動(dòng)成功。(如果提示未準(zhǔn)備好,請(qǐng)稍等一會(huì)兒)
這是5.6.11版本的kibana:
2.4 安裝ik分詞器
項(xiàng)目:
- https://github.com/medcl/elasticsearch-analysis-ik/releases
使用以下命令可以安裝ik分詞器:
- #查看當(dāng)前運(yùn)行的容器
- docker ps
- #執(zhí)行命令進(jìn)入到elasticsearch容器里,具體名稱請(qǐng)根據(jù)自己的實(shí)現(xiàn)情況修改
- docker exec -it elasticsearch /bin/bash
- #使用elasticsearch-plugin進(jìn)行下載,版本號(hào)要與ES版本號(hào)一致
- ./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啟動(dòng)
在正式的使用環(huán)境里,建議使用Docker-Compose啟動(dòng)elasticSearch及插件,首先是創(chuàng)建yml文件:vim docker-compose.yml
,填寫以下內(nèi)容:
- 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地址
然后后臺(tái)啟動(dòng)elasticSearch及插件:
- #后臺(tái)啟動(dòng)
- docker-compose up -d
三、WP整合Elasticsearch
插件:
- https://wordpress.org/plugins/elasticpress/
- https://github.com/10up/ElasticPress
WordPress強(qiáng)大之處在于有著非常多的插件,Elasticsearch就是一個(gè)整合elasticSearch搜索到Wordpress的插件,下載插件后填寫你的elasticSearch地址。
也可以在wp-config.php指定:
- // ElasticPress Host
- define( 'EP_HOST', 'http://127.0.0.1:9200' );
保存后elasticSearch插件會(huì)自動(dòng)添加索引,你也可以在設(shè)置中給不同的文件、分類、標(biāo)簽等設(shè)置啟用或者不啟用索引。(點(diǎn)擊放大)
另外,插件還提供了權(quán)重設(shè)置,請(qǐng)根據(jù)自己的需求來調(diào)整,確保搜索結(jié)果更加精準(zhǔn)。(點(diǎn)擊放大)
四、可能存在的問題
4.1 虛擬內(nèi)存太小
啟用Elasticsearch時(shí)可能會(huì)提示虛擬內(nèi)存不足,解決辦法如下:
- #提示錯(cuò)誤
- max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
- #切換到root用戶,執(zhí)行命令:
- vim /etc/sysctl.conf
- # 添加
- vm.max_map_count=262144
- #保存退出,執(zhí)行
- sysctl -p
4.2 同名容器存在
解決辦法就是列出所有容量,存在同名的給予刪除,如果正在運(yùn)行則先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 鏡像路徑
- #容器相關(guān)操作
- #創(chuàng)建容器
- docker run -itd --restart always --name 容器名 鏡像名 執(zhí)行的命令
- #其他參數(shù)含義:
- --network=host 表示將主機(jī)的網(wǎng)絡(luò)環(huán)境映射到容器中,容器的網(wǎng)絡(luò)與主機(jī)相同
- -p 表示端口映射,前者是宿主機(jī)端口,后者是容器內(nèi)的映射端口??梢允褂枚鄠€(gè)-p 做多個(gè)端口映射
- -v 表示目錄映射關(guān)系(前者是宿主機(jī)目錄,后者是映射到宿主機(jī)上的目錄,即 宿主機(jī)目錄:容器中目錄),可以使 用多個(gè)-v 做多個(gè)目錄或文件映射。注意:最好做目錄映射,在宿主機(jī)上做修改,然后 共享到容器上。
- -i 表示以“交互模式”運(yùn)行容器 -t 表示容器啟動(dòng)后會(huì)進(jìn)入其命令行。加入這兩個(gè)參數(shù)后,容器創(chuàng)建就能登錄進(jìn)去。即 分配一個(gè)偽終端。
- --name 為創(chuàng)建的容器命名
- -d 在run后面加上-d參數(shù),則會(huì)創(chuàng)建一個(gè)守護(hù)式容器在后臺(tái)運(yùn)行(這樣創(chuàng)建容器后不 會(huì)自動(dòng)登錄容器,如果只加-i -t 兩個(gè)參數(shù),創(chuàng)建后就會(huì)自動(dòng)進(jìn)去容器)。
- -e 為容器設(shè)置環(huán)境變量 -e username="ritchie": 設(shè)置環(huán)境變量
- --net="bridge": 指定容器的網(wǎng)絡(luò)連接類型,支持 bridge/host/none/container: 四種類型
- --link=[]: 添加鏈接到另一個(gè)容器 -
- -expose=[]: 開放一個(gè)端口或一組端口 -h "RidingRoad": 指定容器的hostname
- #啟動(dòng)容器
- docker container start container_name或container_id
- #停止容器
- docker container stop container_name或container_id
- #kill容器
- docker container kill container_name或container_id
- #查看容器列表
- # 查看正在運(yùn)行的容器
- docker ps 或 docker container ls
- # 查看所有容器
- docker ps -a 或 docker container ls --all
- #向容器傳入和執(zhí)行命令
- docker container exec container_id 命令
- #進(jìn)入容器終端
- docker attach container_id
- #或
- docker container exec container_id /bin/bash
- #容器轉(zhuǎn)入后臺(tái)運(yùn)行
- Ctrl + p 然后 Ctrl + q
- #刪除容器
- docker rm container_id
- #或
- docker container rm container_id
五、總結(jié)
Elasticsearch建立了索引之后,下次我更新Wordpress的文章或者評(píng)論時(shí)就會(huì)自動(dòng)更新索引了,特別需要提醒的是如果你的Wordpress有運(yùn)行Redis等緩存請(qǐng)關(guān)閉,否則會(huì)造成PHP死循環(huán)。
檢測(cè)Elasticsearch有沒有生效的辦法就是到你的Wordpress前臺(tái)搜索關(guān)鍵字,看看有沒有自動(dòng)建議或者精準(zhǔn)結(jié)果,一般來說啟用了插件后搜索出來的結(jié)果都調(diào)用的Elasticsearch的索引內(nèi)容。
文章出自:挖站否 https://wzfou.com/elasticsearch/,版權(quán)所有。本站文章除注明出處外,皆為作者原創(chuàng)文章,可自由引用,但請(qǐng)注明來源。