docker安装单机es和kibana以及基础练习

docker安装单机es和kibana

1、拉取镜像

#镜像
sudo docker pull elasticsearch:7.4.2
#kibana
sudo docker pull kibana:7.4.2

2、启动容器

sudo docker run -di --name=es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.4.2

sudo docker run -it -d -e ELASTICSEARCH_URL=http://10.108.113.211:9200 --name kibana -p 5601:5601 --privileged=true  kibana:7.4.2

3、遇到问题

[Docker搭建kibana访问出现Kibana server is not ready yet]的问题

我们在访问 Kibana 的时候,有可能会出先 Kibana server is not ready yet 的问题 ,原因是因为 ELASTICSEARCH_URL 配置的应该是容器的 ip,而不是本地ip。

3.1查看es的网络ipAdress

sudo docker inspect es容器id

3.2 然后进入 Kibana 容器内部,修改 kibana.yml 中的ip

$ docker exec -it kibana容器id /bin/bash
$ cd config
$ vi kibana.yml

server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true

3.3 只需要将上面的 "http://elasticsearch:9200" 中的 elasticsearch 替换成上一步的es容器内部ip就可以了。

3.4 修改完成之后退出容器,重新启动即可

es  
参考自尚硅谷
1场景
   1  对明细搜索
   2  elk  elasticsearch logstash kibana 
   3  olap  (聚合效率有限)   但是 快速可视化 kibana  
 
2   特点 
   天然分片 天然集群 
   shard 6.x 默认是一个index 5片, 1片不要超过30G   10G以下 建议分一个片 片数太多的 会明细影响性能
   
   天然索引 
     倒排索引 
	    内容(分词) --> 主键
	
	 lucene  es   发动机与车    solr 
    
	
	term index (快速定位分词)  --> term dictionary (分词字典) --> posting list (分词对应的数据的id)
	
	
3  cluster  node  shard  index document field  type
   
4 dsl 
     插删改   
	 es 本身不做物理修改   通过版本的提升  标记新版本  提升性能 目前不能查历史
	 
	 put   幂等
	 post  非幂等
	 
	 查询
	     全文匹配    (text)
		    match   保存数据时要分词 组织成倒排索引  ,搜索的关键词要分词 拿分词依次去匹配倒排索引
         			命中的数据 根据相关度评分 排序展示
		 等值匹配  不分词(keyword)
		    term   
		    
	     短语匹配 
		    phrase_match 类似 like '%xxx%'
			
		 模糊匹配
		    fuzzy   字母容错
			
	     混合查询 
                既有过滤 又有分词匹配
                post_filter  先分词匹配 再过滤
				bool         一边匹配一边过滤 
          范围过滤
		        range 
		  分页 
             from  size
          排序 
              sort
          高亮
               highlight
          聚合 
              aggs  分组 terms  聚合 sum min max avg  count(白送)	stats(聚合全家桶)	

es基础练习

GET _search
{
  "query": {
    "match_all": {}
  }
}
GET _cat/health
#查询各个节点状态
GET _cat/nodes?v
#查询各个索引状态
GET /_cat/indices?v
#查询某个索引的分片情况
GET /_cat/shards/users?v


#Restful风格 get put post delete  
## put 幂等性操作
## post 非幂等性操作
##PUT和DELETE操作是幂等的。所谓幂等是指不管进行多少次操作,结果都一样。比如用PUT修改一篇文章,然后在做同样的操作,每次操作后的结果并没有什么不同,DELETE也是一样。POST操作不是幂等的,比如常见的POST重复加载问题:当我们多次发出同样的POST请求后,其结果是创建了若干的资源。
##POST理解为新增,PUT理解为更新。因此,在curl -XPUT 中需要指定id。而POST的话,ES会自动创建id
##PUT会将新的json值完全替换掉旧的;而POST方式只会更新相同字段的值,其他数据不会改变,新提交的字段若不存在则增加
PUT users/_doc/1
{
     "user" : "Jack2",
    "post_date" : "2019-05-15T14:12:12",
    "message" : "trying out Elasticsearch"
}


PUT /movie_index/movie/1
{ "id":1,
  "name":"operation red sea",
  "doubanScore":8.5,
  "actorList":[  
{"id":1,"name":"zhang yi"},
{"id":2,"name":"hai qing"},
{"id":3,"name":"zhang han yu"}
]
}
PUT /movie_index/movie/2
{
  "id":2,
  "name":"operation meigong river",
  "doubanScore":8.0,
  "actorList":[  
{"id":3,"name":"zhang han yu"}
]
}

