Elasticsearch-Kibana操作ES-Docker(二)

1. 安装启动Kibana

1.1 下载Kibana镜像

docker pull kibana:7.9.3

注意: Kibana版本最好与Elasticsearch版本一致

1.2 启动Kibana镜像

docker run \
-d \
--name kibana \
--net es-net \
-p 5601:5601 \
-e ELASTICSEARCH_HOSTS='["http://node1:9200","http://node2:9200","http://node3:9200"]' \
--restart=always \
kibana:7.9.3

参数:
-e ELASTICSEARCH_HOSTS
=’[“http://node1:9200”,“http://node2:9200”,“http://node3:9200”]’

设置Kibana连接ES的地址, 这里直接通过node1, 容器名称连接虚拟网络

1.3 访问Kibana

地址: http://192.168.126.130:5601
进入Dev Tools操作ES

2. ES索引,分片,副本

2.1 索引

Elasticsearch索引用来存储我们要搜索的数据,以倒排索引结构进行存储。
正向索引: 通过key查询value的值
倒排索引: 通过value查询key, 也叫反向索引
所以ES搜索数据是通过部分内容获取进行搜索的
例如: 建立一个商品索引, 把所有的商品信息都存入这个索引中, 供我们搜索
在这里插入图片描述

2.2 分片

当一个索引中存放了大量数据, 就会造成性能下降, 这时我们就需要对数据进行分片存储
每个节点都创建一个索引, 将数据分散到不同的节点上的索引分片中存储, 提高性能
在这里插入图片描述

每个分片都是一个独立的索引,数据分散存放在多个分片中,也就是说,每个分片中存储的都是不同的数据。搜索时会同时搜索多个分片,并将搜索结果进行汇总。

2.3 副本

分片后, 每个数据存放在不同的分片中, 但是如果其中一个宕机, 那么里面的数据就无法搜索了
所以需要对分片创建多个副本来解决
在这里插入图片描述
即使其中一个服务宕机, 那么 其他服务中的副本还可以继续工作, 不会造成数据不可搜索
分片副本的工作机制:

  1. 主分片的数据会复制到副本分片
  2. 搜索时,以负载均衡的方式工作,提高处理能力
  3. 主分片宕机时,其中一个副本分片会自动提升为主分片

2.4 创建索引

创建一个名为 products 的索引,用来存储商品数据。

# 创建索引,命名为 products
PUT /products
{
  "settings": {
    "number_of_shards": 3, 
    "number_of_replicas": 2
  }
}

参数说明:

  1. number_of_shards: 索引分片(默认5)
  2. number_of_replicas: 分片副本(默认1)

这里节点3个, 每个节点都创建一个索引分片, 每个分片在另外两个节点创建副本

通过索引过滤查看products索引
在这里插入图片描述
粗框为主分片,细框为副本分片

3.映射(数据结构)

类似于数据库表结构,索引数据也被分为多个数据字段,并且需要设置数据类型和其他属性。

映射,是对索引中字段结构的定义和描述。

3.1 字段的数据类型

常用类型:

1. 数字类型:

  1. byte、short、integer、long
  2. float、double
  3. unsigned_long

2.字符串类型:

  1. text : 会进行分词
  2. keyword : 不会进行分词,适用于email、主机地址、邮编等

3. 日期和时间类型:

  1. date

3.2 创建映射-Kibana中

在 products 索引中创建映射。

分词器设置:

  • analyzer:在索引中添加文档时,text类型通过指定的分词器分词后,再插入倒排索引
  • search_analyzer:使用关键词检索时,使用指定的分词器对关键词进行分词

查询时,关键词优先使用 search_analyzer 设置的分词器,如果 search_analyzer 不存在则使用 analyzer 分词器。

# 定义mapping映射,数据结构
PUT /products/_mapping
{
  "properties": {
    "id": {
      "type": "long"
    },
    "title": {
      "type": "text",
      "analyzer": "ik_max_word",
      "search_analyzer": "ik_smart"
    },
    "category": {
      "type": "text",
      "analyzer": "ik_smart",
      "search_analyzer": "ik_smart"
    },
    "price": {
      "type": "float"
    },
    "city": {
      "type": "text",
      "analyzer": "ik_smart",
      "search_analyzer": "ik_smart"
    },
    "barcode": {
      "type": "keyword"
    }
  }
}

查看映射

GET /products/_mapping

在这里插入图片描述

3.3 添加文档

每个文档会有一个id值, id可以指定, 也可以自动生成, 一般使用数据的id作为文档的id

# 指定id
PUT /products/_doc/10033
{
  "id":"10033",
  "title":"SONOS PLAY:5(gen2) 新一代PLAY:5无线智能音响系统 WiFi音箱家庭,潮酷数码会场",
  "category":"潮酷数码会场",
  "price":"3980.01",
  "city":"上海",
  "barcode":"527848718459"
}

# 自动生成id
POST /products/_doc
{
  "id":"10027",
  "title":"vivo X9前置双摄全网通4G美颜自拍超薄智能手机大屏vivox9",
  "category":"手机会场",
  "price":"2798.00",
  "city":"广东东莞",
  "barcode":"541396973568"
}

查看文档

GET /products/_doc/10033

查看指定文档title字段的分词结果:

GET /products/_doc/10033/_termvectors?fields=title

3.4 修改文档

底层索引数据无法修改,修改数据实际上是先删除再重新添加。
两种修改的方式:

  1. PUT 修改所有数据(相当于覆盖)
# 修改文档 - 替换
PUT /products/_doc/10033
{
  "id":"10037",
  "title":"SONOS PLAY:1无线智能音响系统 美国原创WiFi连接 家庭桌面音箱",
  "category":"潮酷数码会场",
  "price":"9999.99",
  "city":"上海",
  "barcode":"527783392239"
}
  1. POST 修改部分字段
    语法: 索引/_update/id
# 修改文档 - 更新部分字段
POST /products/_update/10033
{
  "doc": {
    "price":"8888.88",
    "city":"深圳"
  }
}

3.5 删除文档

  1. 通过id删除
DELETE /products/_doc/10033
  1. 删除所有文档
POST /products/_delete_by_query
{
  "query": {
    "match_all": {}
  }
}

3.6 删除索引

DELETE /products

4. 搜索文档

4.1 查看数据

搜索 pditems 索引中10条数据:

GET /pditems/_search
{
  "query": {
    "match_all": {}
  },
  "size": 100
}

4.2 搜索文档

1. 搜索所有数据

# 搜索 pditems 索引中全部数据
POST /pditems/_search
{
  "query": {
    "match_all": {}
  }
}

2.关键词搜索

# 查询 pditems 索引中title中包含"电脑"的商品
POST /pditems/_search
{
  "query": {
    "match": {
      "title": "电脑"
    }
  }
}

3.过滤器搜索

# 价格大于2000,并且title中包含"电脑"的商品
POST /pditems/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "电脑"
          }
        }
      ],
      "filter": [
        {
          "range": {
            "price": {
              "gte": "2000"
            }
          }
        }
      ]
    }
  }
}

4.搜索结果高亮显示

POST /pditems/_search
{
	"query": {
		"multi_match":{
			"query": "手机",
			"fields": ["title", "sell_point"]
		}
	},
	"highlight" : {
        "pre_tags" : ["<i class=\"highlight\">"],
        "post_tags" : ["</i>"],
        "fields" : {
            "title" : {},
            "sell_point" : {
              "pre_tags": "<em>",
              "post_tags": "</em>"
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值