WordPress自帶的搜尋雖然說可以搜出一些東西出來,但是有時搜尋的結果不一定滿意,而且沒有聯詞搜尋和模糊搜索,導致有時候必須指定準確的關鍵字才能搜尋出結果來。況且Wordpress自帶的搜尋對MysqL資料庫查詢依賴大,資料庫大的話比較消耗時間。

取代Wordpress預設的搜尋也不是什麼難事,懂行的人基本上都知道site:wzfou.com xxx就可以搜尋出指定網站的站內內容,而百度、Google都推出了自訂搜索,就是把site:wzfou. com xxx直接嵌入到站內,用戶點擊搜尋後不用跳到百度Google就可以看到結果。

不過百度,Google自訂搜尋依賴搜尋引擎的索引,這對於索引少或者是新站來說,有時新的文章搜尋不出來,影響了使用者體驗。於是,Elasticsearch這種開源免費的自建搜尋引擎誕生了,這是一個分散式、可擴展、即時的搜尋與資料分析引擎,可以處理全文搜尋和結構化資料的即時統計。

改進我們的站內搜尋-百度,Google自訂搜尋和Elasticsearch自建搜尋

本篇文章就來分享一下百度,Google自訂搜尋和Elasticsearch自建搜尋整合Wordpress的方法,更多的關於WordPress建站及WP優化的文章還有:

  1. Linux的php-fpm優化心得-php-fpm進程佔用記憶體大和不釋放記憶體問題
  2. WordPress新增支付寶,微信打賞按鈕製作實例和Paypal.me打賞鏈接
  3. 五款優秀的RSS閱讀器推薦-附國內外各大RSS閱讀器收集整理總表

PS:2019年9月1日更新,不想折騰百度和谷歌自定義搜索的朋友,可以試試這個優秀的第三方站內搜索引擎:用Algolia給WordPress添加實時站內搜索功能-搜索品質更高內容更準。

PS:2019年12月2日更新,想要建立更為強大的更為快速的免費站內搜索,你還可以試試RediSearch高效能全文搜尋引擎:RediSearch高效能全文搜尋引擎-整合WordPress打造高品質搜尋。

一、百度站內搜尋引擎

網站:

  1. HTTPS://資源.百度.com/彩色/wiki/introduce

1.1  百度站內搜尋引擎使用

首先是到百度站內搜尋引擎新增想要使用的網站網域。

2.1  Google自訂搜尋使用

首先登入Google自訂搜尋官網頁面,然後點選新建一個自訂搜尋。

接著就是設定你要索引的網址,命名一個名稱等。 (點擊放大)

創建完成後,你就可以點擊取得程式碼了。

Google站內搜尋也提供了外觀設定、搜尋結果優化等功能,你可以依照自己的需求來調整。 (點擊放大)

Google自訂搜尋允許你置頂某一個搜尋結果、自動填入、同義詞等等。

這是Google自訂搜尋搜尋效果,嵌入網頁可能還會受到原CSS的影響,需要自己再一步微調。 (點擊放大)

Google自訂搜尋還可以搜尋圖片,實在很強大。

2.2  Google自訂搜尋不顯示問題

由於眾所周知的原因,Google自訂搜尋在國內是無法正常顯示,那麼如何解決此問題呢?一個可行的方法就是用反代(見:Nginx反向綁定),或將Google自訂搜尋相關文件本地化。實現難度比較大…

Google自訂搜尋其實也是可以託管的,效果如下:

  1. HTTPS://彩色.Google.com/彩色/public URL?出現=011545314673148308753:3更不能破壞6-KFC

三、Elasticsearch自建搜尋

網站:

  1. HTTPS://嗚嗚嗚.elastic.co

3.1  安裝Elasticsearch

Elasticsearch安裝基本上可以參考官方的教學了,這裡直接引用imququ.com的安裝方法:

虛擬機器和線上環境都是 Ubuntu 14.04.4 LTS,Elasticsearch 用的是最新版。在一切開始之前,先檢查機器上是否裝有 java 環境,如果沒有可以透過以下命令安裝:

sudo apt-get install openjdk-7-jre-headless

下載 Elasticsearch 2.3.0 壓縮包並解壓縮:

wget -c https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/zip/elasticsearch/2.3.0/elasticsearch-2.3.0.zip
unzip elasticsearch-2.3.0.zip

將解壓縮得到的 elasticsearch-2.3.0 目錄重新命名為 ~/es_root(名稱及位置沒有限制,可以將它挪到你認為合適的任何位置)。 Elasticsearch 無需安裝,直接可以運行(注意:不能用 root 帳號運行):

BASHcd ~/es_root/bin/
chmod a+x elasticsearch
./elasticsearch

如果螢幕上沒有列印錯誤訊息,表示 Elasticsearch 服務已經成功啟動。新建一個終端,用 curl 驗證下:

BASHcurl -XGET http://127.0.0.1:9200/?pretty