PUT /movie_index/movie/3
{
  "id":3,
  "name":"incident red sea",
  "doubanScore":5.0,
  "actorList":[  
{"id":4,"name":"zhang chen"}
]
}
#update 整体替换,和新增没有区别  要求:必须包括全部字段
PUT /movie_index/movie/3
{
  "id":"3",
  "name":"incident red sea",
  "doubanScore":"2.0",
  "actorList":[  
{"id":"1","name":"zhang chen"}
]
}
#修改—某个字段
POST movie_index/movie/3/_update
{ 
  "doc": {
    
    "doubanScore":"7.0"
  } 
}

#### ES 是不删除也不修改任何数据的,而是增加版本号
DELETE /movie_index
DELETE /movie_index/movie/3

##################  3.查询 ################

#搜索type全部数据
GET movie_index/_search

#查询,根据id查询
GET movie_index/movie/3

######  3.1按条件查询 ######
#3.1.1全部查询
GET movie_index/_search
{
  "query": {
    "match_all": {}
  }
  
}
#3.1.2按分词查询
GET movie_index/_search
{
  "query": {
    "match": {
      "name": "operation red sea"
    }
  }
  
}

#倒排索引
operation
red
sea

operation 1,2
red 1,3
sea 1,3
meigong 2
river 2
incident 3

1,2  1,3  1,3




#3.1.3按分词子属性查询

#match 分词匹配,必须用text字段
## text 类型事专用的分词字段,keyword不是分词字段
GET movie_index/_search
{
  "query": {
    "match": {
      "actorList.name": "zhang han yu"
    }
  }
  
}
#term 值等匹配,必须用keyword字段
GET movie_index/_search
{
  "query": {
    "term": {
      "actorList.name.keyword": "zhang han yu"
    }
  }
}
}

#3.1.4短语匹配,类似于like ‘%xxxx%’
GET movie_index/movie/_search
{
    "query":{
      "match_phrase": {"name":"operation red"}
    }
}
#3.1.5模糊匹配(容错匹配)
#校正匹配分词,当一个单词都无法准确匹配,es通过一种算法对非常接近的单词也给与一定的评分,能够查询出来,但是消耗更多的性能。
GET movie_index/movie/_search
{
    "query":{
      "fuzzy": {"name":"operator"}
    }
}

###### 混和 1 先匹配 再过滤 

GET movie_index/movie/_search
{
    "query":{
      "match": {"name":"red"}
    },
    "post_filter":{
      "term": {
        "actorList.id": 3
      }
    }
}

GET movie_index/movie/_search
{
  
  "query":{
    "match":{"name":"red"}
    },
    
    "post_filter":{
      "term":{
        "actorList.name.keyword":"zhang han yu"
      }
    }
    
  
}


###### 混和 2 同时匹配+过滤
GET movie_index/movie/_search
{
  
  "query":{
      "bool":{
          "must":[
            {"match":{"name":"red"}  }
            ,
            {"match":{"id":1}}
          ]
          ,
          "filter":{
              "term":{
                  "actorList.name.keyword":"zhang han yu"
            }
          }
       
      }
  }
  
    
  
}

###过滤--按范围过滤
GET movie_index/movie/_search
{
  
  "query":{
      "range":{
        "doubanScore":{
          "gte":6,
          "lte":9
        }
      }
  }
  
}
### 排序
#"order":"desc"
#"order":"asc"
GET movie_index/movie/_search
{
  
  "query":{
      "range":{
        "doubanScore":{
          "gte":6,
          "lte":9
        }
      }
  },
  "sort":{
    "doubanScore":{
      
      "order":"asc"
    }
  }
  
}

#分页查询
#from 从第几行开始,size每页的大小
GET movie_index/movie/_search
{
  "query": { "match_all": {} },
  "from": 1,
  "size": 1
}

#指定查询的字段
GET movie_index/movie/_search
{
  "query": { "match_all": {} },
  "_source": ["name", "doubanScore"]
}


####  聚合
#keyword 是某个字符串字段,专门储存不分词格式的副本 ,在某些场景中只允许只用不分词的格式,比如过滤filter 比如 聚合aggs, 所以字段要加上.keyword的后缀
#取出每个演员共参演了多少部电影
GET movie_index/movie/_search
{ 
  "aggs": {
    "groupby_actor": {
      "terms": {
        "field": "actorList.name.keyword"  
      }
    }
  }
}

#每个演员参演电影的平均分是多少,并按评分排序
GET movie_index/movie/_search
{ 
  "aggs": {
    "groupby_actor_id": {
      "terms": {
        "field": "actorList.name.keyword" ,
        "order": {
          "avg_score": "desc"
          }
      },
      "aggs": {
        "avg_score":{
          "avg": {
            "field": "doubanScore" 
          }
        }
       }
    } 
  }
}



