用docker命令下载镜像安装
docker pull elasticsearch
这样的命令是默认下载最新版,如果我们要指定安装某一版本,则可以这样
首先用以下命令查询es的版本
docker search elasticsearch
这样会列出一些版本,指定版本安装
docker pull elasticsearch docker.io/elasticsearch:5.6.12
下载完后,运行docker images 查询出所有镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/rabbitmq 3.8.1-management-alpine d2b1c2a90750 6 days ago 139 MB
docker.io/redis 5.0.6-alpine 6f63d037b592 3 weeks ago 29.3 MB
docker.io/openjdk 8u212-jdk-alpine a3562aa0b991 6 months ago 105 MB
docker.io/elasticsearch 5.6.12 5acf0e8da90b 14 months ago 486 MB
接下来我们运行docker run命令安装ES
docker run -d --rm --name myES -p 9200:9200 -p 9300:9300 docker.io/elasticsearch:5.6.12
但是这样的话,我们打开浏览器的Head插件是不能连上我们刚安装的ES的,原因是需要进行跨域配置,具体的配置文件这样找
docker exec -it myES bash
这样进入容器内部,然后进入config目录,cd config,发现里面有一个elasticsearch.yml文件,我们需要将里面的内容修改为
http.cors.enabled: true
http.cors.allow-origin: "*"
但是因为docker容器里面不支持vi命令,那怎么办呢,我们可以使用docker的挂载文件功能
首先我们需要将这个文件从容器里面复制到宿主机里
docker cp myES:/usr/share/elasticsearch/config/elasticsearch.yml /root/myfile/elasticsearch.yml
命令解释:意思是拷贝docker里myES这个容器里面的/usr/share/elasticsearch/config/elasticsearch.yml到宿主机/root/myfile/elasticsearch.yml
这样我们就可以修改宿主机里的文件内容了
修改完毕后,我们需要挂载了
docker里的挂载命令:-v 宿主机文件:docker文件
具体启动命令如下
docker run -d --name myES -p 9200:9200 -p 9300:9300 -v /root/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml docker.io/elasticsearch:7.4.0
这样,我们就能在浏览器用HEAD插件查看ES里面的情况了
我们可以通过curl命令在任意一台能联通ES服务器的机器上创建索引
具体示例如下
curl -XPUT http://192.168.145.128:9200/test_index1 -d'
{
"settings": {
"index": {
"number_of_replicas": 1,
"number_of_shards": 3
}
},
"mappings": {
"test_type": {
"dynamic_date_formats": [
"yyyy-MM-dd"
],
"properties": {
"id": {
"type": "text",
"index": "not_analyzed",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"name": {
"type": "text",
"index": "not_analyzed",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"addr": {
"type": "text",
"index": "analyzed"
},
"birthday": {
"type": "date"
},
"uuid": {
"type": "text",
"index": false
}
}
}
}
}'
其中,number_of_replicas为副本数量,number_of_shards为分片数量,dynamic_date_formats意思为自动为data类型的字段转换格式为yyyy-MM-dd
如果我们确定某一个字段不需要索引的话,就可以用"index": false 来设置不索引,这样的话会提高一点点ES插入的性能,但是这样做的话,我们是没法通过这个字段索引出来需要的文档的。PS:这样设置并不会妨碍这个字段的展示,意思就是如果能搜索出文档,这个字段同样能被搜索出来,只是不能被用来做搜索条件。
更新
对于ES7,上述的建索引的命令不能用,因为官方表示ES7版本以后的索引都不支持索引类型,都用默认的doc类型,新的命令如下
curl -H "Content-Type: application/json" -XPUT http://localhost:9200/test_index1 -d'
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"id": {
"type": "keyword"
},
"name": {
"type": "keyword"
},
"country": {
"type": "keyword"
},
"addr": {
"type": "text",
"analyzer":"ik_smart"
},
"age": {
"type": "integer"
},
"date": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
},
"birthday": {
"type": "date",
"format": "yyyy-MM-dd"
}
}
}
}'
插入数据命令如下
curl -H "Content-Type: application/json" -XPUT http://localhost:9200/test_index1/_doc/11111 -d'
{
"name": "张三",
"country": "中国",
"age": 20,
"birthday": "2000-01-01",
"id": "112233",
"addr": "广东省深圳市"
}'