{
  "name" : "Melissa Gold",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.3.0",
    "build_hash" : "8371be8d5fe5df7fb9c0516c474d77b9feddd888",
    "build_timestamp" : "2016-03-29T07:54:48Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.0"
  },
  "tagline" : "You Know, for Search"
}

如果看到以上訊息,說明一切正常,否則請根據螢幕上的錯誤訊息查找原因。儘管 Elasticsearch 本身是用 java 寫的,但它對外可以透過 RESTful 介面交互,十分方便。

預設情況下 Elasticsearch 的 RESTful 服務只有本機才能存取,也就是說無法從主機存取虛擬機器中的服務。為了方便除錯,可以修改 ~/es_root/config/elasticsearch.yml 文件,加入以下兩行:

network.bind_host: "0.0.0.0"
network.publish_host: _non_loopback:ipv4_

但線上環境千萬不要這樣配置,否則任何人都可以透過這個介面修改你的資料。

3.2  安裝 IK Analysis

Elasticsearch搜尋自備的分詞器會粗暴地把每個漢字直接分開,沒有根據詞庫來分詞。為了處理中文搜索,還需要安裝中文分詞插件。我使用的是 elasticsearch-analysis-ik,支援自訂詞庫。

首先,下載與 Elasticsearch 相符的 elasticsearch-analysis-ik 外掛:

wget -c https://github.com/medcl/elasticsearch-analysis-ik/archive/v1.9.0.zip
unzip v1.9.0.zip

解壓縮後,進入插件原始碼目錄編譯:

BASHsudo apt-get install maven
cd elasticsearch-analysis-ik-1.9.0
mvn package

如果一切順利,在 target/releases/ 目錄下可以找到編好的檔案。將其解壓縮並拷到 ~/es_root 對應目錄:

mkdir -p ~/es_root/plugins/ik/
unzip target/releases/elasticsearch-analysis-ik-1.9.0.zip -d ~/es_root/plugins/ik/

elasticsearch-analysis-ik 的設定檔在~/es_root/plugins/ik/config/ik/ 目錄,很多都是詞表,直接用文字編輯器打開就可以修改,改完記得儲存為utf-8 格式。

現在再啟動 Elasticsearch 服務,如果看到類似下面這樣的訊息,說明 IK Analysis 外掛程式已經裝好了:

plugins [analysis-ik]

3.3  配置同義詞

Elasticsearch 自帶一個名為 synonym 的同義詞 filter。為了能讓 IK 和 synonym 同時工作,我們需要定義新的 analyzer,用 IK 做 tokenizer,synonym 做 filter。聽起來很複雜,實際上要做的只是加一段配置。

開啟 ~/es_root/config/elasticsearch.yml 文件,加入以下設定:

YAMLindex:
  analysis:
    analyzer:
      ik_syno:
          type: custom
          tokenizer: ik_max_word
          filter: [my_synonym_filter]
      ik_syno_smart:
          type: custom
          tokenizer: ik_smart
          filter: [my_synonym_filter]
    filter:
      my_synonym_filter:
          type: synonym
          synonyms_path: analysis/synonym.txt

以上配置定義了 ik_syno 和 ik_syno_smart 這兩個新的 analyzer,分別對應 IK 的 ik_max_word 和 ik_smart 兩種分詞策略。根據 IK 的文檔,二者區別如下:

  • ik_max_word:會將文字做最細粒度的拆分,會窮盡各種可能的組合;
  • ik_smart:會將文字做最粗粒度的拆分;

ik_syno 和 ik_syno_smart 都會使用 synonym filter 實作同義字轉換。為了方便後續測試,建議建立 ~/es_root/config/analysis/synonym.txt 文件,輸入一些同義詞並存為 utf-8 格式。例如:

ua,user-agent,userAgent
js,javascript
谷歌=>google

3.4  Elasticsearch整合Wordpress

WordPress外掛:

1、ElasticPress:https://wordpress.org/plugins/elasticpress/

2、WP Search with Elasticsearch:https://wordpress.org/plugins/db-search-with-elasticsearch/

這兩款Elasticsearch WordPress 插件,都是可以幫助我們將Elasticsearch搜尋整合到Wordpress,首先是啟用插件,然後到插件設定頁面填寫Elasticsearch伺服器相關的資訊。 (點擊放大)

然後就可以將Wordpress的文章以及頁面同步到Elasticsearch伺服器並開始索引了。

四、總結

百度站內搜尋引擎適合用在沒有使用Https以及百度索引量大的網站,對於新站以及用上了Https的網站使用百度站內搜尋引擎非常不利,而Google自訂搜尋適合國外的朋友使用,國內的朋友不要折騰了。

Elasticsearch自建搜尋是一個非常好的工具,功能強大,用於Wordpress的全文搜尋真的是「牛刀小試」了,Elasticsearch可以對文件進行索引、搜尋、排序、過濾,它能夠執行複雜的全文搜尋。

發表評論