#"analyzer": "ik_smart"
GET _analyze
{
  "analyzer": "ik_max_word", 
  "text":"红海行动"
}
#查看mapping
#但是如果没有设定mapping系统会自动,根据一条数据的格式来推断出应该的数据格式
#默认只有text会进行分词,keyword是不会分词的字符串。
#mapping除了自动定义,还可以手动定义,但是只能对新加的、没有数据的字段进行定义。一旦有了数据就无法再做修改了

GET movie_index/_mapping/
  
#基于中文分词搭建索引  
PUT movie_chn
{
  "mappings": {
    
      "properties": {
        "id":{
          "type": "long"
        },
        "name":{
          "type": "text"
          , "analyzer": "ik_smart"
        },
        "doubanScore":{
          "type": "double"
        },
        "actorList":{
          "properties": {
            "id":{
              "type":"long"
            },
            "name":{
              "type":"keyword"
            }
          }
        }
      }
    }
  
}


GET movie_chn/_mapping/
GET movie_chn/_search
DELETE movie_chn  
PUT movie_chn/_doc/1
{ "id":1,
  "name":"红海行动",
  "doubanScore":8.5,
  "actorList":[  
  {"id":1,"name":"张译"},
  {"id":2,"name":"海清"},
  {"id":3,"name":"张涵予"}
 ]
}
PUT /movie_chn/_doc/2
{
  "id":2,
  "name":"湄公河行动",
  "doubanScore":8.0,
  "actorList":[  
{"id":3,"name":"张涵予"}
]
}

PUT movie_chn/_doc/3
{
  "id":3,
  "name":"红海事件",
  "doubanScore":5.0,
  "actorList":[  
{"id":4,"name":"张晨"}
]
}

GET /movie_chn/_doc/_search
{
  "query":{
    "match":{
      "name":"行动"
    }
  }
}

#########  索引 ############
#索引别名就像一个快捷方式或软连接,可以指向一个或多个索引,也可以给任何一个需要索引名的API来使用。别名 带给我们极大的灵活性,允许我们做下面这些:
#1.	给多个索引分组 (例如, last_three_months)
#2.	给索引的一个子集创建视图
#3.	在运行的集群中可以无缝的从一个索引切换到另一个索引

## 建表时直接声明
PUT movie_chn_2020
{  "aliases": {
      "movie_chn_2020-query": {}
  }, 
  "mappings": {
    
    "properties": {
      "id":{
        "type": "long"
      },
      "name":{
        "type": "text"
        , "analyzer": "ik_smart"
      },
      "doubanScore":{
        "type": "double"
      },
      "actorList":{
        "properties": {
          "id":{
            "type":"long"
          },
          "name":{
            "type":"keyword"
          }
        }
      }
    }
    
  }
}

## 为已存在的索引增加别名
POST  _aliases
{
    "actions": [
        { "add":    { "index": "movie_chn_2020", "alias": "movie_chn_2020-test" }}
    ]
}

GET movie_chn_2020-test/_search

## 删除某个索引的别名
POST  _aliases
{
    "actions": [
        { "remove":    { "index": "movie_chn_2020", "alias": "movie_chn_2020-query" }}
    ]
}
## 查看别名列表
GET  _cat/aliases?v


POST /_aliases
{
    "actions": [
        { "remove": { "index": "movie_chn_2020", "alias": "movie_chn_2020-query" }},
        { "add":    { "index": "movie_chn", "alias": "movie_chn_2020-query" }}
    ]
}

GET movie_chn_2020-query/_search

######### 索引模板 #########
#索引模板就是利用es 在没有索引的时候使用模板来建立索引
#注意 如果es中的shard特别多 有可能创建索引会变慢,如果延迟不能接受。建议别用模板而用定时脚本建立
#下面的索引模板的意思
#index_patterns,只要索引符合movie_test为前缀的索引,都是以该模板为标准构建
#"aliases,索引的别名,一个是movie_test-query,一个是"索引名+query"
#索引的作用
#movie_test-query 用来聚合统计,只要以movie_test开头的索引,都会被movie_test-query所查询到
PUT _template/template_movie2020
{
  "index_patterns": ["movie_test*"],                  
  "settings": {                                               
    "number_of_shards": 1
  },
  "aliases" : { 
    "{index}-query": {},
    "movie_test-query":{}
  },
  "mappings": {                                          
  
      "properties": {
        "id": {
          "type": "keyword"
        },
        "movie_name": {
          "type": "text",
          "analyzer": "ik_smart"
        }
      }
        
  }
}
#测试
POST movie_test_202001/_doc
{
  "id":"333",
  "name":"zhang3"
}
POST movie_test_202002/_doc
{
  "id":"222",
  "name":"li4"
}

GET movie_test-query/_search

#查看系统中已有的模板清单
GET  _cat/templates  
#查看某个模板详情
GET  _template/template_movie2020





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值