在docker里安装ES和设置索引

  • 安装ES

用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": "广东省深圳市"
}'

 

你可能感兴趣的:(docker)