一、Elasticsearch
1.1簡介
開源的 Elasticsearch 是目前全文搜索引擎的首選。
它可以快速地儲存、搜索和分析海量數(shù)據(jù)。

Elastic 的底層是開源庫 Lucene。Elastic 是 Lucene 的封裝,提供了 REST API 的操作接口,開箱即用。
1.2安裝
本文使用docker安裝elasticsearch:
$ docker pull elasticsearch:6.6.0
運行elasticsearch:
$ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.6.0
瀏覽器輸入127.0.0.1:9200 如得到和下面類似的響應,則說明安裝成功。
{
"name" : "1qMIj3m",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "AT68_T_DTp-1qgIJlctQqA",
"version" : {
"number" : "6.6.0",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "f27399d",
"build_date" : "2019-01-24T11:27:09.439740Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
為方便以后的操作,安裝Kibana,Kibana是Elasticsearch的開源數(shù)據(jù)可視化插件。它在Elasticsearch集群上索引的內(nèi)容之上提供可視化功能。用戶可以在大量數(shù)據(jù)之上創(chuàng)建條形圖,折線圖和散點圖,或餅圖和貼圖。
同樣通過docker拉取鏡像:
$ docker pull kibana:6.6.0
啟動:
$ docker run -d --name kibana -p 5601:5601 kibana:6.6.0
需要注意的是,運行不同主版本號的 Kibana 和 Elasticsearch 是不支持的(例如 Kibana 5.x 和 Elasticsearch 2.x),若主版本號相同,運行 Kibana 子版本號比 Elasticsearch 子版本號新的版本也是不支持的(例如 Kibana 5.1 和 Elasticsearch 5.0)。
編寫docker-compose.yml方便管理elasticsearch和kibana容器:
version: '3'
services:
elasticsearch:
build: elasticsearch:6.6.0
container_name: elasticsearch
environment:
- discovery.type=single-node
ports:
- 9200:9200
- 9300:9300
kibana:
image: kibana:6.6.0
container_name: kibana
ports:
- 5601:5601
之后可通過docker-compose up命令來啟動兩個容器。
二、中文分詞
直接使用對應的中文分詞插件elasticsearch-analysis-ik來進行中文分詞 ,這里通過編寫Dockerfile文件,來自定義一個具有中文分詞插件的elasticsearch容器。
在docker-compose.yml文件的同級目錄新建名為es的文件夾,在es文件夾中編寫Dockerfile。
目錄結(jié)構(gòu)如下:
.
├── docker-compose.yml
└── es
└── Dockerfile
Dockerfile文件內(nèi)容如下:
FROM elasticsearch:6.6.0
RUN yes | ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip
修改docker-compose.yml 構(gòu)建我們在Dockerfile中的鏡像
version: '3'
services:
elasticsearch:
build: ./es
container_name: elasticsearch
environment:
- discovery.type=single-node
ports:
- 9200:9200
- 9300:9300
kibana:
image: kibana:6.6.0
container_name: kibana
ports:
- 5601:5601
修改完成之后記得執(zhí)行docker-compose build命令更新鏡像。
三、同義詞詞典
參考es的相關(guān)文檔:Synonym Token Filter
Two synonym formats are supported: Solr, WordNet.
也就是es的同義詞詞典格式目前支持兩種格式,本文僅使用Solr這種模式的同義詞。
詞典部分本文采用哈工大同義詞詞林,這里可以下載該詞典。在實際業(yè)務(wù)中應根據(jù)實際需求對詞典進行優(yōu)化。
下載后需要根據(jù)Solr模式的同義詞格式進行格式化一下,放至es文件夾下。
格式化后同義詞詞典synonym.txt的部分內(nèi)容如下:
人,士,人物,人士,人氏,人選
人類,生人,全人類
勞力,勞動力,工作者
匹夫,個人
此時目錄結(jié)構(gòu)如下:
.
├── docker-compose.yml
└── es
├── Dockerfile
└── synonym.txt
由于需要添加同義詞詞典,我們需要更新Dockerfile
FROM elasticsearch:6.6.0
RUN yes | ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip
RUN mkdir -p ./config/analysis && chown -R elasticsearch:root ./config/analysis
COPY --chown=elasticsearch:root synonym.txt /usr/share/elasticsearch/config/analysis/
目的是在elasticsearch/config目錄下,建立analysis目錄, 并在analysis目錄下放入本地synonym.txt文件。
修改完成之后docker-compose build命令更新鏡像。
四、測試
新建名為first的索引,自定義一個叫做ik_synonym的analyzer
PUT /first
{
"settings": {
"analysis": {
"filter": {
"my_stop": {
"type": "stop",
"stopwords": [" "]
},
"my_synonym": {
"type": "synonym",
"synonyms_path": "analysis/synonym.txt"
}
},
"analyzer": {
"ik_synonym": {
"type": "custom",
"tokenizer": "ik_max_word",
"filter": ["my_stop","my_synonym"]
}
}
}
}
}
設(shè)置好后,可以用以下命令檢測同義詞是否配置成功
GET /first/_analyze
{
"analyzer": "ik_synonym",
"text": "番茄"
}
結(jié)果如下
{
"tokens" : [
{
"token" : "番茄",
"start_offset" : 0,
"end_offset" : 2,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "西紅柿",
"start_offset" : 0,
"end_offset" : 2,
"type" : "SYNONYM",
"position" : 0
}
]
}
至此,elasticsearch環(huán)境基本搭建完成。本人水平有限,若有疏漏之處希望各位能夠指正,共同學習,謝謝。