使用 Elasticsearch 實現部落格站內搜尋
一直以來,為了優化本部落格站內搜尋效果和速度,我使用 bing 的 site: 站內搜尋做為資料來源,在服務端獲取、解析、處理並快取搜尋結果,直接輸出 HTML。這個方案唯一的問題是時效性難以保證,儘管我可以在釋出和修改文章時主動告訴 bing,但它什麼時候更新索引則完全不受我控制。
本著不折騰就渾身不自在的原則,我最終還是使用 Elasticsearch 搭建了自己的搜尋服務。Elasticsearch 是一個基於 Lucene 構建的開源、分散式、RESTful 搜尋引擎,很多大公司都在用,程式設計師的好夥伴 Github 的搜尋也用的是它。本文記錄我使用 Elasticsearch 搭建站內搜尋的過程,目前支援中文分詞、同義詞、標題匹配優先等常見策略,可以點選這裡體驗。
安裝 Elasticsearch
部署 Elasticsearch 最簡單的方法是使用 Elasticsearch Dockerfile 。為了更徹底地折騰,我沒有使用 Docker,好在手動安裝過程也不復雜。
我的虛擬機器和線上環境都是 Ubuntu 14.04.3 LTS,Elasticsearch 用的是目前最新的 2.1.1。一切開始之前,先要檢查機器上是否裝有 java 環境,如果沒有可以通過以下命令安裝:
sudo apt-get install openjdk-7-jre-headless
下載 Elasticsearch 2.1.1 壓縮包並解壓:
1 2 |
wget
-c https: //download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/zip/elasticsearch/2.1.1/elasticsearch-2.1.1.zip
unzip
elasticsearch- 2.1 . 1 .zip
|
我將解壓得到的 elasticsearch-2.1.1 目錄重新命名為 ~/es_root (名稱及位置沒有限制,可以將它挪到你認為合適的任何位置)。Elasticsearch 無需安裝,直接可以執行:
1 2 3 |
cd
~/es_root/bin/
chmod
a+x elasticsearch
./elasticsearch
|
如果螢幕上沒有列印錯誤資訊,說明 Elasticsearch 服務已經成功啟動。新建一個終端,用 curl 驗證下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
curl
-XGET http: //127.0.0.1:9200/?pretty
{
"name" :
"Goblyn" ,
"cluster_name" :
"elasticsearch" ,
"version" :
{
"number" :
"2.1.1" ,
"build_hash" :
"40e2c53a6b6c2972b3d13846e450e66f4375bd71" ,
"build_timestamp" :
"2015-12-15T13:05:55Z" ,
"build_snapshot" :
false ,
"lucene_version" :
"5.3.1"
},
"tagline" :
|