2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Elasticsearch docker中搭建ES服务集群 ik中文分词器 使用Kibana操作ES 搜索 spr

Elasticsearch docker中搭建ES服务集群 ik中文分词器 使用Kibana操作ES 搜索 spr

时间:2024-01-17 04:20:46

相关推荐

Elasticsearch docker中搭建ES服务集群 ik中文分词器 使用Kibana操作ES 搜索 spr

设置为:3072的,就是2G

然后重启虚拟机

集群部署结构

在一台服务器上,使用Docker部署三个ES容器组成的集群

准备虚拟网络和挂载目录

# 创建虚拟网络docker network create es-net# node1 的挂载目录mkdir -p -m 777 /var/lib/es/node1/pluginsmkdir -p -m 777 /var/lib/es/node1/data# node2 的挂载目录mkdir -p -m 777 /var/lib/es/node2/pluginsmkdir -p -m 777 /var/lib/es/node2/data# node3 的挂载目录mkdir -p -m 777 /var/lib/es/node3/pluginsmkdir -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 版本匹配:

/medcl/elasticsearch-analysis-ik

或者可以访问 gitee 镜像仓库:

/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

我们有三个节点,在每个节点上都创建一个分片。每个分片在另两个节点上各创建一个副本。

# 创建索引,命名为 productsPUT /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":"-03-08 21:33:18","updated":"-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

https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#reference

Spring Data Elasticsearch 是 Elasticsearch 搜索引擎开发的解决方案。它提供:

模板对象,用于存储、搜索、排序文档和构建聚合的高级API。

例如,Repository 使开发者能够通过定义具有自定义方法名称的接口来表达查询。

案例说明

在 Elasticsearch 中存储学生数据,并对学生数据进行搜索测试。

数据结构:

案例测试以下数据操作:

创建 students 索引和映射C - 创建学生数据R - 访问学生数据U - 修改学生数据D - 删除学生数据使用 Repository 和 Criteria 搜索学生数据

在 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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。