五阶段--使用 Kibana 操作 ES/ 搜索
一 使用 Kibana 操作 ES
1 下载 Kibana 镜像
docker pull kibana:7.9.3
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
- 启动后,浏览器访问 Kibana,进入
Dev Tools
:多访问几次就能进入
http://192.168.64.181:5601/
3 索引、分片和副本
3.1 索引
Elasticsearch索引用来存储我们要搜索的数据,以倒排索引结构进行存储。mysql数据库使用的是B+Tree索引.
例如,要搜索商品数据,可以创建一个商品数据的索引,其中存储着所有商品的数据,供我们进行搜索:
当索引中存储了大量数据时,大量的磁盘io操作会降低整体搜索新能,这时需要对数据进行分片存储。
3.2 索引分片
在一个索引中存储大量数据会造成性能下降,这时可以对数据进行分片存储。
每个节点上都创建一个索引分片,把数据分散存放到多个节点的索引分片上,减少每个分片的数据量来提高io性能:
每个分片都是一个独立的索引,数据分散存放在多个分片中,也就是说,每个分片中存储的都是不同的数据。搜索时会同时搜索多个分片,并将搜索结果进行汇总。
如果一个节点宕机分片不可用,则会造成部分数据无法搜索:
为了解决这一问题(分片宕机),可以对分片创建多个副本来解决。
3.3 索引副本
对分片创建多个副本,那么即使一个节点宕机,其他节点中的副本分片还可以继续工作,不会造成数据不可用:
分片的工作机制:
分片的工作机制:
- 主分片的数据会复制到副本分片
- 搜索时,以负载均衡的方式工作,提高处理能力
- 主分片宕机时,其中一个副本分片会自动提升为主分片
下面我们就以上图的结构来创建 products 索引
3.4 创建索引
创建一个名为 products 的索引,用来存储商品数据。
分片和副本参数说明:
- number_of_shards:分片数量,默认值是 5
- number_of_replicas:副本数量,默认值是 1
我们有三个节点,在每个节点上都创建一个分片。每个分片在另两个节点上各创建一个副本。
# 创建索引,命名为 products
PUT /products
{"settings": {"number_of_shards": 3, "number_of_replicas": 2}
}
提交相当于访问http://181:9200/products 创建索引
用索引名称过滤,查看 products 索引:粗框为主分片,细框为副本分片
注意:
4 映射(数据结构)
类似于数据库表结构,索引数据也被分为多个数据字段,并且需要设置数据类型和其他属性。
映射,是对索引中字段结构的定义和描述。
4.1 字段的数据类型
常用类型:
1)数字类型:
- byte、short、integer、long
- float、double
- unsigned_long
2)字符串类型:
- text : 会进行分词
- keyword : 不会进行分词,适用于email、主机地址、邮编等
3)日期和时间类型:
- date
类型参考:
Field data types | Elasticsearch Guide [7.15] | Elastic
4.2 创建映射
在 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"}}
}
映射参考:
Mapping | Elasticsearch Guide [7.15] | Elastic
4.3 查看映射
GET /products/_mapping
5 添加文档
添加的文档会有一个名为_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"
}PUT /products/_doc/10034
{"id":"10034","title":"天猫魔盒 M13网络电视机顶盒 高清电视盒子wifi 64位硬盘播放器","category":"潮酷数码会场","price":"398.00","city":"浙江杭州","barcode":"522994634119"
}PUT /products/_doc/10035
{"id":"10035","title":"BOSE SoundSport耳塞式运动耳机 重低音入耳式防脱降噪音乐耳机","category":"潮酷数码会场","price":"860.00","city":"浙江杭州","barcode":"526558749068"
}PUT /products/_doc/10036
{"id":"10036","title":"【送支架】Beats studio Wireless 2.0无线蓝牙录音师头戴式耳机","category":"潮酷数码会场","price":"2889.00","city":"上海","barcode":"37147009748"
}PUT /products/_doc/10037
{"id":"10037","title":"SONOS PLAY:1无线智能音响系统 美国原创WiFi连接 家庭桌面音箱","category":"潮酷数码会场","price":"1580.01","city":"上海","barcode":"527783392239"
}
- 注意:五条一条条执行,会在Elasticsearch-head中查看到信息:
也可以自动生成 _id
值:
POST /products/_doc
{"id":"10027","title":"vivo X9前置双摄全网通4G美颜自拍超薄智能手机大屏vivox9","category":"手机会场","price":"2798.00","city":"广东东莞","barcode":"541396973568"
}
查看文档:
GET /products/_doc/10037
查看指定文档title字段的分词结果:
GET /products/_doc/10037/_termvectors?fields=title
6 修改文档
底层索引数据无法修改,修改数据实际上是先删除再重新添加。
两种修改方式:
- PUT:对文档进行完整的替换
- POST:可以修改一部分字段
修改价格字段的值:PUT方式只改价格时也要把完整的文档都添加进去
# 修改文档 - 替换
PUT /products/_doc/10037
{"id":"10037","title":"SONOS PLAY:1无线智能音响系统 美国原创WiFi连接 家庭桌面音箱","category":"潮酷数码会场","price":"9999.99","city":"上海","barcode":"527783392239"
}
查看文档:
GET /products/_doc/10037
修改价格和城市字段的值:POST方式修改文档时,可以只给出要修改的字段值
# 修改文档 - 更新部分字段
POST /products/_update/10037
{"doc": {"price":"8888.88","city":"深圳"}
}
查看文档:
GET /products/_doc/10037
7 删除文档
# 删除文档
DELETE /products/_doc/10037#
清空: 所有文档都清空删除
POST /products/_delete_by_query
{"query": {"match_all": {}}
}
8 删除索引
# 删除 products 索引 ,重新刷新页面,products索引就消失了
DELETE /products
可以尝试用不同的分片和副本值来重新创建 products 索引.
二 搜索
1 导入测试数据
为了测试搜索功能,我们首先导入测试数据,3160条商品数据,数据样例如下
{ "index": {"_index": "pditems", "_id": "536563"}}
{ "id":"536563","brand":"联想","title":"联想(Lenovo)小新Air13 Pro 13.3英寸14.8mm超轻薄笔记本电脑","sell_point":"清仓!仅北京,武汉仓有货!","price":"6688.0","barcode":"","image":"/images/server/images/portal/air13/little4.jpg","cid":"163","status":"1","created":"2015-03-08 21:33:18","updated":"2015-04-11 20:38:38"}
1.1 下载测试数据
Elasticsearch测试数据,3160条商品数据_es测试数据-Java文档类资源-CSDN下载
将压缩文件中的 pditems.json
上传到服务器
1.2 创建索引和映射
PUT /pditems
{"settings": {"number_of_shards": 3, "number_of_replicas": 2},"mappings": {"properties": {"id": {"type": "long"},"brand": {"type": "text","analyzer": "ik_smart"},"title": {"type": "text","analyzer": "ik_max_word"},"sell_point": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},"price": {"type": "float"},"image": {"type": "keyword"},"cid": {"type": "long"},"status": {"type": "byte"},"created": {"type": "date","format": "yyyy-MM-dd HH:mm:ss"},"updated": {"type": "date","format": "yyyy-MM-dd HH:mm:ss"}} }
}
- 用 head 查看索引:
1.3 导入数据
- 在服务器上,进入
pditems.json
所在的文件夹,执行批量数据导入:
curl -XPOST 'localhost:9200/pditems/_bulk' \-H 'Content-Type:application/json' \--data-binary @pditems.json
1.4 查看数据
搜索 pditems
索引中全部 3160 条数据:
GET /pditems/_search
{"query": {"match_all": {}},"size": 3160
}
2 搜索文档
2.1 搜索所有数据
# 搜索 pditems 索引中全部数据 没有size指定搜索数量,默认只搜索10条数据
POST /pditems/_search
{"query": {"match_all": {}}
}
2.2 关键词搜索
# 查询 pditems 索引中title中包含"电脑"的商品
POST /pditems/_search
{"query": {"match": {"title": "电脑"}}
}
2.3 搜索结果过滤器
# 价格大于2000,并且title中包含"电脑"的商品 gte:大于等于 lte:小于等于
POST /pditems/_search
{"query": {"bool": {"must": [{"match": {"title": "电脑"}}],"filter": [{"range": {"price": {"gte": "2000"}}}]}}
}
2.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>"}}}
}
五阶段--使用 Kibana 操作 ES/ 搜索相关推荐
- Elasticsearch(一)——Es安装(三个必安工具、安装各种类型分词器)、Es 十大核心概念、通过 Kibana 操作 Es(中文分词、Es各种索引命令操作)
Elasticsearch(一)--Es安装(三个必安工具.安装各种类型分词器).Es 十大核心概念.通过 Kibana 操作 Es(中文分词.Es各种索引命令操作) 一.Elasticsearch ...
- elasticsearch 7.9.3知识归纳整理(二)之 es基本原理及使用kibana操作es的常见命令
es基本原理及使用kibana操作es的常见命令 一.es的基本原理与基础概念 1.1 倒排索引 倒排索引源于实际应用中需要根据属性的值来查找记录.这种索引表中的每一项都包括一个属性值和具有该属性值的 ...
- Elasticsearch(三) 使用kibana 操作ES
文档中包含语句 1,索引(新增 查询 删除) 2, mapping 创建 3,文档(新增,修改,删除,批量新增) 4,文档查询(基本查询,高级查询,分页,高亮,排序) 1,使用kibana 新增 查询 ...
- Elasticsearch(三)——Es搜索(简单使用、全文查询、复合查询)、地理位置查询、特殊查询、聚合操作、桶聚合、管道聚合
Elasticsearch(三)--Es搜索(简单使用.全文查询.复合查询).地理位置查询.特殊查询.聚合操作.桶聚合.管道聚合 一.Es搜索 这里的 Es 数据博主自己上网找的,为了练习 Es 搜索 ...
- ElasticSearch-TransportClient客户端操作Es(五)
引入maven依赖 <dependency><groupId>org.elasticsearch</groupId><artifactId>elasti ...
- Elasticsearch笔记五之java操作es
Java操作es集群步骤1:配置集群对象信息:2:创建客户端:3:查看集群信息 1:集群名称 默认集群名为elasticsearch,如果集群名称和指定的不一致则在使用节点资源时会报错. 2:嗅探功能 ...
- 日志分析系统ELK之Kibana、es的替代metricbeat
Kibana Kibana简介 怎么将数据导入kibana 演示环境 kibana安装与配置 可视化现有 Elasticsearch 索引中的数据 创建索引 创建可视化仪表盘图 创建可视化垂直条形图 ...
- 商城项目(五)整合Elasticsearch实现商品搜索
商城项目(五)整合Elasticsearch实现商品搜索 环境配置 Elasticsearch Elasticsearch 是一个分布式.可扩展.实时的搜索与数据分析引擎. 它能从项目一开始就赋予你的 ...
- ELasticSearch安装使用过程中遇到的坑的解决方案,以及使用Kibana操作ELasticSearch
一.安装elasticsearch和kibana 安装elasticsearch和kibana,我现在使用的是windows版本的,安装其实也不难,具体的安装教程可以参照这两篇博客,写的安装步骤也很详 ...
- docker安装es+mac安装Kibana工具+es查询语法笔记
一.docker安装es 1.下载镜像 docker pull elasticsearch:7.9.0 下载完后,查看镜像 docker images 2.启动镜像 docker network ...
最新文章
- 【OpenCV 4开发详解】分割图像——Grabcut图像分割
- Github上 Star 数相加超过 7w+ 的三个面试相关的仓库推荐
- window.btoa
- tf.name_scope()和tf.variable_scope()
- mysql 查询分析器中使用if_查询分析器中开发代码测试检查_MySQL
- Python中的元类及元类实现的单例模式
- 【POJ3045】Cow Acrobats(贪心)
- 算法导论笔记(四)算法分析常用符号
- Java:接口文档示例
- Code Project精彩系列(1)
- 小程序组件实现周日历功能,课程表、食谱等功能可能会用到的日历简单实现
- 中英文网站googleSEO优化技巧
- java adsl 拨号_Java实现ADSL拨号上网
- (一)1. 数据流图(DFD)概念及画法
- cuckoo沙箱配置部署流程
- 强化学习笔记(3)-时序差分更新算法
- 碰到国内外虚拟机无法识别usb加密狗或者银行U盾问题,大家请进入!!!
- 【微信小程序云开发】使用云函数(node.js)实现多张图片转成pdf的功能,且pdf带水印
- 安装labelimg及出现的问题
- 一文教你读懂什么是移动办公oa?如何注册登录邮箱163?
热门文章
- 大一新生HTML期末作业 学生个人网页设计作业 HTML5响应式个人简历网站模板 web前端网页制作课作业
- 基于Python的Bangumi中动画片排行榜数据可视化分析
- 影子系统PowerShadow v2.6.0511中文破解版
- 安卓没有删除谷歌服务框架
- NotNorthwind-更新#1-您所有的Northwind都属于我们
- 名人论数学——数学的本质
- win10计算机管理看不见蓝牙,win10蓝牙不见了的解决方法
- 联想服务器linux系统raid驱动,IntelRAID 6.12版RAID卡驱动官方正式版下载,适用于linux-驱动精灵...
- 物联网开发笔记(28)- 使用Micropython开发ESP32开发板之控制240x240的oled屏幕显示图片(ST7789芯片)
- 汉澳sinox2013支持的PCI/USB无线网卡,购买必看