Elasticsearch docker中搭建ES服务集群,ik中文分词器,使用Kibana操作ES 搜索 spring Data Elasticsearch-增删改查API
设置为:3072的,就是2G
然后重启虚拟机
集群部署结构
在一台服务器上,使用Docker部署三个ES容器组成的集群
准备虚拟网络和挂载目录
# 创建虚拟网络
docker network create es-net# node1 的挂载目录
mkdir -p -m 777 /var/lib/es/node1/plugins
mkdir -p -m 777 /var/lib/es/node1/data# node2 的挂载目录
mkdir -p -m 777 /var/lib/es/node2/plugins
mkdir -p -m 777 /var/lib/es/node2/data# node3 的挂载目录
mkdir -p -m 777 /var/lib/es/node3/plugins
mkdir -p -m 777 /var/lib/es/node3/data
设置 max_map_count
必须修改系统参数 max_map_count
,否则 Elasticsearch 无法启动:
在 /etc/sysctl.conf
文件中添加 vm.max_map_count=262144
echo 'vm.max_map_count=262144' >>/etc/sysctl.conf
需要重启服务器!
如图
确认参数配置:
cat /etc/sysctl.conf
操作效果
启动 Elasticsearch 集群
node1:
docker run -d \--name=node1 \--restart=always \--net es-net \-p 9200:9200 \-p 9300:9300 \-v /var/lib/es/node1/plugins:/usr/share/elasticsearch/plugins \-v /var/lib/es/node1/data:/usr/share/elasticsearch/data \-e node.name=node1 \-e node.master=true \-e network.host=node1 \-e discovery.seed_hosts=node1,node2,node3 \-e cluster.initial_master_nodes=node1 \-e cluster.name=es-cluster \-e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \elasticsearch:7.9.3
node2:
docker run -d \--name=node2 \--restart=always \--net es-net \-p 9201:9200 \-p 9301:9300 \-v /var/lib/es/node2/plugins:/usr/share/elasticsearch/plugins \-v /var/lib/es/node2/data:/usr/share/elasticsearch/data \-e node.name=node2 \-e node.master=true \-e network.host=node2 \-e discovery.seed_hosts=node1,node2,node3 \-e cluster.initial_master_nodes=node1 \-e cluster.name=es-cluster \-e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \elasticsearch:7.9.3
node3:
docker run -d \--name=node3 \--restart=always \--net es-net \-p 9202:9200 \-p 9302:9300 \-v /var/lib/es/node3/plugins:/usr/share/elasticsearch/plugins \-v /var/lib/es/node3/data:/usr/share/elasticsearch/data \-e node.name=node3 \-e node.master=true \-e network.host=node3 \-e discovery.seed_hosts=node1,node2,node3 \-e cluster.initial_master_nodes=node1 \-e cluster.name=es-cluster \-e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \elasticsearch:7.9.3
环境变量说明:
参考 Networking | Elasticsearch Guide [7.15] | Elastic
操作效果
其中9200就相当于3066一样
9300就是es之间的连接的端口
查看启动结果结果
http://192.168.64.181:9200
http://192.168.64.181:9200/_cat/nodes
chrome浏览器插件:elasticsearch-head
elasticsearch-head 项目提供了一个直观的界面,可以很方便地查看集群、分片、数据等等。elasticsearch-head最简单的安装方式是作为 chrome 浏览器插件进行安装。
然后在谷歌浏览里选择:
里面选择:更多工具->拓展程序
然后选择上一张截图里的解压文件
安装 ik 分词器
从 ik 分词器项目仓库中下载 ik 分词器安装包,下载的版本需要与 Elasticsearch 版本匹配:
https://github.com/medcl/elasticsearch-analysis-ik
或者可以访问 gitee 镜像仓库:
https://gitee.com/mirrors/elasticsearch-analysis-ik
下载 elasticsearch-analysis-ik-7.9.3.zip 复制到 /root/ 目录下
在三个节点上安装 ik 分词器:
cd ~/# 复制 ik 分词器到三个 es 容器
docker cp elasticsearch-analysis-ik-7.9.3.zip node1:/root/
docker cp elasticsearch-analysis-ik-7.9.3.zip node2:/root/
docker cp elasticsearch-analysis-ik-7.9.3.zip node3:/root/# 在 node1 中安装 ik 分词器
docker exec -it node1 elasticsearch-plugin install file:///root/elasticsearch-analysis-ik-7.9.3.zip# 在 node2 中安装 ik 分词器
docker exec -it node2 elasticsearch-plugin install file:///root/elasticsearch-analysis-ik-7.9.3.zip# 在 node3 中安装 ik 分词器
docker exec -it node3 elasticsearch-plugin install file:///root/elasticsearch-analysis-ik-7.9.3.zip# 重启三个 es 容器
docker restart node1 node2 node3
操作效果:
ik_max_word
分词测试
使用 head 执行下面测试:
向 http://192.168.64.181:9200/_analyze
路径提交 POST
请求,并在协议体中提交 Json 数据:
{"analyzer":"ik_max_word","text":"中华人民共和国国歌"
}
创建索引
创建一个名为 products 的索引,用来存储商品数据。
分片和副本参数说明:
number_of_shards:分片数量,默认值是 5
number_of_replicas:副本数量,默认值是 1
我们有三个节点,在每个节点上都创建一个分片。每个分片在另两个节点上各创建一个副本。
# 创建索引,命名为 products
PUT /products
{"settings": {"number_of_shards": 3, "number_of_replicas": 2}
}
网址打开比较慢,很正常,如果网速不好,打开是比较慢可以多等一下!
下图则表示成功:
粗框为主分片,细框为副本分片
映射(数据结构)
类似于数据库表结构,索引数据也被分为多个数据字段,并且需要设置数据类型和其他属性。
映射,是对索引中字段结构的定义和描述。
字段的数据类型
常用类型:
数字类型:
byte、short、integer、long
float、double
unsigned_long
字符串类型:
text : 会进行分词
keyword : 不会进行分词,适用于email、主机地址、邮编等
日期和时间类型:
date
类型参考:
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html
创建映射
在 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
添加文档
添加的文档会有一个名为_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"
}
也可以自动生成 _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
修改文档
底层索引数据无法修改,修改数据实际上是先删除再重新添加。
两种修改方式:
- PUT:对文档进行完整的替换
- POST:可以修改一部分字段
修改价格字段的值:
# 修改文档 - 替换
PUT /products/_doc/10037
{"id":"10037","title":"SONOS PLAY:1无线智能音响系统 美国原创WiFi连接 家庭桌面音箱","category":"潮酷数码会场","price":"9999.99","city":"上海","barcode":"527783392239"
}
查看文档:
GET /products/_doc/10037
修改价格和城市字段的值:
# 修改文档 - 更新部分字段
POST /products/_update/10037
{"doc": {"price":"8888.88","city":"深圳"}
}
查看文档:
GET /products/_doc/10037
删除文档
DELETE /products/_doc/10037
清空
POST /products/_delete_by_query
{"query": {"match_all": {}}
}
删除索引
# 删除 products 索引
DELETE /products
# 删除 products 索引
DELETE /products
可以尝试用不同的分片和副本值来重新创建 products 索引
Elasticsearch(四)搜索
导入测试数据
为了测试搜索功能,我们首先导入测试数据,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"}
下载测试数据
Elasticsearch测试数据,3160条商品数据_elasticsearch商品属性-Java文档类资源-CSDN下载
将压缩文件中的 pditems.json
上传到服务器
创建索引和映射
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 查看索引:
导入数据
在服务器上,进入 pditems.json
所在的文件夹,执行批量数据导入:
curl -XPOST 'localhost:9200/pditems/_bulk' \-H 'Content-Type:application/json' \--data-binary @pditems.json
执行效果图
查看数据
搜索 pditems
索引中全部 3160 条数据:
GET /pditems/_search
{"query": {"match_all": {}},"size": 3160
}
查询效果:
也可以在Elasticsearch里测试:
搜索文档
搜索所有数据
# 搜索 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" : ["<i class=\"highlight\">"],"post_tags" : ["</i>"],"fields" : {"title" : {},"sell_point" : {"pre_tags": "<em>","post_tags": "</em>"}}}
}
Elasticsearch Spring Data Elasticsearch - 增删改查API
Spring Data Elasticsearch 是 Elasticsearch 搜索引擎开发的解决方案。它提供:
例如,Repository 使开发者能够通过定义具有自定义方法名称的接口来表达查询。
案例说明
在 Elasticsearch 中存储学生数据,并对学生数据进行搜索测试。
在 Elasticsearch 中创建 students 索引
在开始运行测试之前,在 Elasticsearch 中先创建 students 索引:
PUT /students
{"settings": {"number_of_shards": 3,"number_of_replicas": 2,"index.max_ngram_diff":30,"analysis": {"analyzer": {"ngram_analyzer": {"tokenizer": "ngram_tokenizer"}},"tokenizer": {"ngram_tokenizer": {"type": "ngram","min_gram": 1,"max_gram": 30,"token_chars": ["letter","digit"]}}}},"mappings": {"properties": {"id": {"type": "long"},"name": {"type": "text","analyzer": "ngram_analyzer"},"gender": {"type": "keyword"},"birthDate": {"type": "date","format": "yyyy-MM-dd"}}}
}
Elasticsearch docker中搭建ES服务集群,ik中文分词器,使用Kibana操作ES 搜索 spring Data Elasticsearch-增删改查API相关推荐
- 学习 ES 的笔记、全文检索、倒排索引、Lucene、ik中文分词器、Kibana使用Dev Tools
文章目录 感悟 新接触的单词 知识点一:ES是什么? 知识点二:ES基本概念 知识点三:1.1 什么是全文检索和Lucene? 知识点四:1.2 什么是倒排索引,Lucene实现全文检索的流程是怎样? ...
- Docker中搭建redis分片集群,搭建redis哨兵结构,实现springboot中对redis分片集群、哨兵结构的访问,Redis缓存雪崩、缓存击穿处理(非关系型数据库技术课程 第十二周)
文章目录 一.要求: 二.知识总结 缓存雪崩 解决方案 docker中redis分片集群搭建 配置好配置文件 redis-6380.conf redis-6381.conf redis-6382.co ...
- es数据库集群以及中文分词
##1: 集群相关名词 1.集群健康状态 绿色: 所有数据都完整,并且副本数满足 黄色: 所有数据都完整,但是有的索引副本数不满足 红色: 有的数据不完整 2.节点类型 主节点: 负责调度数据分配到哪 ...
- springboot elasticsearch vue ik中文分词器 实现百度/京东全文搜索
背景:实现和百度搜索一样效果的,全文搜索引擎支持关键词高亮显示 文章目录 1. 企业级搜索引擎解决方案 2. 创建索引规则 3. 数据拉取 4. 搜索高亮 5. 自定义词库 6. 效果图 7. 开源源 ...
- 使用Docker Swarm搭建分布式爬虫集群
转载自 使用Docker Swarm搭建分布式爬虫集群 在爬虫开发过程中,你肯定遇到过需要把爬虫部署在多个服务器上面的情况.此时你是怎么操作的呢?逐一SSH登录每个服务器,使用git拉下代码,然后运 ...
- 使用 Docker Stack 部署多服务集群
使用 Docker Stack 部署多服务集群 前言 单机模式下,我们可以使用 Docker Compose 来编排多个服务,而在 上一篇文章 中介绍的 Docker Swarm 只能实现对单个服务的 ...
- 在 Kubernetes 中, 搭建高可用集群
永久地址:在 Kubernetes 中, 搭建高可用集群(保存网址不迷路
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十九)ES6.2.2 安装Ik中文分词器
注: elasticsearch 版本6.2.2 1)集群模式,则每个节点都需要安装ik分词,安装插件完毕后需要重启服务,创建mapping前如果有机器未安装分词,则可能该索引可能为RED,需要删除后 ...
- 使用Docker快速安装部署ES和Kibana并配置IK中文分词器以及自定义分词拓展词库
使用Docker快速安装部署ES和Kibana的前提:首先需要确保已经安装了Docker环境 如果没有安装Docker的话,可以参考上一篇的内容:Linux上安装Docker 有了Docker环境后, ...
- Lucene 和 Kibana、ElasticSeach、Spring Data ElasticSearch
什么是全文检索 数据分类 生活中的数据总体分为两种:结构化数据和非结构化数据. 结构化数据 - 行数据,可以用二维表结构来逻辑表达实现的数据:指具有固定格式或有限长度的数据,如数据库,元数据等. 非结 ...
最新文章
- 法国科学家发布AI模型,阐释蛋白结构和功能及进化关系
- linux install g++
- BZOJ4545: DQS的trie 广义后缀自动机_LCT
- 学android开发,入门语言JAVA知识点
- java编写一个邮件程序显示收件箱中所有的邮件列表_如何使用JavaMail获取邮件帐户中的可用文件夹列表...
- Mongo 常用的server命令
- 安卓电视 TV端的webview网页 按键控制和一些小问题
- 社团挖掘算法——BGLL算法
- 西门子TIA portal中如何安装FANUC机器人的GSD文件
- java数组和集合的区别_java中数组和集合的区别是什么?
- NKOJ 4234 三角分形
- 【Day6.2】现金所剩无几,机智想办法去机场
- 【C++】如何释放vector的内存空间及std::vector::shrink_to_fit用法简介
- 冰河的大学生活,两个好基友:二神和波妞,哈哈,挺有意思的
- C++中出现[Error] ‘rand‘ was not declared in this scop报错
- [4G5G专题-93]:流程 - 4G LTE 终端在RRC 连接状态下的小区切换通用过程
- anaconda 创建虚拟环境(自己版本)
- 图——图的深度优先遍历
- bluekitchen-stm32f1/csr8311移植笔记(4)-database driver
- height:100%与height:inherit的区别