docker pull kibana:7.9.3
注意: Kibana版本最好与Elasticsearch版本一致
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, 容器名称连接虚拟网络
地址: http://192.168.126.130:5601
进入Dev Tools操作ES
Elasticsearch索引用来存储我们要搜索的数据,以倒排索引结构进行存储。
正向索引: 通过key查询value的值
倒排索引: 通过value查询key, 也叫反向索引
所以ES搜索数据是通过部分内容获取进行搜索的
例如: 建立一个商品索引, 把所有的商品信息都存入这个索引中, 供我们搜索
当一个索引中存放了大量数据, 就会造成性能下降, 这时我们就需要对数据进行分片存储
每个节点都创建一个索引, 将数据分散到不同的节点上的索引分片中存储, 提高性能
每个分片都是一个独立的索引,数据分散存放在多个分片中,也就是说,每个分片中存储的都是不同的数据。搜索时会同时搜索多个分片,并将搜索结果进行汇总。
分片后, 每个数据存放在不同的分片中, 但是如果其中一个宕机, 那么里面的数据就无法搜索了
所以需要对分片创建多个副本来解决
即使其中一个服务宕机, 那么 其他服务中的副本还可以继续工作, 不会造成数据不可搜索
分片副本的工作机制:
创建一个名为 products 的索引,用来存储商品数据。
# 创建索引,命名为 products
PUT /products
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
参数说明:
这里节点3个, 每个节点都创建一个索引分片, 每个分片在另外两个节点创建副本
通过索引过滤查看products索引
粗框为主分片,细框为副本分片
类似于数据库表结构,索引数据也被分为多个数据字段,并且需要设置数据类型和其他属性。
映射,是对索引中字段结构的定义和描述。
1. 数字类型:
2.字符串类型:
3. 日期和时间类型:
在 products 索引中创建映射。
分词器设置:
查询时,关键词优先使用 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
每个文档会有一个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
GET /products/_doc/10033/_termvectors?fields=title
底层索引数据无法修改,修改数据实际上是先删除再重新添加。
两种修改的方式:
# 修改文档 - 替换
PUT /products/_doc/10033
{
"id":"10037",
"title":"SONOS PLAY:1无线智能音响系统 美国原创WiFi连接 家庭桌面音箱",
"category":"潮酷数码会场",
"price":"9999.99",
"city":"上海",
"barcode":"527783392239"
}
# 修改文档 - 更新部分字段
POST /products/_update/10033
{
"doc": {
"price":"8888.88",
"city":"深圳"
}
}
DELETE /products/_doc/10033
POST /products/_delete_by_query
{
"query": {
"match_all": {}
}
}
DELETE /products
搜索 pditems 索引中10条数据:
GET /pditems/_search
{
"query": {
"match_all": {}
},
"size": 100
}
# 搜索 pditems 索引中全部数据
POST /pditems/_search
{
"query": {
"match_all": {}
}
}
# 查询 pditems 索引中title中包含"电脑"的商品
POST /pditems/_search
{
"query": {
"match": {
"title": "电脑"
}
}
}
# 价格大于2000,并且title中包含"电脑"的商品
POST /pditems/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "电脑"
}
}
],
"filter": [
{
"range": {
"price": {
"gte": "2000"
}
}
}
]
}
}
}
POST /pditems/_search
{
"query": {
"multi_match":{
"query": "手机",
"fields": ["title", "sell_point"]
}
},
"highlight" : {
"pre_tags" : [""],
"post_tags" : [""],
"fields" : {
"title" : {},
"sell_point" : {
"pre_tags": "",
"post_tags": ""
}
}
}
}