启动虚拟机
在设置系统里把VirtualBox的内存调大一点,调整到1G,然后执行 vagrant up 启动。
启动成功后执行 vagrant ssh 连接上虚拟机。
下载ealasticsearch和kibana
sudo docker pull elasticsearch:7.4.2
sudo docker pull kibana:7.4.2
配置
free -m # 查看虚拟机还有多大内存
sudo mkdir -p /mydata/elasticsearch/config
sudo mkdir -p /mydata/elasticsearch/data
su root
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
chmod -R 777 /mydata/elasticsearch/
启动ElasticSearch
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms128m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
在浏览器访问 http://192.168.56.10:9200/ 会出现下面信息。
{
"name" : "dbb5a93f6439",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "2f7TL90uQWq6b2aPZTvjAQ",
"version" : {
"number" : "7.4.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "2f90bbf7b93631e52bafb59b3b049cb44ec25e96",
"build_date" : "2019-10-28T20:40:44.881551Z",
"build_snapshot" : false,
"lucene_version" : "8.2.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
设置开机启动elasticsearch
docker update elasticsearch --restart=always
查看elasticsearch日志
docker logs elasticsearch 或者 docker logs <容器id>
启动kibana:
docker run --name kibana \
-e ELASTICSEARCH_HOSTS=http://192.168.56.10:9200 \
-p 5601:5601 -d kibana:7.4.2
设置开机启动kibana
docker update kibana --restart=always
测试
查看elasticsearch版本信息:http://192.168.56.10:9200/
显示elasticsearch 节点信息:http://192.168.56.10:9200/_cat/nodes
访问Kibana:http://192.168.56.10:5601/app/kibana
http://192.168.56.10:9200/_cat
查看集群的健康状况:http://localhost:9200/_cat/health?v
查看集群的节点:http://localhost:9200/_cat/?v
查看所有索引:http://localhost:9200/_cat/indices?v
创建一个索引
创建一个名为 customer 的索引。pretty要求返回一个漂亮的json 结果
PUT /customer?pretty
再查看一下所有索引:http://localhost:9200/_cat/indices?v
GET /_cat/indices?v
创建一个文档到customer索引中
PUT /customer/_doc/1?pretty
{
"name": "John Doe"
}
从customer索引中获取指定id的文档
GET /customer/_doc/1?pretty
查询所有文档
GET /customer/_search?q=*&sort=name.keyword:asc
JSON格式方式
GET /customer/_search
{
"query": { "match_all": {} },
"sort": [
{"name.keyword": "asc" }
]
}
索引管理
创建索引
创建一个名为twitter的索引,设置索引的分片数为3,备份数为2。
PUT twitter
{
"settings" : {
"index" : {
"number_of_shards" : 3,
"number_of_replicas" : 2
}
}
}
说明:
默认的分片数是5到1024
默认的备份数是1
索引的名称必须是小写的,不可重名
创建的命令还可以简写为
PUT twitter
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 2
}
}
创建mapping映射
PUT twitter
{
"settings" : {
"index" : {
"number_of_shards" : 3,
"number_of_replicas" : 2
}
},
"mappings": {
"_doc": {
"properties": {
"type": { "type": "keyword" },
"name": { "type": "text" },
"user_name": { "type": "keyword" },
"email": { "type": "keyword" },
"content": { "type": "text" },
"tweeted_at": { "type": "date" }
}
}
}
}
创建索引时加入别名定义
PUT twitter
{
"aliases" : {
"alias_1" : {},
"alias_2" : {
"filter" : {
"term" : {"user" : "kimchy" }
},
"routing" : "kimchy"
}
}
}
Get Index 查看索引的定义信息
GET /twitter
GET /twitter/_settings
GET /twitter/_mapping
删除索引
DELETE /twitter
判断索引是否存在
HEAD twitter
修改索引的settings信息
索引的设置信息分为静态信息和动态信息两部分。静态信息不可更改,如索引的分片数。动态信息可以修改。
参考https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-modules-settings
修改备份数
PUT /twitter/_settings
{
"index" : {
"number_of_replicas" : 2
}
}
设置回默认值,用null
PUT /twitter/_settings
{
"index" : {
"refresh_interval" : null
}
}
Multi Field 多重字段
当我们需要对一个字段进行多种不同方式的索引时,可以使用fields多重字段定义。如一个字符串字段即需要进行text分词索引,也需要进行keyword 关键字索引来支持排序、聚合;或需要用不同的分词器进行分词索引。
示例:定义多重字段
PUT my_index
{
"mappings": {
"_doc": {
"properties": {
"city": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
}
}
}
}
往多重字段里面添加文档
PUT my_index/_doc/1
{
"city": "New York"
}
PUT my_index/_doc/2
{
"city": "York"
}
获取多重字段的值:
GET my_index/_search
{
"query": {
"match": {
"city": "york"
}
},
"sort": {
"city.raw": "asc"
},
"aggs": {
"Cities": {
"terms": {
"field": "city.raw"
}
}
}
}
动态映射
动态映射:ES中提供的重要特性,让我们可以快速使用ES,而不需要先创建索引、定义映射。如我们直接向ES提交文档进行索引:
PUT data/_doc/1
{ "count": 5 }
ES将自动为我们创建data索引、_doc 映射、类型为 long 的字段 count
索引文档时,当有新字段时, ES将根据我们字段的json的数据类型为我们自动加人字段定义到mapping中。
Date detection 时间侦测
所谓时间侦测是指我们往ES里面插入数据的时候会去自动检测我们的数据是不是日期格式的,是的话就会给我们自动转为设置的格式
date_detection 默认是开启的,默认的格式dynamic_date_formats为:[ "strict_date_optional_time","yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"]
PUT my_index/_doc/1
{
"create_date": "2015/09/02"
}
GET my_index/_mapping
自定义时间格式:
PUT my_index
{
"mappings": {
"_doc": {
"dynamic_date_formats": ["MM/dd/yyyy"]
}
}
}
禁用时间侦测:
PUT my_index
{
"mappings": {
"_doc": {
"date_detection": false
}
}
}
Numeric detection 数值侦测,开启数值侦测(默认是禁用的)
PUT my_index
{
"mappings": {
"_doc": {
"numeric_detection": true
}
}
}
PUT my_index/_doc/1
{
"my_float": "1.0",
"my_integer": "1"
}
参考链接:
https://mp.weixin.qq.com/s/S5-04qcBvrAl3Q61tW1pzA
https://laowan.blog.csdn.net/article/details/117732167