目前elastic官网推荐使用的两个版本分别是:
我尝试安装8.x版本的,不过似乎由于虚拟机内存大小的原因集群状态总是转为RED无法重置elastic账户的密码,因此我最终选择使用7.x版本的elasticsearch,8.x版本的默认使用https来保证数据的安全性,感兴趣的同学可以自行尝试。
由于IK分词器对于7.x版本最高只有7.17.6版本与之对应,所以下载7.17.6版本的elasticsearch
docker pull elasticsearch:7.17.6
一般来说,我们不希望在elasticsearch容器停止时丢失elasticsearch中的文件,因此我们创建一个数据卷来关联elasticsearch的data文件夹。在elasticsearch的使用中我们可能会安装各种插件,因此创建了另一个数据卷来关联elasticsearch的plugins文件夹
docker volume create es-data
docker volume create es-plugins
一般来说,我们在使用elasticsearch的时候会结合kibana一起使用,为了他们能够正常关联,我们创建一个网络来连接他们
docker net create es-net
ES_JAVA_OPTS是在设置堆大小,我修改这个环境变量主要是因为我虚拟机的内存有限,硬件允许的可以忽略
因为我是单机启动,所以将discovery.type设置为single-node
es-net为上一步我们创建的网络名
docker run \
-d \
--name es \
--net es-net \
-p 9200:9200 \
-p 9300:9300 \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
elasticsearch:7.17.6
访问9200端口,如果浏览器中出现这串json就证明elasticsearch启动成功了
{
"name": "ab675a286e72",
"cluster_name": "docker-cluster",
"cluster_uuid": "ZdLfD65lQdKStAJi1yWMMQ",
"version": {
"number": "7.17.13",
"build_flavor": "default",
"build_type": "docker",
"build_hash": "2b211dbb8bfdecaf7f5b44d356bdfe54b1050c13",
"build_date": "2023-08-31T17:33:19.958690787Z",
"build_snapshot": false,
"lucene_version": "8.11.1",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}
Kibana 是为 Elasticsearch设计的开源分析和可视化平台
docker pull kibana:7.17.6
ELASTICSEARCH_HOSTS环境变量为elasticsearch服务的地址,其中http://es:9200中的es是我们运行elasticsearch容器时起的别名
es-net为我们在之前创建的网络的名称
docker run \
-d \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--name kibana \
--net es-net \
-p 5601:5601 \
kibana:7.17.6
Kibana的启动比较慢,一段时间以后访问5601端口如果能正常进入控制台界面则证明Kibana部署成功
elasticsearch默认的分词器对于中文分词不友好
标准分词器分词:
POST /_analyze
{
"text": "elasticsearch 8.x版本太难啦!"
, "analyzer": "standard"
}
{
"tokens" : [
{
"token" : "elasticsearch",
"start_offset" : 0,
"end_offset" : 13,
"type" : "" ,
"position" : 0
},
{
"token" : "8",
"start_offset" : 14,
"end_offset" : 15,
"type" : "" ,
"position" : 1
},
{
"token" : "x",
"start_offset" : 16,
"end_offset" : 17,
"type" : "" ,
"position" : 2
},
{
"token" : "版",
"start_offset" : 17,
"end_offset" : 18,
"type" : "" ,
"position" : 3
},
{
"token" : "本",
"start_offset" : 18,
"end_offset" : 19,
"type" : "" ,
"position" : 4
},
{
"token" : "太",
"start_offset" : 19,
"end_offset" : 20,
"type" : "" ,
"position" : 5
},
{
"token" : "难",
"start_offset" : 20,
"end_offset" : 21,
"type" : "" ,
"position" : 6
},
{
"token" : "啦",
"start_offset" : 21,
"end_offset" : 22,
"type" : "" ,
"position" : 7
}
]
}
可以看到默认分词器对英文分词效果还不错,但对于中文分词不太友好。
我们再来实施ik分词器
POST /_analyze
{
"text": "elasticsearch 8.x版本太难啦!"
, "analyzer": "ik_smart"
}
{
"tokens" : [
{
"token" : "elasticsearch",
"start_offset" : 0,
"end_offset" : 13,
"type" : "ENGLISH",
"position" : 0
},
{
"token" : "8.x",
"start_offset" : 14,
"end_offset" : 17,
"type" : "LETTER",
"position" : 1
},
{
"token" : "版本",
"start_offset" : 17,
"end_offset" : 19,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "太难",
"start_offset" : 19,
"end_offset" : 21,
"type" : "CN_WORD",
"position" : 3
},
{
"token" : "啦",
"start_offset" : 21,
"end_offset" : 22,
"type" : "CN_CHAR",
"position" : 4
}
]
}
可以看到ik分词器对与中文分词十分友好。接下来我们就安装ik分词器
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.6/elasticsearch-analysis-ik-7.17.6.zip
之前我们将es-plugins数据卷挂载到了es容器内的plugins文件夹。
我们先使用魔法从github上下载
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.6/elasticsearch-analysis-ik-7.17.6.zip
然后将压缩包解压到数据卷对应的位置,然后重启elasticsearch容器即可。